Räumliche Datenstrukturen - Institut für Visualisierung und

Werbung
Räumliche Datenstrukturen
Seminar Computerspiele
Ralf Pramberger
Kurzbeschreibung—Diese Ausarbeitung stellt eine Einführung zum Thema Räumliche Datenstrukturen dar. Dazu werden zunächst
einige Grundlagen der Computergrafik erklärt, sowie eine Übersicht über die Möglichkeiten von Culling. Des Weiteren werden BSPTrees, Reguläre Gitter, Quadtrees sowie die Bounding Volume Hierarchie eingeführt. Im letzten Kapitel wird das schwierige Problem
„Occlusion Culling“ und mögliche Implementierungen zur effizienten Lösung betrachtet.
1
E INLEITUNG
Beim Sichtbarkeitsproblem in der Computergrafik handelt es sich um
die Frage welche Objekte auf dem Ausgabegerät sichtbar sind. Während es in den Anfängen der Computergrafik noch um die korrekte
Berechnung der Sichtbarkeit ging, steht heute die Performance des
Echtzeitrenderns im Fokus. Hierzu zählen die Forderung nach mehr
frames per second (FPS), höhere Bildqualität im Sinne von Auflösung
oder Abtastrate, detailliertere Texturen und präzisere Beleuchtung sowie die Möglichkeit, Szenen mit großen Mengen von Objekten anzuzeigen. Um diese, zum Teil konkurrierenden, Ziele zu erreichen gibt es
diverse Optimierungsstrategien. Eine grundsätzliche Technik ist hierbei das Culling. Diese Gruppe von Algorithmen steht für frühzeitiges
Entfernen von nicht sichtbaren oder irrelevanten Objekten aus der Grafikpipeline. Um einen Performancegewinn zu erzielen muss die Bestimmung dieser Objekte effizient zur Laufzeit geschehen. Dies lässt
sich mit räumlichen Datenstrukturen bewerkstelligen. Dabei werden
die Objekte der vorliegenden Szene, häufig im Preprocess, anhand ihrer räumlichen Anordnung in eine hierarchische Baumstruktur sortiert.
Durch eine geschickte hierarchische Aufteilung lassen sich zur Laufzeit deutliche Performancegewinne beim Culling oder Verdeckungsberechnung erreichen. Weitere Anwendungsgebiete von räumlichen
Datenstrukturen finden sich bei Nachbarschaftssuche in der digitalen
Bildbearbeitung oder dem geometrischen Schnittproblem der Kollisionserkennung, wie zum Beispiel bei Crashtests.
2
G RUNDLAGEN
In diesem Kapitel werden einige Begrifflichkeiten der Computergrafik erklärt, sowie der Frage nachgegangen wie ein Bild am Monitor
Institut für Visualisierung und Interaktive Systeme, Universität
Stuttgart. Wintersemester 2012/2013.
entsteht.
2.1 Szene
Unter einer Szene versteht man in der Computergrafik eine virtuelle
Beschreibung des anzuzeigenden Modells. Dies beinhaltet alle Objekte mit den jeweiligen Positionen, eine Kameraposition mit Blickrichtung, Lichtquellen und Materialeigenschaften der Objekte. Aus dieser
Beschreibung kann das anzuzeigende Bild berechnet (gerendert) werden. Für das korrekte und „schöne“ berechnen von Bildern gilt es das
Sichtbarkeitsproblem zu lösen, also die Fragestellung welche Objekte
sichtbar sind. Des Weiteren ist es notwendig die Oberflächen von Objekten korrekt darzustellen. Dies geschieht mit sogenannten Shading
Algorithmen. Ein weiterer Punkt betrifft die Beleuchtung der Szene.
Sabei wird mit nicht notwendigerweise korrekten physikalischen Beleuchtungsquellen Licht und Schatten simuliert.
2.2 Computergrafik
Das Bild auf einem Monitor ist in Pixel aufgeteilt, wobei jeder Pixel einem Punkt auf dem Monitor entspricht. Um ein Bild anzuzeigen, wird
ein spezieller Speicher der Grafikkarte, der sogenannte Frontbuffer,
mit einem Farbwert für jedes vorhandene Pixel gefüllt. Für die flickerfreie Darstellung von Bildern werden auf aktuellen Grafikkarten die
Farbwerte der Pixel abwechselnd in mehreren Speichern berechnet.
Dieses Verfahren bezeichnet man als Double- oder Tripple- Buffering,
entsprechend der Anzahl von wechselnden Speichern. Um ein einfaches 2-Dimensionales Bild auf dem Monitor anzuzeigen, zum Beispiel
eine Bitmap, würde das Bild mit den entsprechenden Farbwerten pro
Pixel in den Grafikkartenspeicher geladen, und zur gewünschten Zeit
in den Frontbuffer kopiert werden.
Ein dreidimensionales Bild auf dem Computermonitor, zum Beispiel aus einem Computerspiel, ist nur scheinbar dreidimensional. Tat-
Seminar Computerspiele: Räumliche Datenstrukturen
• View Frustum Culling: Bei dieser Art von Culling wird versucht
möglichst alle Objekte einer Szene außerhalb des View Frustums (Sichtbarkeitsvolumen) zu entfernen. Das View Frustum
entspricht einer abgeschnittenen Pyramide in Richtung der virtuellen Kamera einer Szene. Dabei können Objekte, die links,
rechts oder hinter der Kamera liegen, entfernt werden. Objekte,
die das Frustum schneiden werden zunächst nicht entfernt.
sächlich ist nur das anzuzeigende Modell in dreidimensionaler Form
im Speicher des Computers vorhanden. Das anzuzeigende Bild ist eine zweidimensionale Projektion dieses Modells auf das Ausgabegerät.
Für diese Projektion gibt es verschiedene Verfahren, welche insgesamt
unter dem Begriff Rendering zusammengefasst werden.
2.3
Rasterisierung
In aktuellen Grafikkarten und Computerspielen ist die Rasterisation
der de facto Standard. Dieses Verfahren wird als Objektbasiert bezeichnet. Dabei werden die Objekte des Modells, in diesem Kontext
Szene genannt, ausgehend von der Betrachterposition auf die Bildfläche projiziert. Die einzelnen Objekte werden hierbei häufig als ein
Netz aus Dreiecken dargestellt. Der Grund liegt in der Einfachheit der
Berechnung sowie der Möglichkeit, Dreiecke in komplexeren Verfahren hinzuzufügen oder zu entfernen. Um Bilder wie in aktuellen Computerspielen zu generieren, können die Dreiecke nun mit Farben oder
Texture Mapping gefüllt werden. Dabei muss darauf geachtet werden,
dass Objekte, die nahe am Betrachter liegen, nicht durch weiter entfernte überschrieben werden. Das kann durch einen Z-Buffer bewerkstelligt werden. Hierzu wird ein 2D-Array mit Tiefeninformationen
(z-Werte) des Bildraums nebenher gepflegt. Falls ein Objekt gezeichnet werden soll, muss zunächst im Z-Buffer pixelweise geprüft werden
ob es vor bereits gezeichneten Objekten liegt. Ist dies der Fall darf es
gezeichnet werden und der Z-Buffer wird mit dem neuen Objekt aktualisiert. [6, 7]
2.4
• Backface Culling: Die Idee bei dieser Technik gründet auf die
Feststellung das die Normale von Objekten einer Szene, zum
Beispiel eines Polygons, eine Richtung aufweist. Dementsprechend ist es nicht notwendig die unsichtbare „Rückseite“ von
Objekten zu Rendern.
• Occlusion Culling: Bei dieser Technik werden verdeckte Objekte
innerhalb des Sichtbereichs entfernt. Dieses Verfahren bietet die
Möglichkeit für große Performancegewinne, da selbst kleine Änderungen in der Kameraposition bereits massive Änderungen in
der Anzahl von sichtbaren Objekten bewirken können. Occlusion Culling korrekt zu berechnen ist im Allgemeinen schwieriger
als Frustum oder Backface Culling.
• Portal Culling: Speziell für Szenen in Gebäuden eignet sich diese
Technik. Dabei wird die Szene in Zellen unterteilt, welche durch
Portale miteinander verknüpft sind. Beim Rendern wird die Zelle
mit der Kamera komplett betrachtet. Desweitern wird überprüft
ob innerhalb des View Frustums ein Portal existiert. Falls ein
Portal sichtbar ist, wird ausgehend vom Portal ein weiteres View
Frustum für die nächste Zelle erzeugt. Die Erstellung von Zellen
und Portalen war in der Vergangenheit häufig vom Mapdesigner
per Hand zu erledigen. Techniken zur automatischen Generierung von Portalen existieren zum Beispiel in der Umbra3 Engine.
[8]
Raytracing
Eine andere Möglichkeit des Renderns bieten die bildbasierten Verfahren wie Raytracing. In der einfachsten Form wird hierbei ein Strahl
durch jeden zu füllenden Pixel geschickt. Dabei wird ausgehend von
der Betrachterposition jedes Objekt der Szene auf Schnitt mit dem
Strahl getestet. Um direkte oder indirekte Beleuchtung zu erreichen,
kann das auf diese Weise als sichtbar bestimmte Objekt in der Folge
als Ausgangspunkt für weitere Strahlen dienen. Verfahren mit mehreren Strahlen per Pixel oder zufallsbasierte Monte Carlo Methoden
existieren und bieten Verbesserungen der Qualität von Bildern oder
Performancegewinne. Die Vorteile von Raytracing gegenüber der Rasterisierung liegen in der Möglichkeit des Verzichtes auf einen Z-Buffer
der Grafikkarte sowie in der fotorealistischen Bildqualität. Ein deutlicher Nachteil ist die Berechnungsgeschwindigkeit. Diese liegt in vielen Fällen deutlich hinter den Rasterisierungsansätzen, weshalb Raytracing häufig nicht für Echtzeitanwendungen gewählt wird. Diverse Versuche das Raytracing für Echtzeitanwendungen bereitzustellen
werden derzeit unternommen. [12]
2.5
• Detail Culling: Zu kleine Objekte oder Objekte, die zu weit entfernt sind, werden nicht betrachtet.
Culling muss im Allgemeinen kein korrektes Ergebnis liefern. Häufig
reicht es ein Potentially Visible Set (PVS) zu errechnen. Das PVS besteht aus einer konservativen Schätzung der sichtbaren Objekte. Dies
bedeutet, dass alle sichtbaren und ein möglichst kleiner Teil der unsichtbaren Objekte im PVS sind. Der Grund hierfür ist die meist „einfachere“ Berechnung von angenäherten Lösungen im Vergleich zu
korrekten Lösungen. Entsprechend müssen die Ergebnisse des PVS
durch einen korrekten Hidden Surface Removal (HSR) Algorithmus
gerendert werden. [3, 5]
Culling
3
R ÄUMLICHE DATENSTRUKTUREN
Unter Räumlichen Datenstrukturen versteht man die Aufteilung der
Szene durch verschiedene Verfahren. Grundsätzlich kann man zwischen objekt- und raumzentrischen Verfahren unterscheiden. Zu den
objektzentrischen Verfahren zählt die Bounding Volume Hierarchie
(BVH). Hier werden die Objekte der Szene von immer größer werdenden Bounding Volumes umschlossen bis zu einer alles Umschließenden. Im Gegensatz hierzu stehen die raumzentrischen Verfahren
wie zum Beispiel BSP-Tree oder Octree. Bei diesen Verfahren wird
zunächst um die gesamte Szene, mit allen enthaltenen Objekten, eine
umschließende Hülle gelegt. Daraufhin wird dieser Raum sukzessive
in Unterräume unterteilt. Die Art der Unterteilung sowie das StoppKriterium bestimmen die Charakteristika der verschiedenen Verfahren.
Beide Typen von Verfahren können bei der Erstellung der Hierarchie einfache geometrische Formen wie Kugeln, Rechtecke oder achsenorientierte Rechtecke. Der Vorteil darin besteht in der Einfachheit bei der Berechnung von Schnitttest im Vergleich zu komplexen
geometrischen Formen. Große Performancegewinne bieten die hierarchischen räumlichen Datenstrukturen für Anwendungszwecke, bei
welchen es möglich ist, Teilbäume bzw. Unterräume als irrelevant zu
identifizieren und zu verwerfen. Das legt eine enge Verwebung von
Abb. 1. Übersicht über Culling Methoden [3]
Der Begriff Culling beschreibt die Verfahren zum Entfernen von
nicht sichtbaren Objekten einer Szene. Damit soll verhindert werden,
dass Rechenleistung beim Rendern an nicht sichtbaren Objekten „verschwendet“ wird. Es wird zwischen verschiedenen Arten von Culling
unterschieden:
2
Seminar Computerspiele: Räumliche Datenstrukturen
Culling-Verfahren und räumlichen Datenstrukturen nahe. Weitere Einsatzmöglichkeiten sind zum Beispiel die Nachbarschaftssuche sowie
die Möglichkeit, direkt aus der Datenstruktur durch geschicktes traversieren des zugehörigen Baumes, das Sichtbarkeitsproblem zu lösen. Dies setzt jedoch eine spezielle Methodik beim Aufbau der Datenstrukturen voraus.
Eine weitere Möglichkeit zur Aufteilung der Szene bieten reguläre
Gitter. Hierbei wird der Raum nicht in einer rekursiven Art unterteilt,
sondern es wird ein vorgegebenes Gitter fester Größe verwendet. Vorteile hierbei finden sich in der einfachen Art das Gitter zu konstruieren
und der einfachen Traversierung. Nachteilig an diesem Verfahren ist
die empirische Erkenntnis, dass häufig nur wenige Zellen tatsächlich
belegt sind, während sehr viel Geometrie auf einige wenige Zellen
konzentriert ist.
3.1
Raum umspannen oder die Vereinigung der Objekte als Bounding Volume aufgefasst werden. Im ersten Fall müsste bei einer Schnittanfrage
der gesamte Baum traversiert werden, im Zweiten böte ein möglicher
Schnitttest keine Verbesserung in der Komplexität. Die Wahl der richtigen Bounding Box ist somit eine Abwägung zwischen Passgenauigkeit und Geschwindigkeit bzw. Aufwand bei der Berechnung.
Die Standard Bounding Volumes werden in Abbildung 3 dargestellt. Dabei findet Herman Haverkort [10], dass die am Häufigsten
in der Praxis eingesetzte Form die Achsenparallele Bounding Box
(AABB) ist. Der Grund liegt in der einfachen Berechnung einer minimalen Bounding Box für eine Menge von Objekten, geringem Speicherverbrauch sowie der einfachen und robusten Berechnung von
Schnitttests.
3.1.2 View Frustum Culling mit BVH
BVHs eignen sich gut für Frustum Culling, vorausgesetzt die Struktur beim Aufbau des Baums folgt gewissen Regeln. Die Verbesserung
liegt in der Aufteilung der Szene, so können im Idealfall durch eine
geschickt gewählte Hierarchie bereits sehr früh ganze Teilbäume vom
weiteren Testen auf Schnitt mit dem View Frustum ausgeschlossen
werden. Deshalb ist es wichtig, dass die BVH einer Szene eine räumliche Aufteilung aufweist. Daher sollten Objekte die in der Szene nah
beieinander liegen auch in der BVH benachbart werden. Als Beispiel
eignet sich die Szene einer Kleinstadt. Die Grundfläche kann hierbei
in verschiedene Tiles unterteilt werden, welche die entsprechenden
Bounding Volumes ergeben. Die Position der Objekte (Bäume, Häuser) ist somit automatisch an eine Tile-Bounding Volume gebunden
und erfüllt die Bedingung der räumlichen Aufteilung. [3]
Weitere Aspekte für effizienten View Frustum Culling sind die Forderung nach nicht zu flachen Hierarchien, da aus dem wegschneiden
möglichst großer Teilbäume der größte Speedup erreicht werden kann.
Zudem gilt die Forderung, keine zu tiefen Hierarchien zu erstellen, da
diese nur zusätzliche Schnitttests ergeben. Als grobe Heuristik wird in
[3] angegeben, dass die Anzahl der Hierarchiestufen etwa der Anzahl
von Nachfolge-Knoten sein sollte.
Der View Frustum Culling Algorithmus [3]:
Bounding Volume Hierarchie
Abb. 2. Szene mit Unterteilungsebenen (l.), zugehörige BVH (r.)
Ein objektzentrischer Ansatz zur hierarchischen Sortierung von
Szenen ist die Bounding Volume Hierarchie. Darunter versteht man
eine Baumstruktur über die geometrischen Objekte einer Szene. Die
geometrischen Objekte sind in Bounding Volumes (Hüllkörper) eingeschlossen und stellen die Blätter des Baumes dar. Die Elternknoten
dieser Blätter sind ihrerseits Bounding Volumes, welche die Kindknoten einhüllen. Die Wurzel des Baumes stellt die Bounding Volume für
die gesamte Szene dar und umschließt alle untergeordneten geometrischen Objekte, deren Bounding Volumes und die „virtuellen“ Bounding Volumes der inneren Knoten. Eine spezielle Charakteristika für
Bounding Volume Hierarchien ist die Tatsache, dass Objekte nicht zerschnitten werden müssen. Bei der Kollisionsberechnung ist die Laufzeit des bruteforce Ansatzes, alle Objekte paarweise auf Schnitt zu
testen, O(n2 ). Durch den Einsatz einer BVH kann man auf O(n) gelangen. [11]
1. Beginne mit Wurzel des Graphen
2. Teste Knoten auf Schnitt mit Blickpyramide
• Falls Schnitt nicht leer: traversiere rekursiv mit den Kindern
• Sonst: stelle Bearbeitung des Knoten ein
3.2
Abb. 4. Szene mit Unterteilungsebenen (l.), zugehöriger BSP-Baum (r.)
[3]
Abb. 3. Standard Bounding Volumes [3]
3.1.1
BSP-Tree
Binary Space Partitioning (BSP) [2] ist eine Methode, die Szene
rekursiv in zwei Unterräume zu unterteilen. Dabei wird der Raum in
jedem Schritt anhand einer ausgesuchten Ebene geteilt. Diese Ebene richtet sich nach der Orientierung eines Objektes. Die Rekursion stoppt wenn ein gewähltes Abbruchkriterum getroffen wurde. Das
kann eine maximale Baumtiefe sein oder das Erreichen einer speziellen Anzahl von Objekten in den Blattknoten. Als Ergebnis der rekursiven Unterteilungen erhält man einen binären Baum (BSP-Tree). In diesem Baum bezeichnet die Position (links oder rechts) eines Kindknotes auf welcher Seite im Raum sich der Teilbaum befindet. Somit ist es
Bounding Volumes
Die Wahl der Bounding Volumes lässt sich auf verschiedene Kriterien reduzieren. Zum einen ist es dienlich einfache Formen für Bounding Volumes zu nutzen. Der Grund hierfür liegt in den geringen Speicheranforderungen pro Bounding Volume und den einfach errechenbaren Schnitttests. Auf der anderen Seite sollten die Bounding Volumes möglichst eng um die zu umschließenden Objekte liegen, sodass bei möglichen Schnittanfragen möglichst früh abgebrochen werden kann. Als Extremfälle könnte die Bounding Volume den gesamten
3
Seminar Computerspiele: Räumliche Datenstrukturen
Octree[13]. Mit diesen Erweiterungen können Octrees auch dynamische Szenen gut bewältigen.
durch einfache Traversierung möglich eine „back-to-front“ Sortierung
der Objekte zu erhalten. Dies war ursprünglich zur Lösung des Sichtbarkeitsproblem sehr interessant, da der sogenannte Painters Algorithmus auf eine effiziente Berechnung der Reihenfolge angewiesen war.
Der Bedarf einer Sortierung hat in heutiger Zeit durch den weit verbreiteten Einsatz des Z-Buffers abgenommen. BSP-Bäume sind sehr
aufwendig in der Erstellung. Dies liegt an der Schwierigkeit eine optimale Unterteilungsebene zu finden. Ein weiteres Problem ist das teure Einfügen von Objekten in dynamischen Szenen. Die Zeitkomplexität zum Erstellen eines Baumes mit n Objekten wird von [RantaEskola2001] mit O = (n2 *log(n)) angegeben. Falls eine Unterteilungsebene Objekte schneidet, werden diese aufgeteilt und in den linken
und rechten Teilbaum eingefügt (vor- und hinter dem Objekt). Das
führt bei schlecht gewählten Teilungsebenen zu einer massiven Vermehrung von Objekten. BSP-Trees erlangten zum ersten Mal für die
Spieleindustrie große Popularität durch die Game Engine „id Tech 1“,
welche in Spielen wie Doom, DoomII und Hexen eingesetzt wurde.
[4]
3.2.1
4 O CCLUSION C ULLING
Wie bereits in Kapitel 2.5 und Abbildung 2 erwähnt, versteht man unter Occlusion Culling das Entfernen von verdeckten Objekten aus der
Szene um diese nicht unnötigerweise zu Rendern. Da beim Occlusion
Culling die Beziehungen der einzelnen Objekte untereinander untersucht werden muss, stellt Occlusion Culling ein schwierigeres Problem dar als Frustum- oder Backface-Culling. Der einfache Ansatz
jedes Objekte auf Verdeckung zu testen zu langsam ist, erzeugen sehr
viele Algorithmen wieder eine Hierarchie für die gesamte Szene und
testen die Verdeckung top-down auf dieser Hierarchie. [5]
4.1 Klassifizierung der Techniken
Occlusion Culling Techniken können laut Cohen et al. [5] nach folgenden Kriterien und Funktionalitäten gruppiert und analysiert werden:
• Online vs. Offline und Punkt vs. Region Die Berechnung der
Verdeckung kann zur Laufzeit (online) geschehen oder vorberechnet werden (offline). Diese Unterscheidung ist eng verwoben mit der Frage, ob die Verdeckungsberechnung für einen
speziellen Kamerapunkt oder für eine Region gelten soll. Die
Berechnung der Verdeckung einer gesamten Region braucht im
Allgemeinen mehr Rechenleistung und ist deshalb prädestiniert
zur offline- Vorberechnung. Nachteile der vorberechneten Verdeckung sind die hohen Speicherkosten der Verdeckungsinformationen sowie die schwierige Handhabbarkeit von dynamischen
Szenen. [5]
kD-Trees
Der kD-Tree stellt eine weitere Form eines Binärbaums dar und kann
ebenfalls zum Unterteilen der Geometrie verwendet werden. Bei dieser Variante werden die Ebenen jeweils achsenparallel geschnitten.
Hierfür kann die x-Achse zunächst als Wurzelknoten ausgewählt werden. Als Kindknoten werden die weiteren Koordinatenachsen rekursiv
bis zu Erreichen des Abbruchkriterums eingefügt.
3.3
Reguläres Gitter
Ein reguläres Gitter unterteilt den Raum in ein vorgegebenes Gitter
fester Größe. Die einzelnen Zellen werden Voxel genannt. Beim Aufbau der Datenstruktur wird in jedem Voxel ein Pointer auf schneidende
Objekte gespeichert. Der kritische Punkt bei regulären Gittern ist die
Maschenweite der einzelnen Voxel. Wird diese zu eng gewählt befindet sich ein einzelnes Objekt in vielen verschiedenen Voxeln, wird sie
hingegen zu grob gewählt befinden sich viele Objekte im gleichen Voxel. Je stärker dieser Effekt auftritt, desto bedeutungsloser wird die
Struktur. Ein Vorteil von regulären Gittern betrifft das Einfügen von
Objekten. Dies ist durch den einfachen Aufbau sehr leicht möglich.
[3]
3.4
• Bildraum vs. Objektraum Der Unterschied zwischen Bildraum
und Objektraum geht auf Ivan Sutherland[15] zurück. Dabei
wird die Verdeckungsberechnung von Objektraumverfahren direkt an den Objekten durchgeführt, ohne auf das Ausgabegerät
zu achten. Im Gegensatz dazu steht das Bildraumverfahren für
die Verdeckungsberechnung pro Pixel. Dabei gelten Bildraumverfahren als äußerst robust, in Bezug auf Problemquellen wie
T-Junctions, degenerierten Primitiven oder Löchern in der Struktur. [16]
• Konservativ vs. Annähernd Occlusion Culling Algorithmen
liefern im Vergleich zu Hidden Surface Removal Algorithmen
keine exakten Ergebnisse. Konservative Occlusion Culling Algorithmen überschätzen daher die Menge von sichtbaren Objekten
in dem Sinn, dass möglichst viele - aber nicht alle verdeckten
Objekte geculled werden. Annähernde Algorithmen versuchen
das Problem von der anderen Seite anzugehen, dabei versuchen
Sie möglichst alle sichtbaren Objekte zu finden. Dies muss nicht
immer gelingen, so können Objekte die keinen großen Einfluss
auf das Bild haben, aber sichtbar sind, verworfen werden. [5]
Quadtree/Octree
Abb. 5. Unterteilung 2D Szene durch Quadtree [3]
• Einzelne vs. zusammengesetzte Occluder Von zusammengesetzten Occludern spricht man bei Objekten, die falls zusammen
betrachtet, ein weiteres Objekt verdecken obwohl sie einzeln dazu nicht in der Lage wären
Quadtrees[1] und Octrees sind hierarchische Unterteilungsstrukturen. Beim Aufbau der Struktur wird zunächst das Initiale Voxel gewählt, welches die gesamte Szenegeometrie umschließt. In den weiteren Schritten wird dieses Voxel rekursiv in vier (Quadtree) oder
acht (Octree) gleich große Untervoxel geteilt bis ein Abbruchkriterium erreicht wird. [13] Dabei wird der Quadtree normalerweise für 2dimensionale-, der Octree für 3-dimensionale Unterteilungen verwendet. Der Vorteil gegenüber regulären Gittern ist, dass beim Aufbau der
Struktur auf die Geometrie der Szene eingegangen wird. So wird bei
entsprechend gewähltem Abbruchkriterium ein wenig bestückter Bereich der Szene nicht oft unterteilt, ein dicht bestückter hingegen häufiger. [13] Octrees sind aufgrund ihrer einfachen und schnellen Struktur sehr beliebt in der Computergrafik. Ein Nachteil stellen dynamische Szenen dar. Dabei muss die unmodifizierte Variante des Octrees
bei hinzufügen oder entfernen eines geometrischen Objektes neu aufgebaut werden. Aus diesem Grund wurden viele Erweiterungen des
ursprünglichen Octrees entwickelt wie der Octree-R[14] oder Loose
Abb. 6. Objekte B und A verdecken zusammengesetzt Objekt C [16]
• Auswahl der Occluder Einige Algorithmen nutzen alle Objekte
der Szene als mögliche Occluder, während andere durch Heuristiken nur eine Teilmenge der Objekte als mögliche Occluder
untersuchen. Die Untersuchung aller Objekte kann das Ergebnis
4
Seminar Computerspiele: Räumliche Datenstrukturen
verbessern - auf Kosten der Rechenleistung. Eine weitere Möglichkeit stellen „Virtuelle Occluder“ dar. Dabei werden einzelne
komplexe Objekte durch eine einfachere verdeckende Geometrie
ausgetauscht. Als Beispiel dient hier ein Wald mit Sichtweite von
15 Metern. Anstatt die Bäume einzeln zu betrachten wird ein virtueller Occluder in 15Meter aufgestellt. [5, 17]
• Szenentypen Viele Occlusion Culling Techniken sind auf spezielle Szenentypen und Anwendungen begrenzt. Sichtbarkeiten
die im Präprozess errechnet werden sind häufig nicht für dynamische Szenen geeignet. Portal-Culling Techniken eignen sich
im speziellen für Innenräume und weniger für offene Außenwelten. [5, 17]
• Weitere Eigenschaften
Abb. 8. Beispiel für hierarchisches occlusion Culling an Octree-Szene
[18]
– Eine geforderte Eigenschaft stellt die sogenannte „Output
sensitivity“ dar - die Laufzeit eines Culling Algorithmus
sollte proportional zur sichtbaren Menge sein.
die Seite eines Kindknotens relevant. Das bedeutet im Occlusion Tree
gibt es ein sichtbares und ein unsichtbares Kind.
Beim tatsächlichen Occlusion Culling wird die räumliche Datenstruktur der Szene nun mit dem Occlusion Tree verglichen. Falls ein
Knoten der Szene als vollständig sichtbar oder vollständig unsichtbar
erkannt wird stoppt die Rekursion. Für alle Kindknoten wird die Sichtbarkeit entsprechend gesetzt. Zum schlussendlichen Rendern werden
alle sichtbaren und teilweise sichtbaren Objekte durch einen exakten
Sichtbarkeitstest, wie zum Beispiel den Hardware Z-Buffer, gerendert.
Dieser Algorithmus ist konservativ und nicht für dynamische Szenen geeignet. Beim Hinzufügen und entfernen von Objekten muss die
räumliche Datenstruktur der Szene geupdated werden sowie die Klassifizierung eines neuen Objektes vorgenommen werden. In Versuchen
wurde in speziellen Konfigurationen (Anzahl Occluder, Modifizierungen am Occlusion Tree) und Szenen ein Speedup von 1,75 bis 3,75 im
Vergleich zum Rendern ohne Occlusion Culling erreicht. [18]
– Einige Algorithmen benötigen spezielle Hardware. Beispielweise einen Z-Buffer oder „Hardware Occlusion Queries“. [5]
– Für diverse Occlusion Culling Techniken ist es notwendig, die Szene in einer speziellen räumlichen Datenstruktur vorliegen zu haben. Dies liegt an der engen Verwebung
und Ausnutzung der Vorteile einzelner Datenstrukturen.
[17]
4.2
Hierarchisches Occlusion Culling
4.3
Hierarchischer Z-Buffer
Abb. 7. Ein Shadow-Tree funktioniert ähnlich wie der Occlusion Tree [18]
Abb. 9. Aufbau der Z-Pyramide [20]
Das Verfahren von Bittner et al. [18] benutzt neben der räumlichen Datenstruktur für die Szene eine Repräsentierung der Occluder
in Form eines Binärbaums. Dazu werden zunächst im Preprocess alle
Objekte auf die Fähigkeit zur Verdeckung überprüft. Dies geschieht
durch Kenntnis über das Modell, zum Beispiel werden Polygone die
zu detaillierten Objekten gehören (Stühle, Blumen..) als nicht verdeckungsfähig ignoriert. Die als Verdeckungsfähig erkannten Objekte
sind häufig große Polygone wie Wände, Böden oder Decken von Gebäuden. Diese Information wird in der zu Grunde liegenden räumlichen Datenstruktur (zum Beispiel Octree) gespeichert. Zur Laufzeit
werden dynamisch gute Occluder bestimmt. Dazu werden alle möglichen Occluder in einem definierten Radius zur Kameraposition auf
die Verdeckfähigkeit für die aktuelle Situation getestet. Hierzu wird
die sogenannte „area-angle“ errechnet, also die Größe des verdeckten Raums durch den Occluder, ausgehend von der Kameraposition.
Die gewählten Occluder werfen einen Verdeckungsraum ähnlich wie
Schatten, aus welchen im gleichen Schritt der binäre Occlusion Tree
gebildet wird. Ähnlich wie bei der Binary Space Partitioning (BSP) ist
Abb. 10. Aufbau der Z-Pyramide mit Werten [20]
Der hierarchische Z-Buffer ist ein weiterer Ansatz für occlusion
Culling. Hierbei werden zwei Datenstrukturen benötigt. zum Einen
5
Seminar Computerspiele: Räumliche Datenstrukturen
wird die Szene in einem Octree gespeichert und zum Anderen wird
die Z-Pyramide als Verdeckungsspeicher aufgebaut. Die Konstruktion
des Octrees geschieht nach dem in Kapitel 3.4 Quadtree/Octree
beschriebenen Muster. Die Verwendung von Octrees bewirkt, dass
der Hierarchische Z-Buffer für statische Szenen geeignet ist. Die
Z-Pyramide besteht aus verschieden groben Z-Werten des bekannten
Z-Buffers. Die unterste Ebene der Pyramide entspricht genau dem
Z-Buffer, jede höhere Stufe fasst vier Z-Buffer Werte zusammen
bis zur Spitze mit einem einzigen Z-Wert. Dabei wird jeweils der
maximale Wert der feineren Pyramidenebenen als Wert für die höhere
Stufe übernommen. Dies bedeuted, dass der Z-Wert welcher am
weitesten vom Betrachter entfernt liegt, in der Pyramide nach oben
wandert. Eine Änderung beim Rendern im Z-Buffer bewirkt ein
Update der Z-Pyramide. Dabei wird der neue maximale Z-Wert nach
oben propagiert bis sich der Wert in der Pyramidenstufe nicht mehr
ändert. Der Algorithmus zum Cullen in Pseudocode
den so gefundenen Zellen müssen Portale zu weiteren Zellen auch auf
Sichtbarkeit untersucht werden.
Dieser konservative Algorithmus testet nicht auf Verdeckung von
Objekten die sich innerhalb der Zellen befinden. Der Algorithmus bietet seine Vorteile vor allen in den speziellen Innenwelten, solange sich
die Anordnung dieser Welten nicht ändert können dynamische Szenen
relativ gut behandelt werden. [5]
5 C ONCLUSION
Räumliche Datenstrukturen bilden die Grundlage für derzeitiges und
zukünftige Entwicklungen im Echtzeitrendern. Die verfügbare Rechenleistung wird in den nächsten Jahren noch weiter steigen, jedoch
ist es nicht zu erwarten dass dieser Trend die Anforderungen der Bildsynthese überholen wird. Aktuelle Entwicklungen beschäftigen sich
unter anderem mit den Möglichkeiten der automatischen Generierung
von Portalen in Szenen, welche aktuell noch von menschlichen Mapdesignern fest in die Szene integriert werden müssen. [8] Weitere Arbeiten beschäftigen sich mit dem fotorealistischen Rendern komplexer
Szenen auf leistungsschwächeren „Consumer Computers“ oder Mobilen Geräten. Dabei werden die massiven parallelen Möglichkeiten
welche durch die Architektur der Grafikkarten gegeben sind im Zusammenspiel mit Swapping-Mechanismen ausgenutzt, um selbst bei
wenig verfügbaren Speicher sehr große Szenen in kurzer Zeit zu Rendern. [9]
1: ProcessOctreeNode(OctreeNode N)
2: if(isOccluded(N.BoundingVolume, ZPuffer)) then return;
3: for each primitive p in N
4: tileInto(p, ZPuffer)
5: end
6: for each child node C in N in front-to-back order
7: ProcessOctreeNode(C)
8: end
L ITERATUR
[1] Finkel, R.A.,Bentley, J.L. Quad Trees A Data Structure for Retrieval on
Composite Keys, Acta Informatica (1974),
[2] Henry Fuchs, Zvi M. Kedem, Bruce F. Naylor, On visible surface generation by a priori tree structures
[3] Prof. D. Fellner,T. Kalbe, M. Bein, Vorlesung: Graphische Datenverarbeitung I WS2009/2010,
[4] Doom Wiki, Online http://doom.wikia.com/wiki/Doom_
rendering_engine, Stand 05.01.2013
[5] Daniel Cohen-OR, Yiorgos Chrysanthou, Cláudio T. Silva, Frédo Durand, A Survey of Visibility for Walkthrough Applications,
[6] Prof. Dr. Thomas Ertl, Vorlesung: Computergrafik WS11/12,
[7] Marcus Frenkel, Computergrafik, http://scienceblogs.de/
von_bits_und_bytes/2012/06/22/,
[8] Umbra3 Enginge, http://www.umbrasoftware.com/
[9] Centileo, SIGGRAPH 2012, http://www.centileo.com
[10] Herman Johannes Haverkort, Results on geometric networks and data
structures, 2004
[11] Tomas Moller and Eric Haines, Real-Time Rendering, A K Peters,2nd
edition, 2002.
[12] Theo
Valich
(June
12,
2008),
„Intel
converts
ET:
Quake
Wars
to
ray
tracing“,
TG
Daily,
http:
//www.tgdaily.com/trendwatch-features/
37925-intel-converts-et-quake-wars-to-ray-tracing
[13] HELIN, V., 2003. Hierarchies for occlusion culling.
[14] HAVRAN, V. 2000. Heuristic Ray Shooting Algorithms. Ph.d. thesis,
Department of Computer Science and Engineering, Faculty of Electrical
Engineering, Czech Technical University in Prague.,
[15] Ivan Sutherland u.a.: A Characterization of Ten Hidden-Surface Algorithms. ACM Computing Surveys (CSUR) 6,1 (March 1974): 1-55,
ISSN 0360-0300,
[16] AILA, T. 2000. SurRender Umbra: A Visibility Determination Framework for Dynamic Environments. Master thesis, Helsinki University of
Technology.
[17] HEY, H., AND PURGATHOFER, W. 2001. Occlusion culling methods.In Proceedings of EUROGRAPHICS 2001, Eurographics Association, Eurographics Association.
[18] J. Bittner, V. Havran, and P. Slavik. Hierarchical visibility culling with
occlusion trees. In Proceedings of Computer Graphics International 98,
[19] Gamasutra.com - Occlusion Culling Algorithms, Online
http://www.gamasutra.com/view/feature/131801/
occlusion_culling_algorithms.php?page=2
[20] Matthias Fischer, Universität Paderborn, Vorlesung Algorithmen für
hochkomplexe Virtuelle Systeme, Sommersemester 2012
Gestartet wird der der rekursive Algorithmus mit der Wurzel des
Szene-Octrees. Der Test isOccluded(..) in Zeile 2 testet das Bounding Volume des Knoten N auf Verdeckung. Dabei wird jede Seite des
Bounding Volumes gegen die Stufen der Z-Pyramide getestet, angefangen bei der höchsten (gröbsten) Stufe der Pyramide. Die Bounding
Volume und damit der Knoten sowie alle Kinder wird als komplett verdeckt abgelehnt, falls die nächste Entfernung einer Seite der Bounding
Volume weiter entfernt liegt als der entsprechende Z-Wert in der Pyramide. Die Funktion tileInto(..) fügt die Primitive des Knoten in den
Z-Buffer ein, woraufhin die Werte der Z-Pyramide angepasst werden.
Anschließend werden mit den Kindern des Knoten rekursiv in frontto-back Reihenfolge, also von vorne nach hinten, traversiert. Am Ende
des Algorithmus ist in der untersten Stufe der Pyramide ein Standard
Z-Buffer Bild der Szene. [5, 19, 20]
Weitere Optimierungen des hierarchischen Z-Buffers existieren.
Als Wichtigste ist die Hardwareimplementierung eines Z-Buffers zu
nennen, es gibt jedoch auch Ansätze welche die Berechnungen der ZPyramide aus dem Z-Buffer des vorherigen Bildes übernehmen. [5]
4.4
Cell-and-Portal Occlusion
Abb. 11. Vogelperspektive auf die Zellen mit Portalen (links), gerendertes Bild (rechts) [3]
Beim Cell-and-Portal Ansatz wird die Szene in Zellen aufgeteilt die
mit Portalen verbunden sind. In einer Computerspielwelt würden sich
Räume oder verbundene Tunnelsysteme als Zellen anbieten, wobei
Türen, Fenster oder schmale Durchgänge die Portale darstellen. Die
Idee dahinter ist die Feststellung, dass in solchen Umgebungen viele
Objekte der Szene durch die Spielwelt geculled werden können. Das
Verfahren benutzt eine räumliche Datenstruktur für die Szene derart,
dass Zellen die Knoten und Portale die Kanten des Baums darstellen.
Vor dem Rendern werden nun ausgehend von dem aktuellen View Frustum der Kamera alle adjazenten Zellen auf Sichtbarkeit untersucht. In
6
Herunterladen