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).
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.
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-3Der verwendete Tiefenpuffer wird viermal mehrfach abgetastet. Wahrscheinlich, um die niedrige Auflösung auszugleichen.
Es sieht aus wie Begrenzungsrahmen, die in Bezug auf den Blick ausgerichtet sind.
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.
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
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.
Beispiele für kubische Karten aus der Szene.Die diffuse Komponente der globalen Beleuchtung.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.
Diffus + SSS. SSS-Effekte sind in diesem Frame nicht sichtbar.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.Das Ergebnis dieser Passage.TAA mit vorherigem HDR-Bild
TTA ist einfach magisch.Bewegungsunschärfe
Basierend auf der Geschwindigkeitskarte wird eine Hilfsunschärfekarte berechnet.Nachbearbeitung
Dieser Durchgang vergrößert zuerst das Bild.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
Ich musste sorgfältig nach einem geeigneten Rahmen suchen, um die Auswirkungen von SSS zu zeigen.Wie ein Monster mit Tentakeln gerendert wird
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
Geometrie hat eine gute Topologie.HBAO
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