Skip to content

AAA-Rendering-Techniken — Wunschliste & Bestand ​

Ursprünglich: 2026-08-19/20 — vergleichende Recherche von Rendering-Techniken aus Unreal Engine, Babylon.js, three.js und Godot hinsichtlich Übertragbarkeit auf eine kleine Hybrid-WebGL1/WebGL2/WebGPU-Engine. Umbau: 2026-09-27 — die ursprüngliche Recherche wurde gegen den Live-Code verifiziert; umgesetzte Punkte sind jetzt fester Bestand, die verbleibenden Punkte sind unten als pflegbare Wunschliste konsolidiert. Die vollständige Recherche-Historie (Methode, Quellen, Details) ist in den Git-Commits dieses Dokuments und im Referenz-Anhang am Ende erhalten.

Hinweis: docs/research/ ist ein Point-in-time-Bereich. Diese Datei wird zugleich als Wunschliste gepflegt; der Abgabestand („erledigt") ist anhand des Live-Codes verifiziert und muss bei neuer Implementierung aktualisiert werden (✅/🟡/🔍 gemäß Konvention, niemals gelöscht werden).


Wunschliste (offene Punkte, pflegbar) ​

#TechnikPrioritätAufwandAbhängigkeit / Hinweis
W1Echter volumetrischer Nebel (Froxel, „Stufe B") — kamera-ausgerichtetes 3D-Dichte-Raster + Raymarching + Phasenfunktion/In-Scattering gegen Lichtquellen, God-Rays.hoch (nächstes großes Vorhaben)mittelWiederverwendet die Clustered-Lighting-Infrastruktur (#5): Frustum-Slicing, Pro-Zelle-Lichtlisten (Frostbite/Hillaire SIGGRAPH 15 bestätigt diese Reihenfolge). WebGPU via Compute, WebGL2 via CPU-Culling+Datentextur, WebGL1 kein Pfad. Referenzarchitektur: Unreal, Godot 4 (nur Forward+), Frostbite.
W2Volles GTAO — aktuell nur ein vereinfachtes HBAO (AOPassGL/GPU, HbaoElement). Es fehlen: kosinus-gewichtete Arc-Integration (arccos statt dot()-Proxy), Multi-Bounce-Näherung, Dünne-Objekte-Heuristik, Temporal Filtering über Motion Vectors (bräuchte volles TAA, netto offen).mittelmittelSeparate Einordnung im Referenz-Anhang A.
W3LOD + Dithered Cross-Fade — kein LOD-System vorhanden; einfache Distanzstufen mit Bayer-/Noise-Dither an der Fade-Grenze.niedrig-mittelmittelErst sinnvoll, wenn Multi-LOD-Assets existieren.
W4Billboards/Imposter — für offene Welten/Wälder/Menschenmengen; bei aktuellen Maze-/Dungeon-/Fahrzeug-Showcases selten organische Fernwiederholung.niedrigmittelkein dringender Anwendungsfall.
W5Volles TAA (Motion-Vector-Reprojektion) — aktuell dokumentierter Trade-off ohne Reprojektion (Ghosting bei schneller Bewegung akzeptiert).niedrig (bewusster Verzicht)großExtra-Render-Target + Pro-Material-Output; Basis (HistoryBlendPassGL/GPU) existiert bereits.

Bewusst geschlossen (nicht mehr offen):

  • #4 Pro-Objekt-Lichtauswahl — obsolet: durch Clustered/Tiled Lighting (#5) ersetzt (globaler Cap 16/64).
  • #13/volumetrischer Nebel Stufe A (Noise-Aufsatz) — verworfen: kein branchenüblicher Pfad, Stufe B ist das echte Etappenziel (siehe Historie).
  • #16 Schneesturm als Fog-Parametrisierung — verworfen: Branchenlösung ist Partikel-/Overdraw-VFX (CoH2: Halb-Auflösungs-Trick), kein Volumetric-Fog; WeatherEmitter/Showcase 32 (Radioactive Ashfall) setzt das bereits um.

Fester Bestand (umgesetzt, Referenz) ​

Holen Sie Details aus dem Live-Code/ADR; Kopien hier sind Zitat-Ebene, nicht Wahrheit. Verifikationsdatum: 2026-09-27.

#TechnikStatusWo / Nachweis
1ACES-Tonemapping (statt Reinhard/Linear)✅ vorhandenToneMappingMode.DEFAULT = ACES_FILMIC, alle 3 Backends
2Normal-Offset Bias bei Schatten✅ implementiertDir & Spot, GLSL300+WGSL, Standard+PBR-Pfad; WebGL1 ohne Schatten
3Fixed-Timestep Render-Interpolation✅ implementiertPhysicsSystem.applyRenderInterpolation(), RigidBody.prev*, getestet
5Clustered/Tiled Forward+ Lighting✅ implementiertClusterCullPassGPU (Compute), WebGLClusterCullPass (CPU), ClusterGrid geteilt, Cap 64 (WebGPU)/16 (WebGL2); ADR 0007; WebGL1 ausgenommen
6PCSS (Contact-Hardening Soft Shadows) — Directional✅ implementiertu_dirShadowMapRaw-Sampler (Unit 14), Blocker-Search + Penumbra-Schätzung; Spot bewusst ausgelassen (Rechtfertigung in Historie, ADR 0006)
7CSM-Politur: Cascade-Blending + Texel-Snapping✅ implementiertalle 4 Lighting-Chunks; DirectionalLight.updateCascades()
8Vereinfachtes HBAO (kein echtes GTAO → W2)🟡 implementiert (vereinfacht)AOPassGL/GPU, HbaoElement (default aus); Einordnung: elliptische Nähe zu HBAO, kein GTAO
9Vereinfachtes TAA (Halton-Jitter + History-Blend) + MotionTrailElement✅ implementiertHistoryBlendPassGL/GPU (aus TAAPass* umbenannt), TaaElement; Trade-off dokumentiert
10GPU-Instancing nutzen✅ bestätigtInstancedMesh existiert; Disc Wars / Neon Labyrinth (beide entfernt) nutzten es korrekt
11Game Feel: Camera-Shake, Hit-Stop, Squash&Stretch✅ implementiertShakeEffect (Trauma²+Simplex), triggerHitStop, SquashStretchBehavior; getestet
14Hierarchical-Z Occlusion Culling✅ implementiertHzbOcclusionPassGPU (WebGPU-only, opt-in via EngineOptions.enableOcclusionCulling), ADR 0008 — Status im Original-Dokument war veraltet
16Schneesturm/Wetter (als Ashfall)✅ implementiertWeatherEmitter-Extension, Showcase 32 „Radioactive Ashfall"

Referenz-Anhang (zitierte Abwägungsgründe, Stand 2026-08) ​

Diese Ausschnitte bleiben erhalten, weil externe Dokumente darauf verweisen: docs/guides/shadows.md (PCSS-Umfang), docs/guides/configuration.md (HBAO-Einordnung), REFERENCES.md (TAA-Trade-off).

6. PCSS-Umfang (zitiert von docs/guides/shadows.md) ​

PCSS für directionales Licht umgesetzt als Drop-in-Upgrade auf PCSS-Infrastruktur: 8-Tap-Blocker-Search (fester Ring ±2 Texel, nicht-vergleichender Tiefenread u_dirShadowMapRaw), Penumbra-Schätzung aus occluderDepthDelta / bias, variable 3×3-PCF-Schleife mit texelSize * pcfRadius. Nur primäre Kaskade erhält PCSS; das Kaskaden-Blend-Sample bleibt festes PCF (Kosten). Spotlicht-PCSS bewusst nicht umgesetzt: 4 zusätzliche Raw-Sampler/Texture-Units bei WebGL2 für einen Lichttyp, der in aktuellen Showcases seltener/kleinräumiger Schatten wirft — schlechtes Aufwand-Gewinn-Verhältnis.

WebGL1-Schatten bewusst ausgelassen: dort existiert gar keine Shadow-Map-Implementierung (kein CSM/PCF); Minimalvariante (eine Dir-Shadow-Map, WEBGL_depth_texture, 4-Tap statt Hardware-PCF, fester Bias) wäre machbar, aber WebGL1 ist ohnehin der LOW-Tier-Fallback (DeviceCaps reduziert dort Schattenauflösung) — Schatten lieber wegnehmen als hinzufügen. (PAF-Verifikation: Bestand-Abschnitt #6.)

8. HBAO-Einordnung (zitiert von docs/guides/configuration.md) ​

Ein Full-Resolution-Screen-Space-Pass: View-Space-Position aus Opaque-Depth rekonstruiert (über Perspektiv-Matrix-Diagonalterme, keine volle Inverse), Normale über Screen-Space-Ableitungen der Position (dFdx/dFdy bzw. manuelle Differenzen in WGSL), pro 6 fester Richtungen 4 Marschschritte mit Max-Dot-Produkt. Näher an HBAO als an SSAO: dot(Richtung, Normale) = Sinus des Horizont- Elevationswinkels → strukturell Horizont-Suche, aber nur ein Max-Sample statt kontinuierlichem Tracking und ohne Tangentenwinkel-Subtraktion. Was GTAO ausmacht, fehlt (siehe W2). Bekanntes Artefakt: Ableitungs-Normalen entarten an Silhouetten-Kanten → übertriebene Randverdunkelung. Läuft nur, wenn der Opaque-Depth-Capture aktiv ist (Bug fix: Capture lief vorher nur bei Transparenz in der Szene; jetzt auch bei aktivem HBAO). Default aus.

9. TAA-Trade-off (zitiert von REFERENCES.md, Accumulation-Buffer-Eintrag) ​

Vereinfachtes TAA: Halton(2,3)-Jitter (16 Samples, zyklisch) direkt in Camera.updateViewMatrix()- _viewProjMatrix, exponentielles History-Blend mit feedback = 0.9, Ping-Pong (HistoryBlendPassGL/GPU, umbenannt aus TAAPass*). Keine Motion-Vektoren/Reprojektion → akzeptiertes Ghosting bei schneller Bewegung; glättet Kanten in statischen/slow-Szenen. MotionTrailElement nutzt dieselbe History-Blend-Infrastruktur (höherer Feedback, kein Jitter) als bewusster Stil-Effekt. Volles TAA = W5.

13. Volumetric-Fog-Stufenmodell (Hintergrund für W1) ​

  • Stufe 0 (aktueller Bestand): analytischer Distanz-/Höhen-Fog (Fog), reiner Post-Lighting- Farbverschnitt, kein Scattering/Noise/Zeit — entspricht Unreal Height Fog ohne Inscattering.
  • Stufe A (verworfen): Noise-Multiplikation auf fogFactor — keine der geprüften Engines baut das als eigene Stufe; nur ein Abzweig, kein Etappenziel.
  • Stufe B (W1): Froxel + Raymarching + Phasenfunktion. Frostbite (Hillaire) etabliert die Reihenfolge „erst Pro-Zelle-Lichtlisten (== #5), dann Nebel als Konsument". Unity HDRP: Local Volumetric Fog ohne volumetrische Schatten; Godot: nur Forward+; Unreal/Godot/Frostbite: mit Selbstabschattung.

Quellen (vollständige Liste der Recherche) ​

Veröffentlicht unter der MIT-Lizenz.