Sichtbarkeitsverfahren für interaktive Bildraten
Inhalt:
Einleitung
Die Grafikhardware heutiger Workstations kann mittels Z-Buffer-Verfahren
mehrere zigtausend gouraudschattierte texturierte Polygone pro Frame bei
einer interaktiven Framerate von mindestens 10 Frames pro Sekunde
darstellen.
Typische Szenerien aus den Bereichen Architektur, Spiele, Flugsimulatoren
und ähnlichen enthalten aber oftmals mehrere hundertausend bis hundert
Millionen Polygone, was um Größenordnungen zu viel ist, um direkt ohne
zusätzliche Verarbeitung mit herkömmlichen Methoden (Z-Buffer) interaktiv
gerendert werden zu können.
Rund 50 % dieses Problems lassen sich durch die Verwendung von
Backface-Culling lösen (was üblicherweise auch getan wird), da dadurch schon
einmal ca. die Hälfte aller Polygone eliminiert wird. Weiters läßt sich bei
vielen Objekten die Anzahl der darzustellenden Polygone auch durch die
Verwendung von Levels of Detail verringern. Trotzdem werden in vielen Fällen
immer noch zu viele Polygone übrig bleiben, um interaktiv gerendert werden zu
können.
Inhalt dieses Vortrags sind Verfahren die das Sichtbarkeitsproblem wesentlich
effizienter lösen, indem sie die vom Betrachter aus unsichtbaren Teile der
Szenerie in Form von jeweils möglichst großen Bereichen auf einmal
ausscheiden, sodaß nur für die restlichen, zumindestens teilweise sichtbaren
Polygone die exakte Sichtbarkeit, meistens per herkömmlicher Grafikhardware,
ermittelt werden muß.
Klarerweise hängt die Effektivität all dieser Verfahren bezüglich der
erreichbaren Interaktivität vom Grad der Verdeckungen in der Szene ab. Bei
günstigen Szenerien wie z.B. in einem kleinen Raum in einem großen Haus ist
nur ein sehr geringer Teil der gesamten Polygone sichtbar. Ungünstig
hingegen sind z.B. große freie Plätze mit vielen kleinen Objekten, von denen
nur verhältnismäßig wenige vollständig verdeckt sind.
Ein wesentliches Unterscheidungsmerkmal zwischen den Verfahren ist, ob sie
sich für eine Anwendung in Echtzeit eignen bzw. speziell dafür konzipiert sind,
oder ob sie als zumeist rechenzeit- und speicherintensiver
Vorverarbeitungsschritt gedacht sind, sodaß danach in der interaktiven
Betrachtungsphase die Menge der teilweise sichtbaren Polygone (PVS,
potentially visible set) abrufbereit zur Verfügung steht. Einige der Verfahren
können in beiden Kategorien angewendet werden.
Die Vorverarbeitungs-Verfahren eignen sich aufgrund ihres Zeitaufwands für
statische Szenerien wie z.B. für Walkthroughs von Architektur-Modellen, sind
aber gänzlich ungeeignet für sich dynamisch ändernde komplexe Objekte, wie
z.B. bei der interaktiven Modellierung von Architektur-Modellen.
Bei den echtzeitmäßigen Verfahren ist es auch ein wichtiges Merkmal, wie weit
sie hardwaremäßig realisierbar sind, um eine möglichst hohe Geschwindigkeit
zu erreichen.
Portals
Die Familie der Portal-Verfahren zerteilt den Raum in konvexe Zellen. Einige
der Verfahren sind speziell auf Architektur-Modelle eingeschränkt und erlauben
nur achsparallele rechteckige Zellen (im zwei-dimensionalen Fall) bzw.
Quader-Zellen (im dreidimensionalen Fall). Die Verfahren, die sich für
beliebige polygonale Szenerien eignen, verwenden im zwei-dimensionalen Fall
Dreiecke und im drei-dimensionalen Fall Tetraeder.
Jede Seite einer Zelle ist entweder vollständig undurchsichtig oder enthält
einen durchsichtigen polygonalen Bereich (Portal) zu einer benachbarten Zelle.
Für jede Zelle ergibt sich die Menge der von ihr aus teilweise sichtbaren Zellen
und damit der in ihnen enthaltenen Objekte, indem von der Zelle aus geschaut
wird, durch welche Sequenzen von Portalen man durchsehen kann.
Grundsätzlich sind alle Portal-Verfahren vor allem für Szenerien geeiget, die
eine möglichst abgeschlossene zellenartige Topologie besitzen, sodaß alle
Sequenzen von Portalen möglichst kurz sind, also z.B. Räume und Gang- oder
Röhren-Systeme.
Fast alle hier im weiteren genannten Verfahren eignen sich zur Verwendung
als (speicher- und vor allem zeitintensiver) Vorverarbeitungsschritt, in dem für
jede Zelle der Szenerie die Menge der von ihr aus möglicherweise sichtbaren
Polygone (PVS, potentially visible set) ermittelt wird, sodaß dann während der
interaktiven Walkthroughphase nur mehr geschaut werden muß, in welcher
Zelle sich der Augpunkt befindet, und das PVS dieser Zelle dann abrufbereit zu
Verfügung steht und somit schnell gerendert werden kann.
Einige der Verfahren sind aber auch für eine echtzeitmäßige Anwendung
geeignet, wobei natürlich immer nur das PVS der aktuellen Augpunkt-Zelle
bestimmt werden muß.
Ein solches echtzeitfähiges Verfahren ist das 2 1/2 D-Verfahren in
[Schmalstieg, Tobler 97]. Hier wird der zwei-dimensionale Grundriß der
Szenerie in Dreiecke zerteilt. Jede Kante einer Zelle ist dabei vollständig
durchsichtig oder undurchsichtig (Wand). Beginnend mit der Zelle, in der sich
der Augpunkt befindet, wird das Blickfeld von den undurchsichtigen Kanten der
Zelle bzw. den ihnen entsprechenden Wänden entsprechend (teilweise)
verdeckt. In den noch unbedeckten Blickbereichen, die auf die durchsichtigen
Kanten der Zelle fallen (wo also keine Wände sind), wird rekursiv mit den an
den durchsichtigen Kanten angrenzenden Zellen weitergemacht (siehe Bild 1).
Bild 1: Triangulierung der Szene und Aufteilung des Blickfeldes an den Kanten
der rekursiv besuchten Zellen
Anstelle der bloßen Bestimmung des PVS und anschließendem Rendering per
Hardware-Z-Buffer kann man dieses Verfahren auch direkt zum rendern ohne
Z-Buffer verwenden, indem man den unverdeckten Teil einer Wand ausgibt
sobald man auf sie stößt. Die Erweiterung des Verfahren auf echte 3D unter
Verwendung von Tetraedern anstelle der Dreiecke erweist sich aufgrund des
Clippings an den dann beliebig polygonalen Blickfeldbereichen als
problematisch.
Ein weiteres Verfahren, welches die Sichtbarkeiten ausschließlich
echtzeitmäßig bestimmt und in beliebigen drei-dimensionalen Szenerien
funktioniert ist das in [Luebke, Georges 95]. Hierbei ergiebt jede Sequenz von
Portalen eine Cull Box. Solch eine Cull Box ist der Durchschnitt der Bildraum-
Bounding Rectangles der Portale. Ist der Durchschnitt leer, so existiert sicher
keine Sichtbarkeit durch die Portal-Sequenz.
Um festzustellen ob ein Objekt möglicherweise sichtbar ist, wird sein Bildraum-
Bounding Rectangle mit der Cull Box der Portal-Sequenz von der Augpunkt-
Zelle zur Zelle, in der sich das Objekt befindet, verglichen. Liegt das Bounding
Rectangle des Objekts außerhalb der Cull Box, so ist das Objekt sicher
vollständig verdeckt, ansonsten ist es möglicherweise sichtbar und wird
gerendert.
Da ein Objekt durch mehrere Portal-Sequenzen hindurch sichtbar sein kann,
wird es beim rendern als gerendert markiert, um nicht möglicherweise noch
einmal gerendert zu werden. Alternativ dazu kann das Objekt auch jeweils in
die Cull Box hineingeclippt werden.
Weitere Verbesserungen sind der Z-Buffer-Test, ob die Cull Box nicht durch
Objekte vollständig verdeckt ist, und die Erweiterung von Portalen auf Spiegel
in denen die Sichtbarkeit umgeleitet wird.
Ein als Vorverarbeitungsphase prädestiniertes Verfahren ist das in [Airey,
Rohlf, Brooks 90]. Hierbei wird das Problem der Bestimmung des PVS aller
Punkte der Zelle auf das Problem der Bestimmung der von den Portals der
Zelle aus sichtbaren Objekte vereinfacht, denn wenn ein Objekt von einem
Punkt der Zelle aus sichtbar ist, dann muß es auch von zumindestens einem
Punkt eines Portals der Zelle sichtbar sein. Dies ist dann das gleiche Problem
wie bei der Sichtbarkeitsbestimmung für Radiosity und wird in [Airey, Rohlf,
Brooks 90] mit Hilfe von Shadow-Volumes gelöst.
In [Teller 91] werden jeweils ausgehend von der Zelle, zu der das PVS gesucht
wird, mit einer rekursiven Tiefensuche die Portal-Sequenzen ermittelt, durch
die jeweils zumindestens eine Sichtbarkeitslinie existiert. Im zwei-
dimensionalen Fall besteht dabei ein Portal aus seinem linken und rechten
Endpunkt. Sind die Menge der linken Endpunkte und die Menge der rechten
Endpunkte einer Portal-Sequenz linear trennbar (siehe Bild 2), so existiert eine
Sichtbarkeitslinie durch diese Portal-Sequenz, und die durch sie erreichte Zelle
ist zumindest teilweise sichtbar.
Bild 2: Sichtbarkeitslinie durch linear trennbare Portal-Eckpunkte-Menge
Existiert durch eine Portal-Sequenz hindurch keine Sichtbarkeitslinie, so wird
der Rekursions-Zweig abgebrochen, da natürlich auch alle weiteren auf dieser
Portal-Sequenz aufbauenden Sequenzen keine Sichtbarkeitslinie haben.
Dieses Verfahren ist auch auf 3D erweiterbar, wobei die dann polygonalen
möglicherweise konkaven nicht achsparallelen Portale durch ihre
achsparallelen Boundig Boxen ersetzt werden. Die dadurch auftretende
Überschätzung kann durch die Zerlegung eines Portals in mehrere Teil-
Bounding Boxen verringert werden.
Quake
Ein praktisches Beispiel für die effiziente Nutzung von Sichtbarkeitsverfahren
ist das 3D-Spiel Quake [Abrash 96].
Der statische Teil der Szenerie besteht
dabei aus rund zehntausend großen Polygonen, die als Blätter in einem
(modifizierten) BSP-Baum gespeichert sind, viel zu viel also, um von einem PC,
noch dazu ohne Grafikhardware, interaktiv gerendert werden zu können. Daher
wird in einem äußerst zeitaufwendigen Vorverarbeitungsschritt für jedes BSP-
Blatt das PVS berechnet (selbst wieder ein BSP-Baum). Während des Spiels
wird dann das PVS der Zelle, in dem sich der Augpunkt befindet, mittels
Scannlining gerendert, wobei die BSP-Sichtbarkeitsreihenfolge als
Tiefen-Sortierkriterium verwendet wird.
Gleichzeitig wird dabei der Z-Buffer initialisiert, der danach verwendet wird, um
die dynamischen Objekte in der Szene mit korrekter Sichtbarkeit
dazuzurendern.
Occluders & Occludees
Dieses Verfahren [Coorg, Teller 96] basiert auf der Annahme, daß meistens
wenige konvexe Polygone (Occluders), die nahe beim Betrachter liegen, den
größten Teil des Bildes bedecken und somit den Großteil der restlichen
Objekte (Occludees) in der Szene verdecken.
Der Sichtbarkeitstest der Occludees an den Occludern erfolgt mit Hilfe von
Trenn- und Trägerflächen. Eine Trägerfläche wird von einem Punkt des
Occludees und einer Kante des Occluders aufgespannt wobei beide Objekte
auf der gleichen Seite der Trägerfläche liegen. Im Gegensatz dazu liegen bei
einer Trennfläche die beiden Objekte auf verschiedenen Seiten der
Trennfläche.
Hat man alle Trenn- und Trägerflächen zu einem Paar (Occluder,Occludee) so
teilen diese den Raum in drei Klassen:
- (1) Occludee ist nicht von Occluder verdeckt,
- (2) Occludee ist teilweise von Occluder verdeckt,
- (3) Occludee ist vollständig von Occluder verdeckt,
je nachdem ob der Augpunkt im Bereich zwischen den Trägerflächen (3), im
Bereich zwischen den Trennflächen (2) oder außerhalb (1) ist (siehe Bild 3).
Befindet sich der Augpunkt vor der Ebene des Occluder, so ist der Occludee
grundsätzlich nicht von diesem Occluder verdeckt.
Bild 3: Sichtbarkeitsklassifizierung mit Trenn- und Trägerflächen
Ein Occludee wird aber oft nur durch mehrere aneinandergrenzende Occluder
vollständig verdeckt (siehe Bild 4). Deshalb werden Occluder mit einer
vollständig gemeinsamen Kante wie ein einzelner Occluder gehandhabt, und
die Trenn- und Trägerflächen müssen nur für die Randkanten berechnet
werden.
Bild 4: Verdeckung durch aneinandergrenzende Occluder
Die Occluder werden bestimmt, indem die Polygone in der näheren Umgebung
des Augpunkts heuristisch auf ihre Größe im Bild geschätzt werden. Von
diesen Polygonen werden dann die k besten als Occluder genommen. k wird
bei [Coorg, Teller 96] fix auf 32 gesetzt.
Eben dieses fixe k ist aber der große Schwachpunkt dieses Verfahrens. Ist es
so klein wie in diesem Fall, so eignet sich das Verfahren nur für Szenen in
denen entsprechend wenige Polygone den größten Teil des Blickfeldes
bedecken. Ist es wesentlich größer, um auch Szenen mit sehr vielen kleinen
sichtbaren Polygonen handhaben zu können, wird es im Normalfall mit nicht
ganz so vielen sichtbaren Polygonen ineffizient. Eine Verfahren zur
automatischen Bestimmung von k ist demnach notwendig.
Das Verfahren ist zwar nicht für eine Hardware-Implementierung prädestiniert,
läßt sich aber parallelisieren, indem die Sichtbarkeitstests der Occludees an
die Prozessoren verteilt werden.
Regular Subdivision
Bei diesem Verfahren [Yagel, Ray 96] wird der Raum in ein Raster von Zellen
unterteilt (siehe Bild 5). Jede Zelle ist entweder leer, voll oder beinhaltet eine
Oberfläche. In der Vorverarbeitungsphase wird zu jeder Zelle die Liste aller von
ihr aus möglicherweise sichtbaren Zellen mit Oberflächen ermittelt. Während
der Walkthroughphase müssen dann numehr die Oberflächen, die in den
Zellen enthalten sind, die von der Zelle in der sich der Augpunkt befindet aus
möglicherweise sichtbar sind, gerendert werden.
Bild 5: Rasterisierung und Klassifikation des Raums
Die Bestimmung der möglichen Sichtbarkeit zwischen zwei Zellen erfolgt,
indem getestet wird, ob zwischen den beiden Zellen ein 8-verbundener Pfad
existiert, der nur über nicht volle Zellen verläuft, die sich mit dem Korridor der
beiden Zellen schneiden. Der Korridor ist die konvexe Hülle, die durch die
Eckpunkte der beiden Zellen aufgespannt wird. Die Zellen, die sich mit dem
Korridor schneiden, lassen sich leicht bestimmen, denn sie sind eine
Teilmenge der drei Zellen breiten Bresenham-Linie zwischen den beiden
Zellen (siehe Bild 6).
Bild 6: Korridor, Bresenham-Linie und Zellen entlang denen ein
Sichtbarkeitspfad verlaufen kann
Die Größe der Zellen sollte weder zu groß noch zu klein sein. Ist sie zu groß,
so wird die Menge der sichtbaren Zellen stark überschätzt. Ist die Größe zu
klein, wird die Anzahl der Zellen und Sichtbarkeitstests und der Speicherbedarf
zu groß, und der Unterschied in den Sichtbarkeiten zweier benachbarter Zellen
wird sehr gering.
Dieses Problem läßt sich aber beheben, indem die Raumunterteilung nicht mit
einer fixen Zellgröße, sondern Quadtree-/Octree-mäßig oder per Region
Growing erfolgt, wobei die Sichtbarkeitslisten von Zellen mit einer gewissen
Ähnlichkeit zusammengefaßt werden, um Speicherplatz zu sparen und somit
eine höhere Auflösung bzw. wesentlich größere Szenerien ermöglicht werden.
Eine weitere Möglichkeit zur Speicherverbrauchsreduzierung besteht darin, nur
die Differenzen der Sichtbarkeitslisten benachbarter Zellen zu speichern.
Bis hierher war das Verfahren ja noch äußerst zwei-dimensional. Ein drei-
dimensionales Verfahren funktioniert analog dazu mit Voxeln anstelle der
Zellen. Dies dürfte sich allerdings als ziemlich speicheraufwendig erweisen.
Die Walkthroughphase läßt sich beschleunigen, indem die Sichtbarkeitslisten
jeweils in räumliche Oktanten unterteilt werden. Dies ermöglicht dann das
Clippen mit dem Viewing-Frustum und somit das Weglassen der Objekte in den
unsichtbaren Oktanten-Listen. Weiters ergibt die vorliegende Raumunterteilung
eine einfache front to back-order für Depth Culling und weitere Rendering-
Optimierungen.
Laut [Yagel, Ray 96] ist das Sichtbarkeitsverfahren schnell genug, um nicht nur
als Vorverarbeitungsphase sondern auch echtzeitmäßig verwendet werden zu
können.
Hierarchischer Z-Buffer
Das hierachische Z-Buffer-Verfahren [Green, Kass, Miller 93] erweitert das
herkömmliche Z-Buffer-Verfahren dadurch, daß eine Pyramide von Z-Buffern
verwendet wird. Jede Ebene der Pyramide entspricht dabei dem gesamten Bild
und hat in beiden Dimensionen die halbe Auflösung der darunter liegenden
Ebene. Jeder der Z-Werte einer Ebene entspricht dabei dem entferntesten der
vier von ihm bedeckten Z-Werte der darunter liegenden Ebene. Die unterste
Ebene der Pyramide hat die Auflösung des Bildes, die oberste Ebene besteht
aus einem einzelnen Z-Wert, der somit die größte sichtbare Entfernung im Bild
darstellt.
Um nun ein Polygon darzustellen, wird sein vorderster Z-Wert beginnend mit
dem Z-Wert der obersten Z-Buffer-Ebene verglichen. Ist der vorderste Z-Wert
des Polygons kleiner, so wird das Polygon rekursiv mit den von ihm bedeckten
darunter liegenden Quadranten der nächsten Ebene verglichen, wobei
entweder für jeden Quadranten der entsprechende vorderste Z-Wert des
Polygons berechnet wird, oder einfach immer der vorderste Z-Wert des
gesamten Polygons verwendet wird (außer auf der untersten Ebene, um die
pixelgenaue Sichtbarkeit feststellen zu können).
An den Stellen, wo das Polygon dann bis vor die entsprechenden Z-Werten der
untersten Ebene reicht, wird es im Bild ausgegeben. Alternativ kann man den
hierarchischen Vergleich auch nur dazu verwenden um festzustellen, ob das
gesamte Polygon vollständig verdeckt ist, und falls nicht, wird es auf
herkömmliche Art pixelweise gescannt (per Hardware).
Durch diese hierarchische Scan-Konversion werden verdeckte Polygonteile
schon mit wenigen Z-Vergleichen großflächig als verdeckt erkannt und müssen
nicht erst Pixel für Pixel verglichen werden, das Verfahren nützt somit die
Bildraum-Kohärenz.
Um auch die Objektraum-Kohärenz auszunützen, kann man den hierarchischen
Sichtbarkeitstest auch auf Bounding Volumes anwenden. Ist das gesamte
Bounding Volume vollständig verdeckt, so sind es auch alle in ihm enthaltenen
Objekte. Ist das Bounding Volume zumindestens teilweise sichtbar, so werden
rekursiv die in ihm enthaltenen Objekte auf Sichtbarkeit getestet. Durch diese
Methode können große verdeckte Teile der Szenerie auf einmal eliminiert
werden. [Green, Kass, Miller 93] verwenden hierzu eine Octree-Raumteilung
der Szene als Bounding Volume-Hierarchie.
Des weiteren läßt sich auch noch die zeitliche Kohärenz zweier
aufeinanderfolgender Bilder ausnützen, indem in jedem Bild alle sichtbaren
Objekte in einer Liste vermerkt werden und beim darauf folgenden Bild ohne
hierarchischen Test zu allererst gescannt werden und dabei die Z-Buffer-
Pyramide initialisieren. Dies funktioniert effizient unter der Annahme, daß diese
Objekte mit großer Wahrscheinlichkeit noch immer sichtbar sind und den
größten Teil des neuen Bildes bedecken und somit den nachfolgenden Rest
der Szene verdecken.
Die hierarchische Scan-Konversion ist außerdem auch noch hervorragend
geeignet, um in Hardware implementiert zu werden und läßt sich auch gut
parallelisieren, indem jeder Prozessor einen Teil des Bildes unabhängig von
den anderen Bildteilen und Prozessoren bearbeitet.
Literaturverzeichnis
[Abrash 96]
- M. Abrash
- Inside Quake: Visible Surface Determination
- (1996)
[Airey, Rohlf, Brooks 90]
- J. M. Airey, J. H. Rohlf, F. P. Brooks Jr.
- Towards Image Realism with Interactive Update Rates in Complex Virtual Building Environments
- ACM SIGGRAPH Computer Graphics, Vol. 24, No. 2, pp. 41-50 (1990)
[Coorg, Teller 96]
- S. Coorg, S. Teller
- A Spatially and Temporally Coherent Object Space Visibility Algorithm
- MIT Tech. Report TM-546 (1996)
[Green, Kass, Miller 93]
- N. Greene, M. Kass, G. Miller
- Hierarchical Z-Buffer Visibility
- ACM SIGGRAPH Computer Graphics Proceedings, pp. 231-238 (1993)
[Luebke, Georges 95]
- D. Luebke, C. Georges
- Portals and Mirrors: Simple, Fast Evaluation of Potentially Visible Sets
- ACM SIGGRAPH Symposium on Interactive 3D Graphics, pp. 105-106 (1995)
[Schmalstieg, Tobler 97]
- D. Schmalstieg, R. F. Tobler
- Exploiting coherence in 2 1/2 D visibility computation
- to appear in: Computers & Graphics (1997)
[Teller 91]
- S. J. Teller
- Visibility Preprocessing for interactive Walkthroughs
- ACM SIGGRAPH Computer Graphics, Vol. 25, No. 4, pp. 61-69 (1991)
[Yagel, Ray 96]
- R. Yagel, W. Ray
- Visibility Computation for Efficient Walkthrough of Complex Environments
- Presence, Vol. 5, No. 1, pp. 45-60 (1996)
Zurück zur Virtual Reality Seminar Page.