Wie wird in modernen AAA-Spielen mit offener Umgebung und vielen statischen Inhalten (z. B. Crysis) das Ausmerzen von Okklusionen durchgeführt?

19

Zwei Ideen, an die ich denke:

1) Die Szene wird in einen unsichtbaren Puffer gerendert, wobei Modelle mit niedriger Auflösung und niedriger Polygonzahl (oder sogar nur Begrenzungsvolumina wie Würfel oder Kugeln) verwendet werden. Der Puffer wird dann überprüft, um zu wissen, was sichtbar ist oder nicht. Vor dem Rendern der Szene mit niedriger Auflösung könnte ein gewisses Kegelstumpf-Keulen angewendet werden, um bereits so viele Objekte wie möglich zu entfernen.

2) Ein Werkzeug wird auf der statischen Karte ausgeführt und führt eine komplexe (und daher langsame) Strahlverfolgung durch, um für einige 3D-Positionen auf der Karte zu wissen, was sichtbar ist und was nicht. All diese Informationen werden dann auf eine effiziente Weise gespeichert, die später zur Laufzeit vom Benutzer verwendet werden kann (z. B. ein Octree). Diese Lösung funktioniert nur für statische Maschen (z. B. Gebäude), die keine Objekte verschieben.

tigrou
quelle
3
"Wie hat das Spiel <X> das gemacht?" - Fragen sind laut FAQ explizit themenfremd . Bearbeiten Sie diese Frage möglicherweise, um zu fragen, wie Sie Okklusions-Culling durchführen können, anstatt wie es jemand anderes tut. (Wenn Sie im Hauptteil der Frage Ihre eigenen Antworten angeben, haben Sie den Eindruck, Sie würden eher nach einer Diskussion oder einer Liste als nach einer Antwort fragen. )
Trevor Powell

Antworten:

13

Jovans Antwort ist großartig, wollte aber nur hinzufügen, dass es manchmal Hardwareunterstützung gibt, um die Frage zu stellen: "Hat diese Geometrie tatsächlich Pixel gerendert?" (Ihre Idee Nr. 1) Diese werden als Okklusionsabfragen bezeichnet - dies ist ein guter GPU Gems-Artikel darüber hier

Dies ist Ihrer Idee Nr. 1 ziemlich ähnlich, außer dass Sie keinen unsichtbaren Puffer benötigen und effizienter oder einfacher sein können, als den Puffer zu überprüfen. Der verlinkte Artikel leistet einen großartigen Beitrag zur Funktionsweise von Hardware-Okklusionsabfragen.

Die Unreal Engine nutzt Hardware-Okklusionsabfragen auf Plattformen, die sie unterstützen, sowie andere Techniken wie das Ermitteln von Ansichtsstumpf und die Vorausberechnung der verborgenen statischen Geometrie.

Bryan Phelps
quelle
Hardware-Okklusionsabfragen sind heutzutage etwas häufiger als "manchmal" - mit der möglichen Ausnahme einiger mobiler GPUs können sie als allgegenwärtig angesehen werden.
Maximus Minimus
Sind sie nicht sehr langsam?
Quonux
12

1) Die Szene wird in einen unsichtbaren Puffer gerendert, wobei Modelle mit niedriger Auflösung und niedriger Polygonzahl verwendet werden (oder sogar nur Begrenzungsvolumina wie Würfel oder Kugeln verwendet werden). Der Puffer wird dann überprüft, um zu wissen, was sichtbar ist oder nicht. Vor dem Rendern der Szene mit niedriger Auflösung könnte ein gewisses Kegelstumpf-Keulen angewendet werden, um bereits so viele Objekte wie möglich zu entfernen.

Diese Technik wird von Killzone verwendet und in der Präsentation " Practical Occlusion Culling" auf PS3 detailliert beschrieben . Sie nutzen auch Portale für den Innenbereich.

Bei großen Karten im Freien ist zu beachten, dass die Vereinfachung des Netzes genauso wichtig ist wie die Okklusionsauslese. Daher wird häufig eine Variation von Höhenfeldern mit Geometrie-Clipmapping verwendet. Hier ist ein gutes Papier , das auch das Keulen abdeckt. GPU Gems 2 hat eine Implementierung davon .

Jovan
quelle
5

Mindestens die ersten beiden Quake-Spiele verwendeten Strategie 2; Ich weiß nicht, ob idTech-Motoren es noch verwenden. Die erreichbare Welt ist in konvexe Räume unterteilt, die in einer Baumdatenstruktur ("binäre Raumpartition") organisiert sind, und für jeden Knoten im Baum gibt es einen Bitvektor, der darstellt, welche anderen Knoten von diesem Knoten aus sichtbar sind ("potenziell sichtbare Menge").

Russell Borogove
quelle
1
Wenn Sie bringen in Quake gehen, könnten Sie bringen auch in Thief Rendering - tech;) - nothings.org/gamedev/thief_rendering.html
Jovan