Sonntag, 5. Juli 2020

SCS - Under The Hood - Erklärt SSAO

Under The Hood - Erklärt SSAO

Sonntag, 5. Juli 2020


Heute möchten wir eine grafische Funktion erklären, die wir mit Update 1.38 neu in unsere Spiele einführen. Der Artikel ist sehr technisch - wir haben unsere Programmierer um Hilfe gebeten, dennoch ist die Erklärung recht komplex. Wir waren jedoch der Meinung, dass es zumindest für einige unserer Leser interessant sein könnte, diesem Material ausgesetzt zu sein - um zu sehen, dass das, was unter der Haube einer Spiel-Engine geschieht, viel Forschung und harte Arbeit von unserem Programmierteam erfordert. Zusätzlich zu den technischen Details hielten wir es für die meisten Spieler für nützlich und wichtig, den Kontext bereitzustellen und die Leistungskompromisse zu erläutern.

Jaroslav a.k.a.Cim

(einer unserer mutigen und erfahrenen Programmierer, die an Grafikverbesserungen arbeiten)

Die TLDR-Zusammenfassung des folgenden Textes besagt, dass Screen Space Ambient Occlusion eine coole neue, aber leistungsintensive Technik ist, um das Rendering unserer Spielwelt zu bereichern. Sie müssen es nicht verwenden, wenn Sie der Meinung sind, dass es die Leistung für Ihren Geschmack zu stark beeinträchtigt, oder wenn Sie es mögen und es sich leisten können, ein paar Bilder pro Sekunde gegen eine verbesserte Schatten- und Tiefenwahrnehmung einzutauschen. Der Effekt mag subtil sein, er funktioniert meistens auf der Ebene des Unterbewusstseins, aber wenn Sie sich erst einmal daran gewöhnt haben, könnte es schwer fallen, zurück zu gehen. Dies ist ein weiterer Meilenstein in unserem Plan zur Verbesserung der Beleuchtung / Beschattung, den wir jetzt ausführen, gefolgt von einer neuen HDR-Lichtverarbeitung und der Einführung von normal zugeordneten Oberflächen in den kommenden Updates.

Die Technik hat ihre Grenzen und Macken. Es wurde in den letzten Jahren von mehreren AAA-Spielen verwendet, und selbst wenn es nicht perfekt ist, hilft es dem menschlichen Wahrnehmungssystem, die Szenerie besser zu verstehen, und wir hoffen, dass es von Vorteil ist, es dem Technologiemix unserer Truck-Sims hinzuzufügen. Wir werden zweifellos zusätzliche Methoden zur Schattenberechnung einführen wollen, die diese verbessern oder sogar ersetzen.

SSAO verwendet

SSAO nicht aktiviert

Wir stehen unter ständigem Druck, das Aussehen unseres Spiels durch eine stimmliche Untergruppe unserer Fangemeinde zu verbessern. Gleichzeitig besteht immer der Wunsch, die Spiele schneller laufen lassen zu können. Zusätzlich zu diesen manchmal konkurrierenden Anfragen aus der Spielerbasis ist unsere eigene Kunstabteilung stets bemüht, neue grafische Spielzeuge zu beschaffen, um unser Spiel reicher und besser zu machen. Immer wenn wir eine neue grafische Funktion in das Spiel einführen, versuchen wir dies so zu tun, dass die Leistung von älteren Computern einiger Spieler nicht zu sehr beeinträchtigt wird. Wir möchten das Spiel nicht für unsere bestehenden Kunden inkompatibel machen. Aus diesem Grund gibt es eine Option zum vollständigen Ausschalten von SSAO und verschiedene Einstellungen für die Qualität / Leistung.

SSAO nicht aktiviert
SSAO verwendet

