Occlusion Culling Martin Fiedler - Seminar Computergrafik - TU Chemnitz

Die Seite wird erstellt Paul-Luca Bock
 
WEITER LESEN
Occlusion Culling Martin Fiedler - Seminar Computergrafik - TU Chemnitz
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