Welche modernen Echtzeit-Rendering-Anwendungen verwenden noch Fragment-Shader-Tiefenschreibvorgänge / Late-Z?


7

Es ist ziemlich bekannt, dass die Schreibtiefe in Ihrem Fragment-Shader im Allgemeinen "frühe Z" -Test- / Schreiboptimierungen deaktiviert, auf die moderne GPUs für die Schnelligkeit angewiesen sind. APIs erlauben dies jedoch weiterhin und GPUs bieten weiterhin Unterstützung für die korrekte Sichtbarkeit, wenn Shader eine beliebige Tiefe schreiben.

Die Frage ist: Gibt es in den heutigen Spiel-Engines Echtzeit-Effekte auf dem neuesten Stand der Technik, bei denen Z in den Fragment-Shader geschrieben werden muss?

Antworten:


10

Alle Techniken, die Raytracing im Fragment-Shader beinhalten, möchten möglicherweise Z schreiben, damit der Tiefenpuffer eine genaue Darstellung der Raytraced-Oberfläche enthält. Zum Beispiel:

  • Distanzfeldstrahlmarsch , wie in vielen Shadertoys und Demoszenenproduktionen zu sehen. Hier wird nur ein Quad im Vollbildmodus gerastert, und die gesamte Geometrie wird vom Fragment-Shader generiert. Das Schreiben von Z ist erforderlich, wenn Sie den Tiefenpuffer für verzögerte Beleuchtung oder Nachwirkungen verwenden oder Entfernungsfelder mit gewöhnlicher Dreiecksgeometrie zusammensetzen und eine korrekte Okklusion erzielen möchten.
  • Voxelstrahl marschieren, ähnlich wie oben. Selbst wenn die Voxel durchscheinend sind (wie in einer Rauchwolke oder dergleichen), kann es nützlich sein, Z zu schreiben, wenn die Voxeldichte hoch genug ist, um undurchsichtig zu werden; Dies kann beispielsweise für spätere Berechnungen von Bewegungsunschärfe / Schärfentiefe nützlich sein.
  • Parallaxen-Okklusions-Mapping- Techniken, bei denen eine flache Oberfläche durch Strahlenmarschieren gegen ein Höhenfeld das Aussehen von Tiefe erhält.

Es gibt wahrscheinlich andere ähnliche Fälle, in denen die Form einer Oberfläche eher durch den Fragment-Shader als durch die gerasterten Dreiecke definiert wird.

Übrigens unterstützen neuere APIs und GPUs einen konservativen Tiefenausgabemodus , in dem das vom Shader geschriebene Z nur größer als das geometrische Z sein darf, nicht jedoch kleiner. Auf diese Weise können Early-Z / Hierarchical-Z-Optimierungen weiterhin basierend auf dem geometrischen Z ausgeführt werden: Wenn die gerasterte Geometrie für etwas ausgewählt wird, wissen Sie, dass das vom Shader geschriebene Z ebenfalls ausgewählt wurde. Dies ist eine gute Lösung für Fälle wie die oben genannten, da Sie eine Begrenzungsgeometrie für das Objekt Distanzfeld / Voxel / Höhenfeld rastern können. dann ist die tatsächliche Tiefe größer als die der Begrenzungsgeometrie.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.