Die Arbeit unserer Programmierer an den neuen SSAO / HBAO-Techniken erforderte auch Änderungen an unserer Kunst- und Kunstschöpfungspipeline. Alle 3D-Modelle in unseren Spielen mussten von der Kunstabteilung überarbeitet werden, und in den Fällen, in denen ein Künstler bereits falsche Schatten und Verdunkelungen auf ein Modell angewendet hatte, wurden diese geändert. Bei einigen komplexeren Spielmodellen war dies eine Vereinfachung, die die Anzahl der darin enthaltenen Dreiecke so weit reduzierte, dass die Renderleistung sogar verbessert wurde. Bis zu einem gewissen Grad haben wir einen Teil des vorläufigen zukünftigen manuellen Aufwands, der für die Erstellung einzelner gut aussehender 3D-Modelle erforderlich wäre, gegen einen algorithmischen Rendering-Durchgang eingetauscht, der das Schattenbild für die gesamte Szene vereinheitlicht und dabei hilft, Objekte wie Gebäude zu "verwurzeln". Laternenpfähle und Vegetation zum Gelände anpassten.









Wofür SSAO steht und wie es funktioniert

Bevor wir beginnen - beachten Sie, dass SSAO eine allgemeine Abkürzung für "Screen Space Ambient Occlusion" ist. Der Name umfasst alle verschiedenen AO-Techniken (Ambient Occlusion) und ihre Varianten, die im Bildschirmbereich funktionieren (dies bedeutet, dass sie zur Laufzeit alle Informationen aus den Daten abrufen, die auf dem Computerbildschirm gerendert werden, und in dem zugehörige Speicherpuffer). Es gibt SSAO (Crytech 2007 Tech, die im Grunde allen Techniken einen allgemeinen Namen gegeben hat), MSSAO, HBAO, HDAO, GTAO und viele weitere Techniken, die jeweils unterschiedlich abgestimmte Ansätze verwenden und jeweils ihre Vor- und Nachteile haben. Wir haben unseren Ansatz auf eine horizontbasierte Technik namens GTAO gestützt, die in einem Papier von Activision aus dem Jahr 2016 eingeführt wurde.

Der Namensteil Umgebungsokklusion (AO) bedeutet, dass wir bewerten, wie viel einfallendes Licht (vorwiegend Himmelslicht, aber manchmal wird die berechnete Okklusion auch auf andere Lichter angewendet) an einem bestimmten Ort in der Spielwelt verdeckt wird. Stellen Sie sich vor, Sie stehen auf flachem Boden - Sie würden den gesamten Himmel oben sehen, also gibt es 0% Okklusion, der Boden wird vollständig vom Himmel beleuchtet. Stellen Sie sich nun vor, Sie befinden sich am Boden eines Brunnens - Sie würden nur einen kleinen Fleck Himmel sehen, das heißt, der Himmel wird fast zu 100% verdeckt und trägt nur wenig zur Umgebungsbeleuchtung in diesem Brunnen bei, und natürlich ist der Boden des Brunnens dann ziemlich dunkel. Ein bestimmtes Maß an Umgebungsokklusion an einem Ort wirkt sich auf die Beleuchtungsberechnungen aus und erzeugt Schattenbereiche in Falten, Löchern und an anderen „komplexen“ Orten. Es kann je nach Umgebung zwischen 0% und 100% liegen.





Die detaillierte und präzise Berechnung der Okklusion ist ressourcenintensiv. Grundsätzlich müssten Sie Strahlen von jeder ausgewerteten Position in alle Richtungen schießen und testen, ob sie den Himmel treffen oder nicht, und dann das Ergebnis ermitteln. Je mehr Strahlen Sie aufnehmen, desto bessere Informationen erhalten Sie, jedoch zu einem höheren Rechenaufwand. Dieser Prozess kann möglicherweise offline verarbeitet werden, beispielsweise wenn die Spielkarte von ihrem Designer gespeichert wird. Einige Spiele und Engines verwenden diesen Ansatz. Auf diese Weise können Sie jedoch nur Umgebungsokklusionsinformationen über statische, sich nicht bewegende Objekte backen (einschließen), da zu diesem Zeitpunkt keine Fahrzeuge und keine animierten Objekte vorhanden sind.

