Resident Evil 2-Frame-Rendering

Bild

Allgemeine Hinweise


Alle Ergebnisse wurden auf einer ziemlich alten Maschine (i7 3770 + GTX 770) erhalten, das Spiel lief in DirectX 11 mit mittlerer Qualität. Für die Analyse wurden RenderDoc und Nsight verwendet.

Das Spiel läuft auf der Engine Re Engine, die zum Erben des MT Framework wurde - der Engine der vorherigen Generation von Capcom R & D. Zusätzlich zu RE2 wird es in DMC5 und RE7: Biohazard verwendet.

Ich konnte im Internet keine Materialien zur RE Engine finden, daher basiert alles in dem Artikel auf Vermutungen (ich hoffe, gerechtfertigt). Ich habe ungefähr 90% der Rahmenstruktur untersucht und eine allgemeine Beschreibung der Algorithmen gegeben. Weitere Forschung erfordert mehr Erfahrung und Zeit für Reverse Engineering-Shader.

Rahmenstruktur


Partikel- / Flüssigkeitssimulation


Das Spiel generiert unter anderem Wellentexturen (ein Beispiel stammt aus einem anderen Frame).

Partikelsimulation 0

Partikelsimulation 0

Wellen werden verwendet, um Wasser zu rendern, das sich nicht im analysierten Rahmen befindet.

Einige Ergebnisse werden in den Staging-Puffer kopiert. Dies deutet darauf hin, dass die Ergebnisse in der CPU verwendet werden können.

Berechnung der Liste der Lichtquellen


Diese Passage generiert eine Liste sichtbarer Lichtquellen, in der die Position der Lichtkegel relativ zur Sichtbarkeitspyramide überprüft wird. Das Ergebnis ist eine Liste sichtbarer Lichtquellen und eine bestimmte 3D-Tabelle, in der die Positionen im Betrachtungsraum mit den entsprechenden Lichtquellen verglichen werden.

Es werden auch Listen sichtbarer Instanzen für jede Lichtquelle berechnet, die später beim Aktualisieren der Schattenkarte verwendet werden.

Weißer Punkt


Diese Passage erstellt ein Luminanzhistogramm basierend auf dem vorherigen HDR-Bild und der vorherigen Messtabelle. Basierend auf diesen Daten bestimmt er dann den Weißpunkt.

Dosiertisch

prevhdr

Definition überlappender Objekte


Der Begrenzungsrahmen der überlappenden Objekte wird auf Schnittpunkte mit der Sichtbarkeitspyramide im Computational Shader überprüft und der Puffer für indirekte Argumente wird gefüllt.

Überlappende Geometrie fallen lassen


Überlappende Objekte werden in den Tiefenpuffer mit niedriger Auflösung gerendert, und dann wird der Begrenzungsrahmen auf die Eingabe der Tiefe in diesen Puffer überprüft.


Proben 0-3

Der verwendete Tiefenpuffer wird viermal mehrfach abgetastet. Wahrscheinlich, um die niedrige Auflösung auszugleichen.

Okklusions-Keulung 0

Es sieht aus wie Begrenzungsrahmen, die in Bezug auf den Blick ausgerichtet sind.

Okklusions-Keulung 0

Ein Beispiel für einen Test überlappender Geometrie (von einem anderen Rahmen). Die Pixel, die den Test bestehen (grün), schreiben für jede Instanz ein Flag (z. B. 1) in den Sichtbarkeitspuffer.

store_raw RWDrawIndirectArguments.x, v1.x, l(1) 

Ansammlung indirekter Argumente


Fast jedes Geometrieobjekt im Weltraum wird mit einem indirekten Zeichenaufruf gerendert. Der Nsight-Profiler zeigt Aufrufe von NvAPI_D3D11_MultiDrawIndexedInstancedIndirect an. Informationen zu seiner Verwendung finden Sie in [ 1 ] und [ 2 ]. RenderDoc blockiert die MultiDraw-Erweiterung, sodass sie in EventBrowser zu vielen DrawIndexedInstancedIndirect erweitert werden und einige davon leer sind.

Das Ziel dieses Durchlaufs ist es, Sichtbarkeitsmasken aus dem vorherigen Durchgang zu sammeln und einen Argumentpuffer zu generieren.

Tiefenpassage


Nichts Außergewöhnliches. Eine Teilmenge einer Szene mit grundlegender überlappender Geometrie.

Tiefenvorab

Geometrie + Abziehbilder des G-Puffer-Durchgangs



Ausgabedaten:

  • RT0 - r11g11b10 emittierend
  • RT1 - rgba8 albedo.rgb + metallness.a
  • RT2 - r10g10b10a2 normal.rg + Rauheit.b + misc.a.
  • RT3 - r16g16b16a16aked_ao.x + Geschwindigkeit.yz + sss.a.


