Integrate the Blender grand tourer with a cohesive shader-driven road, terrain, atmosphere, lighting, and post-processing pass. Refine responsive drive dynamics and sign lifecycle behavior, and add durable visual, accessibility, and performance verification evidence.
65 lines
1.6 KiB
TypeScript
65 lines
1.6 KiB
TypeScript
import type { LiveQualityTier } from '@/scene/types';
|
|
|
|
export interface RenderQualitySettings {
|
|
pixelRatio: number;
|
|
roadSegments: number;
|
|
terrainSegments: number;
|
|
terrainOctaves: 1 | 2 | 3;
|
|
starCount: number;
|
|
streakCount: number;
|
|
postScale: number;
|
|
postEffects: boolean;
|
|
}
|
|
|
|
const settings: Readonly<Record<LiveQualityTier, Omit<RenderQualitySettings, 'pixelRatio'> & { dprCap: number }>> = {
|
|
high: {
|
|
dprCap: 1.5,
|
|
roadSegments: 224,
|
|
terrainSegments: 112,
|
|
terrainOctaves: 3,
|
|
starCount: 760,
|
|
streakCount: 112,
|
|
postScale: 1,
|
|
postEffects: true,
|
|
},
|
|
medium: {
|
|
dprCap: 1.5,
|
|
roadSegments: 168,
|
|
terrainSegments: 80,
|
|
terrainOctaves: 2,
|
|
starCount: 420,
|
|
streakCount: 64,
|
|
postScale: 0.7,
|
|
postEffects: true,
|
|
},
|
|
low: {
|
|
dprCap: 1.25,
|
|
roadSegments: 112,
|
|
terrainSegments: 48,
|
|
terrainOctaves: 1,
|
|
starCount: 160,
|
|
streakCount: 28,
|
|
postScale: 0,
|
|
postEffects: false,
|
|
},
|
|
};
|
|
|
|
export function renderQualityFor(
|
|
tier: LiveQualityTier,
|
|
devicePixelRatio: number,
|
|
mobileOrTablet: boolean,
|
|
): RenderQualitySettings {
|
|
const selected = settings[tier];
|
|
const finiteDpr = Number.isFinite(devicePixelRatio) ? Math.max(1, devicePixelRatio) : 1;
|
|
return {
|
|
pixelRatio: Math.min(finiteDpr, selected.dprCap, mobileOrTablet ? 1.5 : 2),
|
|
roadSegments: selected.roadSegments,
|
|
terrainSegments: selected.terrainSegments,
|
|
terrainOctaves: selected.terrainOctaves,
|
|
starCount: selected.starCount,
|
|
streakCount: selected.streakCount,
|
|
postScale: selected.postScale,
|
|
postEffects: selected.postEffects,
|
|
};
|
|
}
|