Occlusion Culling Martin Fiedler - Seminar Computergrafik - TU Chemnitz
←
→
Transkription von Seiteninhalten
Wenn Ihr Browser die Seite nicht korrekt rendert, bitte, lesen Sie den Inhalt der Seite unten
Martin Fiedler Occlusion Culling Seminar Computergrafik Professur Grafische Datenverarbeitung und Visualisierung Fakultät für Informatik Technische Universität Chemnitz
Inhalt 2 Übersicht Teil 1: Übersicht über Occlusion Culling-Verfahren Teil 2: Horizon Occlusion Culling
Occlusion Culling 3 Teil 1 Übersicht über Occlusion Culling- Verfahren
Übersicht über Occlusion Culling-Verfahren 4 Inhalt 1. Einleitung 2. Unterschiede der OC-Algorithmen 3. Occlusion Culling in Hardware
Einleitung 5 Warum Occlusion Culling? • potentiell mehrere Millionen Polygone in großen Szenen • Verwendung von • View Frustum Culling • Back Face Culling • Problem: Szenen mit viel »Overdraw«, also hintereinander liegenden Objekten in z-Richtung • Objekte werden transformiert und scankonvertiert und scheitern am Ende nur am z-Test! • Lösung: Occlusion Culling = Herausfinden, welche Objekte wegen Verdeckung durch andere nicht gezeichnet werden müssen
Einleitung 6 Begriffe Occlusion-Culling-Algorithmus: • Eingabe: Szene + Kameraposition • Ausgabe: Potentially Visible Set (PVS) = Liste aller Objekte, die vom aktuellen Betrachterstandpunkt möglicherweise sichtbar sind Occluder (»verdeckendes Objekt«): • Objekt, das andere Objekte möglicherweise verdeckt Occludee (»verdecktes Objekt«): • Objekt, das möglicherweise verdeckt wird
Einleitung 7 Grundaufbau der Algorithmen Prinzipieller Aufbau eines einfachen OC-Algorithmus: 1. PVS := leer 2. Tiefensortierung der Szene (von vorne nach hinten) 3. für jedes Objekt der Szene: • Test, ob das aktuelle Objekt (Occludee) von irgend einem Objekt aus dem PVS (Occluder) verdeckt wird è Occlusion Test wenn ja: Objekt und ggf. alle untergeordneten Objekte überspringen wenn nein: Objekt ins PVS aufnehmen
Einleitung 8 Unterschiede der Algorithmen • Sichtbarkeitsprüfung von Punkt oder Region aus? • Preprocessing oder Echtzeit? • Konservativität • Repräsentation der Objekte • Auswahl der Objekte • Weitere Kriterien: • Zeichenreihenfolge • Wie stark muß eine front-to-back-Reihenfolge eingehalten werden? • OC im Objektraum oder im Bildraum? • Existiert Hardwareunterstützung?
Unterschiede der Algorithmen 9 Sichtbarkeitsprüfung • PVS kann alle Objekte enthalten, die vom aktuellen Betrachterstandpunkt sichtbar sind oder • PVS kann alle Objekte enthalten, die von mindestens einem Standpunkt in einem definierten Bereich (Zelle) zu sehen sind
Unterschiede der Algorithmen 10 Echtzeiteigenschaften Möglichkeit 1: Preprocessing • PVS werden für alle möglichen Betrachterstandpunkte im Voraus berechnet • Eigenschaften: • nur mit zellbasierten PVS praktikabel • Vorberechnung kann viel Zeit in Anspruch nehmen • Szene kann nicht unmittelbar nach Änderungen neu gerendert werden! • PVS-Daten sind mitunter sehr groß • nur statische Objekte können in die Berechnung einfließen • Rendering sehr schnell • Verwendung z.B. in Spielen
Unterschiede der Algorithmen 11 Echtzeiteigenschaften Möglichkeit 2: Real-Time Occlusion Culling • PVS werden während des Renderings berechnet • Eigenschaften: • keine aufwändige und speicherplatzintensive Vorberechnung nötig • Einbeziehung dynamischer Objekte in den OC-Prozeß • erzeugen gewissen Overhead beim Rendering • viele OC-Methoden verwenden eine Mischung aus (wenigen) vorberechneten Informationen und Real-Time Occlusion Culling
Unterschiede der Algorithmen 12 Konservativität • für professionelle Anwendungen taugliche OC-Algorithmen arbeiten konservativ, d.h. sie liefern PVS, die mindestens alle sichtbaren Objekte enthalten • Nachteil: PVS könnten Objekte enthalten, die nicht sichtbar sind • Vorteil: Rendering ist garantiert korrekt • nicht-konservative OC-Algorithmen sind seltener, arbeiten z.B. mit • gewichteten PVS • »ungenauen« (punktweisen) Verdeckungstests • Culling von kleinen Objekten
Unterschiede der Algorithmen 13 Repräsentation der Objekte • Occlusion-Tests werden aus Komplexitätsgründen nicht auf den Objekten selbst durchgeführt • stattdessen Verwendung von vereinfachten Repräsentationen, z.B. • Objekt in niedrigster LOD-Stufe • Bounding Objects (Bounding Box, Bounding Circle, …) • durch geeignete Wahl der Repräsentation von Occluders und Occludees kann Konservativität erreicht werden
Unterschiede der Algorithmen 14 Auswahl der Objekte • Algorithmen können alle Objekte in den OC-Prozeß einbeziehen, oder aber nur einige • z.B. kleine Objekte – verdecken gewöhnlicherweise nur kleine Teile der Szene • aber: viele kleine Objekte können zusammengefaßt wieder große Teile verdecken à Zusammenfassung von Objekten (Occluder Fusion) Beispiel: Blätter von Bäumen
Occlusion Culling in Hardware 15 Hierarchischer Z-Buffer • Occlusion-Tests prinzipiell mit jeder OpenGL-Hardware möglich, aber »teuer« (Stencil Buffer muß per Software ausgelesen und ausgewertet werden!) • Zielstellung: Occlusion Tests in Rendering-Pipeline integrieren • Ansatz: Hierarchischer Z-Buffer • Z-Buffer liegt in mehreren Auflösungsstufen vor • niedriger aufgelöste Stufen enthalten die entferntesten Werte der korrespondierenden Pixel in der höheren Stufe
Occlusion Culling in Hardware 16 Early Z Rejection • Algorithmus zum Zeichnen eines Polygons: 1. maximalen (vordersten) Z-Wert bestimmen 2. auf niedrigster Auflösungsstufe scankonvertieren 3. Z-Test für mindestens ein Pixel dieser Stufe bestanden? ja: weiter mit nächster (höher auflösender) Stufe nein: Polygon wird verdeckt à nicht zeichnen • sinnvoll, da typische Szenen eine Tiefenkomplexität (Overdraw) von 2–4 aufweisen • erfordert Tiefensortierung, um maximale Effizienz zu erreichen
Occlusion Culling in Hardware 17 Hardwareunterstützung • ATI: • »Hyper-Z II« (Radeon 8500) mit 2-Level HZB (1x1, 4x4) noch ohne Early Z Rejection! • »Hyper-Z III« (ab Radeon 9500/9700) mit 3-Level HZB (1x1, 2x2, 4x4) • nVidia: • »Lightspeed Memory Architecture II« / »Z Occlusion Culling« (ab GeForce 3) • OpenGL-Extension für explizite Occlusion Queries • Prognose: HZB könnte »klassische« Occlusion-Culling-Techniken mittelfristig ablösen
Occlusion Culling 18 Teil 2 Horizon Occlusion Culling
Horizon Occlusion Culling 19 Übersicht 1. Quellen 2. Einleitung 3. Grundlegender Algorithmus 4. Problem 1: Tiefensortierung 5. Problem 2: Objektrepräsentation 6. Problem 3: Horizontrepräsentation 7. Problem 4: Perspektive 8. Zusammenfassung
Einleitung 20 Quellen • Laura Downs, Tomas Möller, Carlo H. Séquin: »Occlusion Horizons for Driving through Urban Scenery« (University of California at Berkeley) • Brandon Lloyd, Parris Egbert: »Horizon Occlusion Culling for Real-time Rendering of Hierarchical Terrains« beide Papers legen besonderen Wert auf die Echtzeiteigenschaften (d.h. keine aufwendigen Vorberechnungen, wenig zusätzlicher Speicherplatz notwendig)
Einleitung 21 Was ist Horizon Occlusion Culling? Horizon Occlusion Culling Spezialfall des Occlusion Culling für Szenen, die im wesentlichen »2½-dimensional« aufgebaut sind Konkrete Beispiele für solche Szenen: •Landschaften (Terrain Rendering) •Städte (Urban Scenery) Grundprinzip: Es werden Objekte nicht gezeichnet, die hinter dem Horizont verschwinden
Einleitung 22 Warum Horizon Occlusion Culling? Bei Terrain Rendering und Urban Scenery: • mehrere Millionen Polygone • mehrere Gigabytes Texturen (für Terrainoberfläche) • Geometrie-, Textur- und Speicherdurchsatz reicht für Echtzeitdarstellung nicht aus • meist »horizontale« Ansicht parallel zur Bodenebene • View Frustum Culling allein kann im Extremfall gar keine Flächen eliminieren • aber: sehr viel »Overdraw«, also verdeckte Objekte è Ansatz für Horizon Occlusion Culling
Einleitung 23 Der grundlegende Algorithmus • Rendering von vorne nach hinten • Horizont speichert die Bildschirm-y-Koordinate des höchsten bisher gezeichneten Objekts • bevor ein Objekt gezeichnet wird, wird überprüft, ob es den Horizont überragt: • liegt jeder Punkt unter dem Horizont, kann es übersprungen werden • liegt mindestens ein Punkt über dem Horizont, muß es gezeichnet werden • sobald ein Objekt gezeichnet wird, wird mit seiner Kontur der Horizont aktualisiert
Einleitung 24 Zu klärende Probleme 1. Wie kann die Tiefensortierung realisiert werden? 2. Wie werden die Objekte speicherplatzsparend repräsentiert, so daß man schnell die Sichtbarkeit entscheiden kann? 3. Wie wird der Horizont repräsentiert? 4. Was passiert, wenn die Kamera nicht parallel zur Bodenebene schaut?
Tiefensortierung 25 Sweep Plane / Event Queue • Eine (gedachte) Ebene (Sweep Plane) senkrecht zur Blickrichtung wandert von der Betrachterposition bis zur entfernten Clipplane • Alle dabei berührten Objekte werden in eine Event Queue eingefügt y • Bearbeitung der Objekte anhand der Viewer Event Queue-Reihenfolge Sweep Plane x • sinnvoll, wenn die Szene als Liste von Objekten repräsentiert ist
Tiefensortierung 26 Quadtree Traversal Grundidee: • Terrains oft als hierarchische Quadtrees repräsentiert • typischer »Footprint« einer Quadtree-Zelle ist für alle Hierarchieebenen gleich • für Occlusion Culling ist keine präzise Tiefensortierung notwendig – es reicht eine Approximation, so daß kein später gezeichnetes Objekt ein früher gezeichnetes verdecken kann Algorithmus: • Zeichenreihenfolge wird nur für die möglichen Footprints bestimmt • Anhand dieser Reihenfolge wird die Quadtree-Hierarchie durchlaufen
Tiefensortierung 27 Quadtree Traversal – Beispiel 16 4 14 15 8 13 12 2 oder 3 2 oder 3 6 7 10 11 5 4 9 1 2 3 1 Je nach Perspektive muß unterschieden werden, auf welche Bildschirmhälfte die Quadtree-Zelle abgebildet wird: 4 2 o. 3 2 o. 3 4 2 o. 3 1 1 2 o. 3
Objektrepräsentation 28 Occluder/Occludee Representation • Objektbeschreibung selbst wird nicht für Occlusion Culling genutzt – zu aufwendig • gesucht wird eine einfache, speicherplatzsparende Approximation: • »conservative under-estimation« für verdeckende Objekte (Occluders) • »conservative over-estimation« für verdeckte Objekte (Occludees) • Approximation ist »konservativ« – lieber ein paar Objekte mehr zeichnen, als Lücken in der Darstellung hinnehmen
Objektrepräsentation 29 Bounding Box / Bounding Frame • umgebender Quader (Bounding Box) oder oder umgebendes Rechteck seiner Projektion (Bounding Frame) wird als Repräsentation genutzt • prinzipbedingt eine »over-estimation« à für Occludees verwendet
Objektrepräsentation 30 Convex Vertical Prisms • CVP = Prisma mit konvexer Grundfläche, dessen Höhenachse stets parallel zur Höhenachse der Szene ist • Repräsentation eines Objekts als (kleine) Menge von CVPs • eignet sich als sowohl als Occluder als auch als Occludee • solange Objekte entlang des Bodens verschoben oder an der Höhenachse gedreht werden, bleiben CVPs gültig
Objektrepräsentation 31 CVPs und Mask Rectangles • CVPs als Occluder eingesetzt – Problem: Wie wird CVP in den Horizont eingetragen? • Lösung: CVP wird erneut »under-estimated« und als Rechteck begrenzt: • Linke und rechte äußere Ecke in der Projektion wird gesucht • Minimum der Höhe in diesen beiden Punkten wird bestimmt • Aus Ausdehnung und ermittelter Höhe wird ein Rechteck erzeugt
Objektrepräsentation 32 Occluder Edges • für Terraindarstellung entworfen • den Kanten von Quadtree-Zellen (»Gridlets«) werden Linien zugeordnet, die den groben Verlauf des Flächenstücks andeuten • Algorithmus: • an den Ecken eines Gridlet wird eine Linie durch die äußeren Gitterpunkte ermittelt (Methode der kleinsten Quadrate) • diese Linie wird soweit nach unten verschoben, daß kein Gitterpunkt mehr unter ihr liegt
Horizontrepräsentation 33 Säulenhorizont • diskreter Horizont als Menge von vertikalen Säulen, typischerweise in Bildauflösung • Aktualisierung des Horizonts durch Scankonvertierung von Occluder Edges oder Mask Rectangles • Sichtbarkeitsprüfung durch Scankonvertierung der oberen Kanten der Bounding Box – sobald ein Teil davon den Horizont überragt, ist das Objekt womöglich sichtbar
Horizontrepräsentation 34 Horizont als Binärer Baum • balancierter binärer Baum enthält Information über die stückweise konstante Horizonthöhe • jeder innere Knoten speichert minimale und maximale Höhe seiner Kinder à Baum muß nicht zwingend vollständig traversiert werden • nur konstante Höhen können eingetragen werden, keine Gefälle à Mask Rectangles und Bounding Frames verwendet • Aktualisierung und Sichtbarkeitstest = rekursive Traversierung des Baums
Kameraperspektive 35 Nicht-bodenparallele Perspektive • Problem: Horizont ist nur gültig für Perspektive, bei der die x-Ebene rückprojiziert parallel zur Bodenebene ist • Aber: Occlusion Culling muß nicht zwingend in derselben Perspektive wie Rendering erfolgen • Daher: Suche einer Kameraeinstellung, die parallel zur Bodenebene ist, durch Vergrößerung des Blickwinkels à gelingt nur, solange die Ansicht nicht die Höhenachse enthält • wenn die Ansicht die Höhenachse enthält oder dieser zu nahe kommt, wird sie zweigeteilt: 1. »horizontaler Teil« mit Occlusion Culling 2. »vertikaler Teil« nur mit View Frustum Culling
Kameraperspektive 36 Beispiele günstiger Fall: Standardfall: ungünstiger Fall: Ansicht parallel zur Ansicht geneigt Ansicht extrem geneigt Bodenebene à Ansichtstransformation à vergrößerte Ansicht à ein Teil der Ansicht kann für Horizont wird für Horizont wird ohne Occlusion verwendet werden verwendet Culling dargestellt
Zusammenfassung 37 Praktische Resultate • Echtzeit-Occlusion-Culling-Algorithmen beanspruchen viel CPU-Zeit (Lloyd/Egbert: 40%), reduzieren die Objektzahl jedoch um 60-90% à insgesamt lohnenswert • Kombination mit LOD-Techniken für entfernte Objekte sinnvoll • Speedup von Faktor 2-5 für Stadtszenen und Landschaften erreichbar
Zusammenfassung 38 Beispiel ohne Occlusion Culling mit Occlusion Culling
Sie können auch lesen