Warum verwenden manche Spiele Dithering-Muster anstelle von herkömmlichem Alpha für Transparenz?

24

Vor kurzem habe ich einige 3D-Spiele gesehen (zB :) , GTA IVin denen eine Art geordnetes Dithering verwendet wurde , um Transparenz / Alpha zu simulieren.

Die Polygone sind nicht wie gewohnt transparent, sondern rendern eine Dithering-Textur, die schrittweise von links nach rechts wechselt, um die Transparenz zu simulieren:

Bildbeschreibung hier eingeben

Der Effekt ist nicht unangenehm, sondern auf den ersten Blick überraschend (im Vergleich zum traditionellen Alpha-Blending).

Gibt es einen Grund, warum manche Spiele außer dem visuellen ästhetischen Effekt, den sie erzeugen, dies tun (bessere Leistung, Einsparung von Bandbreite oder sonst etwas, woran ich nicht denke)?

Ich habe im Internet gesucht, aber nichts über diese Technik gefunden.

tigrou
quelle
Wahrscheinlich kam es nur mit dem Pixel-Art-Stil.
MichaelHouse
@ Byte56 Pixelkunststil? GTA IV? Huh?
Nathan Reed
@ NathanReed Heh, nicht in GTA IV. OP erwähnt, dass es kürzlich in Spielen zu sehen war.
MichaelHouse
1
Ich finde die Technik angenehmer als Alpha-Blending, wenn 3D-Objekte ausgeblendet werden, die sich zu nah an der nahen Ebene befinden.
Andreas

Antworten:

27

Dies ist ein weit verbreiteter Ansatz zur Transparenz in Spielen, die verzögertes Shading verwenden. Bei verzögerter Schattierung funktioniert die ordnungsgemäße Transparenz überhaupt nicht, da nur die Daten einer Oberfläche (Tiefe, normaler Vektor, Farbe usw.) auf jedem Pixel gespeichert werden können. Bei der ordnungsgemäßen Transparenz überlappen sich mehrere Oberflächen auf einem Pixel, die jeweils voneinander unabhängig sein müssen Beleuchtung.

Es gibt einige Möglichkeiten, wie Game Engines damit umgehen können:

  • Verwenden Sie Vorwärtsschattierung (möglicherweise mit einem reduzierten Beleuchtungsmodell) für transparente Oberflächen und verzögerte Schattierung für die undurchsichtigen Oberflächen. Die transparenten Flächen müssen in einem separaten Durchgang von hinten nach vorne sortiert werden.
  • Verwenden Sie Dithering, besser bekannt als Stipping oder Screen-Door-Transparenz, das mit verzögerter Schattierung funktioniert, da es nur eine Oberfläche pro Pixel ergibt. Dies funktioniert besonders gut bei LOD-Übergängen, da diese in der Regel in einer festgelegten Zeit abgeschlossen sind und die Dauer der sichtbaren Punktierung einschränken. Das funktioniert zum Beispiel bei Glasfenstern an einem Gebäude nicht besonders gut.
  • Es ist auch möglich, das Punktieren zu verwenden, aber anschließend eine Nachbearbeitungsunschärfe anzuwenden, die die punktierten Pixel neu kombiniert, um eine Annäherung an die richtige Transparenz zu erzielen. Volition tut dies in Saints Row the Third (und vielleicht auch in einigen anderen Spielen) unter dem Namen " Inferred Lighting ". Das kann ganz gut aussehen, aber die Unschärfe nach dem Prozess ist teuer.
  • Und natürlich gibt es alle auftragsunabhängigen Transparenzmethoden , obwohl ich kein Spiel kenne, das sie verwendet. Sie sind bisher nur für Tech-Demos gedacht.

Man kann auch eine Kombination dieser Ansätze verwenden, z. B. Vorwärtsbeschattung für Glasfenster und Punktierung für LOD-Übergänge.

Es ist auch erwähnenswert, dass einige Spiele das Punktieren für weiche Schatten verwenden. Dies ist ein Performance-Kompromiss. Für schönere Schatten sind mehr Textur-Samples im Pixel-Shader erforderlich, was länger dauert. Sie erhalten jedoch ein ansprechendes Ergebnis, wenn Sie weniger Samples verwenden und ihre Positionen zufällig verschieben. Der zufällige Versatz erzeugt den Punktierungseffekt.

Nathan Reed
quelle
Ich wusste nichts über die Technik der verzögerten Schattierung (hier erklärt: en.wikipedia.org/wiki/Deferred_shading ). Sie sprechen auch über mögliche Alpha-Probleme. Mach jetzt Sinn. Danke für die Antwort
tigrou
0

Es ist ein einfacher Performance-Kompromiss. Das Alpha-Mischen erfordert das Lesen des aktuellen Farbpuffers, wohingegen diese Art des Dithering nur zum Schreiben (oder natürlich nur zum Verwerfen) vorgesehen ist.

Es ist möglich, diese Technik mit Multisampling zu mischen, das dann als Alpha-to-Coverage bezeichnet wird .

sam hocevar
quelle
Über welche Art von "Performance-Kompromiss" sprechen Sie? Early-Z wird deaktiviert, wenn Sie in Ihrem Shader einen Abwurf verwenden. Das Mischen erfolgt auf der Hardware und ist schnell.
Tara
Eigentlich habe ich es gerade in meinem Motor in einer geeigneten Szene mit einer hohen Auflösung getestet: Das Aktivieren oder Deaktivieren der Überblendung für ALLE Geometrie führte zu keinerlei Leistungsunterschieden. Die Antwort von Nathan Reed ist richtig, da Dithering normalerweise für verzögertes Rendern verwendet wird.
Tara