Anstatt statische Informationen zu backen (was angesichts des Maßstabs unserer Weltkarte auch viel Zeit und Speicherplatz in Anspruch nehmen würde), möchten wir sie zur Laufzeit im laufenden Betrieb berechnen. Auf diese Weise können wir es auch für die Interaktion mit Fahrzeugen, das Öffnen von Brücken, animierten Objekten usw. berechnen. Es gibt dabei jedoch einen Haken. Für einen solchen Berechnungsansatz haben wir nur Daten, die auf dem Bildschirm sichtbar sind (erinnern Sie sich an "Bildschirmbereich"). Sobald ein Teil der Spielwelt aus dem sichtbaren Rahmen herauskommt, können sie nicht mehr für die Okklusionsbewertung verwendet werden. Diese Einschränkung führt zu verschiedenen Artefakten, z. B. zum Verschwinden der Okklusion an einer Wand, die ursprünglich durch ein Objekt verursacht wurde, das sich gerade hinter dem Bildschirmrand befand und somit nicht nur für Sie, sondern auch für den Algorithmus unsichtbar wurde, sodass es nicht mehr zur Okklusionsberechnung beitrug.





Ok, jetzt wissen wir, was zu bewerten wird (Umgebungsokklusion) und wir wissen, welche Daten wir haben (was wir auf dem Bildschirm sehen). Was machen wir? Nun, für jedes Pixel auf dem Bildschirm (das sind 2 Millionen Pixel in HD-Auflösung, mal vier (!) In 400% Skalierung!) Muss unser Shader-Code den Z-Puffer-Wert der umgebenden Pixel abfragen, um eine Vorstellung von der geometrische Form der Umgebung zu bekommen. Wir können nur eine begrenzte Anzahl dieser "Abgriffe" ausführen, da die Leistungskosten mit zunehmender Anzahl der Abgriffe stark ansteigen. Dies ist eine Operation, die den 3D-Beschleuniger wirklich belastet. Die Begrenzung der Anzahl der Abgriffe wirkt sich wiederum auf die Präzision der Umgebungsokklusion aus (und kann in bestimmten Situationen zu Ungenauigkeiten und Streifenbildung führen). Stellen Sie sich vor, Sie möchten Ihre Umgebung auf einer 2-Meter-Geraden bewerten und sind bereit, 8 Taps auszugeben, um sie zu approximieren. Sie fragen die Linie alle 25 Zentimeter ab, und jedes Detail, das kleiner als dieses ist, kann völlig unbemerkt bleiben, es sei denn, Sie haben Glück und treffen es genau (oder unglücklich, weil Sie es im nächsten Bild möglicherweise verpassen, sodass sich die Umgebung plötzlich zu ändern scheint Rahmen erzeugt und Flackern verursacht). Je weiter Ihr Algorithmus prüft, desto ungenauer wird er. Sie müssen also die Größe eines Bereichs begrenzen, den Sie um jedes Spielpixel analysieren, was wiederum begrenzt, wie weit der AO "sieht" - deshalb ist er nicht für die Berechnung der Okklusion in großen Räumen wie unter Brückenbögen geeignet.





Wir haben erwähnt, dass die Technik unserer Wahl auf dem Horizont basiert. Dies bedeutet, dass wir die Umgebung nicht durch Aufnehmen von Strahlen in der 3D-Welt untersuchen, sondern eine Halbkugel über / um jedes Pixel analysieren, um festzustellen, wie weit sie sich öffnet, bis sie blockiert wird, und wie viel Licht von der umgebenden Geometrie eingelassen - begrenzt durch das Verwenden des Z-Puffers als Proxy. Die Halbkugel wird tatsächlich durch mehrere Läufe entlang einer Linie angenähert, die um das entsprechende Pixel gedreht wird. Wenn wir dieser Hemisphäre vollständig folgen können, gibt es keine Okklusion. Wenn der Algorithmus einen Wert im Z-Puffer abgleicht, der einfallendes Licht blockieren würde, definiert er den Grad der Okklusion. Der Algorithmus ist für die Leistung optimiert, aber seine Einschränkung besteht darin, dass er, sobald er auf etwas trifft, möglicherweise sogar auf ein kleines Objekt, nicht mehr weiter prüft. Dies kann zu einem "Überverschluss" -Problem führen und als visuelles Artefakt erkannt werden, wenn ein relativ dünnes Objekt wie ein Verkehrszeichenpfosten eine starke Okklusion an einer nahe gelegenen Wand verursacht. Sie können versuchen, solche kleinen Objekte zu erkennen und zu überspringen, was wiederum zu einer "Okklusion" auf dünnen Leisten führen kann. Wir haben uns für Ersteres entschieden.




