Kofferdetektiv iPad-Performance: sicheres Buendel (Aufloesung + AA + GPU)
Nur auf Touch-Geraeten (Desktop unveraendert): - Render-Aufloesung auf dpr 1.3 gedeckelt (dprCap-Helper) statt bis 2 — dpr 2 = 4x Pixel war der teuerste Posten. - antialias aus (MSAA teuer auf Mobile), Retina-Dichte kaschiert Kanten. - powerPreference:'high-performance' fuer die staerkere GPU-Pipeline. Co-Authored-By: Claude Opus 4.8 <noreply@anthropic.com>
This commit is contained in:
@@ -18,6 +18,11 @@ const STORE_KEY = 'kofferdetektiv.v1';
|
||||
|
||||
const $ = id => document.getElementById(id);
|
||||
const IS_TOUCH = matchMedia('(pointer: coarse)').matches;
|
||||
// iPad-Performance: dpr 2 = 4× Pixel und der teuerste Posten. Auf Touch die
|
||||
// Render-Auflösung auf 1.3 deckeln (Retina-Dichte kaschiert es), Desktop bleibt
|
||||
// bei seinem jeweiligen Cap.
|
||||
const TOUCH_DPR_CAP = 1.3;
|
||||
const dprCap = hi => Math.min(window.devicePixelRatio || 1, IS_TOUCH ? TOUCH_DPR_CAP : hi);
|
||||
|
||||
/* ============================================================
|
||||
* AUDIO — SFX, Ambience, PA-Durchsagen, Musik
|
||||
@@ -624,8 +629,8 @@ const World = {
|
||||
|
||||
init(canvas) {
|
||||
this.camera = new THREE.PerspectiveCamera(72, canvas.clientWidth / canvas.clientHeight, 0.1, 320);
|
||||
this.renderer = new THREE.WebGLRenderer({ canvas, antialias: true });
|
||||
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.6));
|
||||
this.renderer = new THREE.WebGLRenderer({ canvas, antialias: !IS_TOUCH, powerPreference: 'high-performance' });
|
||||
this.renderer.setPixelRatio(dprCap(1.6));
|
||||
this.renderer.setSize(canvas.clientWidth, canvas.clientHeight, false);
|
||||
this.bindInput(canvas);
|
||||
window.addEventListener('resize', () => this.resize());
|
||||
@@ -641,7 +646,7 @@ const World = {
|
||||
this.boardCtx = null; this.boardTex = null; this.glbKoffer = null; this.eyeY = null;
|
||||
this.doors = []; this._tpArmed = true;
|
||||
// Renderer-Qualität auf Klassik-Standard zurücksetzen (GLB überschreibt)
|
||||
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 1.6));
|
||||
this.renderer.setPixelRatio(dprCap(1.6));
|
||||
this.renderer.toneMapping = THREE.NoToneMapping;
|
||||
this.renderer.toneMappingExposure = 1;
|
||||
this.renderer.shadowMap.enabled = false;
|
||||
@@ -691,7 +696,7 @@ const World = {
|
||||
|
||||
// Qualität „all in“ (Schul-iPads ab 2022): ACES-Tonemapping, Retina,
|
||||
// statisch gebackene Schatten, Environment-Reflexionen für den Boden
|
||||
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
||||
this.renderer.setPixelRatio(dprCap(2));
|
||||
this.renderer.toneMapping = THREE.ACESFilmicToneMapping;
|
||||
this.renderer.toneMappingExposure = 1.12;
|
||||
this.renderer.shadowMap.enabled = true;
|
||||
@@ -1181,7 +1186,7 @@ const World = {
|
||||
|
||||
// Qualität „all in“ (Schulgeräte ab 2022): volle Auflösung, ACES-Tonemapping,
|
||||
// statische Schatten (einmal gerendert, danach kostenlos)
|
||||
this.renderer.setPixelRatio(Math.min(window.devicePixelRatio, 2));
|
||||
this.renderer.setPixelRatio(dprCap(2));
|
||||
this.renderer.toneMapping = THREE.ACESFilmicToneMapping;
|
||||
this.renderer.toneMappingExposure = 1.15;
|
||||
this.renderer.shadowMap.enabled = true;
|
||||
|
||||
Reference in New Issue
Block a user