Gerenderte Modelle verwenden gebackene Umgebungsokklusion von hochauflösenden Modellen.

HiZ-Berechnung


Hiz gif

Ein Multi-Pass-Computing-Shader definiert jede Ebene in der Tiefenhierarchie.

Ao


SSAO- oder HBAO + -Verarbeitung abhängig von den vom Player gewählten Parametern. In meinem Fall SSAO.

AO wird basierend auf HiZ aus dem vorherigen Durchgang berechnet.


Global Specular + Diffuse


Unter Verwendung eines nicht trivialen Algorithmus werden Lichtsonden, kubische Karten und AO zu diffusen und spiegelnden globalen Karten kombiniert.

Gid

Gid

Beispiele für kubische Karten aus der Szene.

Gid

Die diffuse Komponente der globalen Beleuchtung.

Gis

Bestandteil der spiegelnden globalen Beleuchtung.

Schattenkarten-Update


Für jede Lichtquelle erstellte Schattenkarten werden für diejenigen Quellen aktualisiert, die von dynamischen Objekten betroffen sind. Jede Schattenkarte wird in einer großen Anzahl von Texturen platziert.


Lokale Spiegel + Diffus + SSS


Dann wird der Beitrag jeder Lichtquelle zu den spiegelnden und diffusen Komponenten berechnet.

Gid

Diffus + SSS. SSS-Effekte sind in diesem Frame nicht sichtbar.

Gis

Component Specular.

Beleuchtungsintegration



Spiegel- / diffuse Leuchtkraft- / lokale Beleuchtungskomponenten lassen sich in die Albedo integrieren.

Klarglas hinzufügen



Nach dem Hinzufügen aller Lichtquellen wird transparentes Glas gerendert.

Volumenbeleuchtung / Nebel / Rauchberechnung



Tatsächlich ist es nur ein Haufen Sprites.

Wenden Sie volumetrische Beleuchtung / Nebel / Rauch an



Diese Passage berechnet ein verschwommenes Bild, um die Nebelbeleuchtung zu verbessern.


Wenn Sie die ursprüngliche Nebelmaske durch ein Schachbrettmuster ersetzen.

Gis

Das Ergebnis dieser Passage.

TAA mit vorherigem HDR-Bild


Gis

TTA ist einfach magisch.

Bewegungsunschärfe


Gis

Basierend auf der Geschwindigkeitskarte wird eine Hilfsunschärfekarte berechnet.

Gis

Nachbearbeitung


Gis

Dieser Durchgang vergrößert zuerst das Bild.

Gis

Und dann werden ein Bloom-Filter, eine Tonkorrektur, eine Verzerrung und eine chromatische Aberration angewendet.

Fazit


Die Engine verwendet aktiv Computer-Shader + indirektes Rendering. Alle Maschen und Texturen sind von hoher Qualität.

Das Spiel verwendet verzögertes Rendern mit TAA / FXAA und Glas als Nachbearbeitung. Weitere Informationen zu Tricks mit verzögertem Rendern finden Sie hier [ein Beitrag, der auf einem Artikel über Habré basiert]. Viele Texturen werden von BC7 komprimiert. Im Allgemeinen ähneln die verwendeten Techniken den in [ 4 ] beschriebenen.

Boni


SSS-Beitrag


Gis

Ich musste sorgfältig nach einem geeigneten Rahmen suchen, um die Auswirkungen von SSS zu zeigen.

Wie ein Monster mit Tentakeln gerendert wird


G Virus Kerl endgültige Form

Das Monster ist in viele Teile geteilt.

Eingeweide



Das Spiel hat viele blutige Texturen für verschiedene Details.

Mip-Levels für Texturen werden nicht nur linear gefiltert. Auf jeder Ebene wird das Schärfen verbessert. Darüber hinaus weisen einige Texturen bereits Glanzlichter auf (es ist nicht sehr klar, wie sich dies auf ihr endgültiges Erscheinungsbild auswirkt).

Geometrie


G Virus Kerl endgültige Form

Geometrie hat eine gute Topologie.

HBAO


G Virus Kerl endgültige Form

HBAO bietet eine viel bessere Qualität als SSAO.

Rauch



Rauch berücksichtigt konische Lichtquellen.


Echte Flugzeuge werden verwendet, um Rauch zu erzeugen.

Referenzen


[1] Kostas Anagnostou: Experimente zum GPU-basierten Okklusions-Culling

[2] Daniel Rákos: Multi-Draw-Indirect ist da

[3] Adrian Correger Blog

[4] Alien: Isolierung

Source: https://habr.com/ru/post/de462443/


All Articles