Occlusion Culling

Das Thema Occlusion Culling kam schon in mehreren Ausgaben des Unknown Worlds Weekly vor, doch eine richtige Erklärung zum Thema gab es eigentlich nie.  Netter Weise hat Max im Entwickler Blog von UWE einen schönen Beitrag zu Occlusion Culling veröffentlicht.

Eine der wichtigsten Aufgabe der Grafikengine eines First Person Shooters ist Occlusion Cullung. Occlusion Cullung ist der Prozess Elemente der Spielwelt zur Seite zu legen, die nichts zu der Szene beisteuern, die der Spiele sieht. So wird keine CPU und GPU Zeit für die Berechnung unnötiger Elemente verschwendet. Dies wird besonders wichtig, wenn es um hardwarehungrige Komponenten wie dynamisches Licht und Schatten geht. Hier ist ein Natural Selection 1 Level, gerendert in der neuen Engine:

Ein Korridor ohne Texturen.

Auch ohne Texturen werden einige von euch diese Stelle sicher wiedererkennen. Auch wenn es wie ein einfacher Korridor aussieht, ist es für die Rendering-Engine ein sehr kompliziertes Gebilde. So sieht die gleiche Szene aus wenn man sie im Wireframe Modus rendert:

Ein Wireframe Rendering.

Wie ihr seht gibt es viele Teile, die gerendert werden obwohl sie hinter den Wänden verborgen sind und man sie nicht sehen kann. In vielen Egoshootern wird diesem Problem gelöst, indem man vorher für die ganze Map berechnet welche Entitäten von welcher Position aus  sichtbar sind. Man spricht dann von einem Potentially Visible Set (PVS), zu Deutsch auch als Sichtbarkeitsproblem bekannt.

Falls ihr schon mal für eine die Quake oder Half-Line Engine gemappt habt, seid ihr vermutlich mit dem Vvis Tool vertraut, welches diese Vorberechnung übernimmt. Dies kann ein sehr langwieriger Prozess sein, der viele Änderungen und wohlüberlegtes Modellieren erfordert. Außerdem darf sich die Umgebung wegen der vorberechneten Daten zur Laufzeit nicht mehr ändern. Darüber stößt die PVS Technologie bei Outdoor Szenen schnell an ihre Grenzen. Um alle diese Probleme zu umgehen hat man sich bei Unknown Worlds Entertainment dafür entschlossen ein hardwaregestütztes Occlusion Culling einzusetzen, das keinerlei Vorberechnungen über die Sichtbarkeiten benötigt.

So sieht die Szene aus, wenn das Occlusion Culling System aktiviert ist:

Ein Wireframe Rendering mit Occlusion Culling.

Wie erwartet wurde ein Großteil der unsichtbaren Geometrie während des Rendering Prozesses verworfen. Durch die Art und Weise wie der Algorithmus die Grafikkarte benutzt, hat die Struktur der Karte keine großen Auswirkungen auf das System. Es kann mit Indoor- wie Outdoor-Umgebungen gleichermasen umgehen und verkraftet sogar Polygonsuppen (Anhäufungen von Polygonen ohne irgendeine Struktur).

Auch wenn Real-Time Occlusion Culling einiges mehr an Hardware erfordert als vorberechnete Systeme wie PVS ist man bei UWE davon überzeugt, dass die Vorteile es wert sind. Und mit einer cleveren Optimierung kann der Hardwareverbrauch noch wesentlich reduziert werden.

Und wer es ganz technisch mag, dem sei gesagt dass für die Natural Selection 2 Grafik Engine eine Implementierung des CHC++ Algorithmus verwendet wird.

6 Gedanken zu “Occlusion Culling

  1. Pingback: UWW #20 Squad Spawning

  2. hehe, ja das nervte, immer diese areaportale und dann dieses ewige compilieren wenn man dann doch viele brushes hatte die nicht zu func_detais gemacht wurden.
    Wie heißt das System was in Crysis genutzt wird?
    Ist das nicht auch occlusion-culling?
    Das heißt, schon hinter einer kleinen mauer, wird alles dahinter nicht berechnet, leider finde ich das video nicht mehr.

  3. Im Kommentarthread zu dem Blogeintrag hat Charlie auch noch geschrieben, dass die Maps gar nicht mehr kompiliert werden müssen. Schön für Mapper.

Hinterlasse eine Antwort

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind markiert *

Du kannst folgende HTML-Tags benutzen: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong>