Beheben, dass 3DGS vom Single-Layer-Water-Material verdeckt wird
Unterstützung von Single Layer Water
Überblick
Single Layer Water von Unreal Engine setzt Refraktion, Kaustiken und Unterwassernebel über den Depth Buffer um. Die zentrale Abhängigkeit ist die Szenentiefe: Nur Pixel, die gültige Tiefe geschrieben haben, können an der Berechnung von Refraktion und Absorption der Wasseroberfläche teilnehmen.
Warum eine eigene Kompatibilität nötig ist
Das Plugin rendert 3DGS und schreibt Tiefe über den View Extension-Mechanismus, was nach dem BasePass passiert. Im Standardablauf kopiert Single Layer Water den Depth Buffer vor dem BasePass für das späteres Compositing, und zu diesem Zeitpunkt ist das 3DGS noch nicht gerendert, die Kopie enthält seine Tiefe also naturgemäß nicht.
| Konfiguration | Wann der Depth Buffer kopiert wird | Enthält die Kopie 3DGS |
|---|---|---|
| Standard (deaktiviert) | Vor dem BasePass | Nein |
SingleLayerWater Support aktiviert | Nach dem BasePass | Ja |
Standardablauf Mit aktivierter Unterstützung
Depth Buffer kopieren ← ohne 3DGS BasePass
│ │
▼ ▼
BasePass 3DGS schreibt Tiefe
│ │
▼ ▼
3DGS schreibt Tiefe Depth Buffer kopieren ← mit 3DGS
│ │
▼ ▼
Wasser-Compositing ← 3DGS fehlt Wasser-Compositing ← 3DGS korrekt gelesen
Enthält die Kopie keine 3DGS-Tiefe, liest die Wasseroberfläche bei der Berechnung von Refraktion und Absorption die Szene hinter dem 3DGS, das Unterwasser-3DGS nimmt also nicht an der Refraktion teil und das Occlusion-Verhältnis zwischen Wasseroberfläche und 3DGS wird falsch bewertet.
Bei aktiviertem SingleLayerWater Support nutzt das Plugin r.Water.SingleLayer.DepthPrepass, um die Kopie bis nach den BasePass zu verzögern, wenn die 3DGS-Tiefe bereits geschrieben ist, sodass die Wasseroberfläche sie korrekt verarbeiten kann.
Das Ergebnis ohne aktiviertes SingleLayerWater Support:

Rendering-Ergebnis ohne aktivierte Unterstützung von Single Layer Water
Kosten
- Nach der Aktivierung zeigen Schatten von Modellen etwas Aliasing.

Aliasing in Schatten, das nach Aktivierung der Unterstützung von Single Layer Water auftreten kann
Schritte
1. Die Einstellung aktivieren
Im LCC4Unreal-Panel des Editors auf die Einstellungsschaltfläche klicken, um die Plugin-Einstellungsseite in den Projekteinstellungen zu öffnen, SingleLayerWater Support anhaken und die Engine neu starten, damit es wirksam wird.

SingleLayerWater Support in den Projekteinstellungen aktivieren
2. Ein Single-Layer-Water-Material erstellen
- Ein neues Material erstellen und
Shading ModelaufSingle Layer Watersetzen - Wasserfarbe, Absorptionskoeffizient, Streuung und weitere Parameter konfigurieren
- Es auf ein Mesh der Wasseroberfläche oder auf
WaterBodyCustomanwenden
3. Die Wasseroberfläche platzieren
Den Wasser-Actor an einer geeigneten Position in der LCC2-Szene platzieren. Die Wasserhöhe bestimmt, welche 3DGS-Pixel unter Wasser liegen.
4. Das Ergebnis prüfen
Sobald die LCC2-Szene normal lädt und rendert:

Korrektes Rendering-Ergebnis nach Aktivierung der Unterstützung von Single Layer Water
Hinweise
- Diese Einstellung ist global und betrifft jedes Single-Layer-Water-Material im Projekt
- Nach einer Änderung muss die Engine neu gestartet werden (der CVar ist ReadOnly und beeinflusst den Shader-Key)
- Der Preis ist, dass Wasserpixel etwas Schattenqualität der Virtual Shadow Map verlieren
- In Projekten, die Single Layer Water nicht verwenden, standardmäßig deaktiviert lassen