Es gibt noch eine weitere interessante und nützliche Eigenschaft der horizontbasierter Techniken. Abhängig davon, wie viel von einer Halbkugel über einem bestimmten Pixel verdeckt ist, können Sie die Richtung berechnen, die am wenigsten verdeckt ist. Das Ausmaß der Okklusion kann als Eistüte mit variierendem Scheitelwinkel betrachtet werden, der in dieser Richtung dann ausgerichtet ist. Diese Richtung wird als "gebogene Normale" bezeichnet und wir verwenden sie für verschiedene Lichtberechnungen, beispielsweise zum Verschließen einer Reflexion auf glänzenden Oberflächen. Die Idee ist, dass wenn Sie auf die Oberfläche schauen und die spiegelreflektierte Richtung aus diesem Kegel austritt, wir sie (zumindest teilweise) als verdeckt betrachten und die Reflexionsintensität verringern. Der beste Weg, um diesen Effekt zu erkennen, besteht darin, größere und runde Chromteile wie die Dieseltanks mit ein- und ausgeschaltetem SSAO zu betrachten.

Sie sehen, die Idee ist für einen erfahrenen Grafikprogrammierer sowieso nicht so schwer ;), aber es sind viele Berechnungen erforderlich, die den 3D-Beschleuniger ziemlich belasten. Daher haben wir mehrere Leistungsprofile erstellt, die jeweils eine Mischung aus Optimierungstechniken verwenden:

Mit weniger Taps pro Richtung - es ist schneller, aber AO lässt größere Objekte übersehen als mit feinerer Abtastung.

Das Neuprojektieren von AO-Ergebnissen aus dem vorherigen Frame ermöglicht es uns, die Artefakte vor Unterabtastung zu verbergen, kann jedoch zu Geisterbildern führen, wenn die Reprojektion fehlschlägt (wenn sich das, was Sie zwischen Frames sehen, stark ändert).





Rendern in halber Auflösung - reduziert die Anzahl der Berechnungen auf 1/4, erzeugt jedoch weniger feine AO ​​- das Ergebnis kann eine leicht verschwommene Schattierung sein

Wir hoffen, dass all diese Informationen für Sie interessant und nützlich waren. Wir senden Ihnen eine virtuelle High-Five, wenn Sie diesen Artikel bis zu diesem Punkt lesen. Sie verdienen einen Keks und eine große Tasse heiße Schokolade! Wenn Sie noch weitere Informationen zu diesem Thema erhalten möchten, können Sie beispielsweise diesen Link benutzen.

Vielen Dank für Ihre Zeit und Unterstützung und wir sehen uns bei einigen der nächsten Artikel aus dem Abschnitt Under The Hood "Unter der Haube", die wir von Zeit zu Zeit für unsere #BestCommunityEver bringen.

Beitrag von Alex, SCS-Software. Übersetzung von Angelwingking

Keine Kommentare:

Kommentar veröffentlichen

Diese Seite ist eine Fanseite für Deutschsprachige, die ETS2 & ATS haben und sich gerne Informieren möchten. Wir sind nicht von SCS, aber für SCS. Happy Trucking.
Bitte immer höflich bleiben, keine Beleidigungen oder Beschimpfungen. Fragen werden beantwortet, sobald es geht. Nehmen Sie Rücksicht auf User, die sich nicht sehr gut ausdrücken können, oder noch sehr wenig Ahnung von SCS und ihren Simulations-Spielen haben. Danke.