feat: build procedural lifecycle-safe drive scene

This commit is contained in:
2026-09-02 04:53:55 +03:00
parent cc0887fee0
commit fd8347fbdc
14 changed files with 1822 additions and 0 deletions

View File

@@ -0,0 +1,29 @@
import type { LiveQualityTier } from '@/scene/types';
export interface RenderQualitySettings {
pixelRatio: number;
terrainSegments: number;
particleCount: number;
postEffects: boolean;
}
const settings: Readonly<Record<LiveQualityTier, Omit<RenderQualitySettings, 'pixelRatio'> & { dprCap: number }>> = {
high: { dprCap: 2, terrainSegments: 96, particleCount: 384, postEffects: true },
medium: { dprCap: 1.5, terrainSegments: 64, particleCount: 192, postEffects: true },
low: { dprCap: 1.25, terrainSegments: 32, particleCount: 64, 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),
terrainSegments: selected.terrainSegments,
particleCount: selected.particleCount,
postEffects: selected.postEffects,
};
}