Home | Lehre | Videos | Texte | Vorträge | Software | Person | Impressum, Datenschutzerklärung | Blog
Level of Detail. Occlusion Culling
-
Nachtrag zum vergangenen Mal
-
Bildfehler bei Shadow-Maps in Cinema 4D und Maya
-
Shadow-Volume-Demo
-
Level of Detail (LoD)
-
Idee zur Optimierung des Renderns: Wenn Objekte nicht so groß erscheinen
(klein in der Szene oder weit entfernt), kann man sie ungenauer rendern
(d.h. mit weniger Polygonen) und damit Zeit sparen. Das Niveau an Genauigkeit
(level of detail) der Darstellung soll zur aktuellen Verwendung passen.
-
Ausführung
-
erste Variante: Objekte mit dynamischer Auflösung: z.B. Zahl der Scheiben/Schichten
einer Kugel, Zahl der Unterteilungen eines Subdivision Surfaces. Demos
mit Cinema 4D: Animation der Auflösung, Skriptsteuerung der Auflösung.
-
zweite Variante: Aus bestehenden Objekten grobe Versionen berechnen (Polygonreduktion,
auch eingesetzt, um detaillierte Figuren spieletauglich zu machen).
-
Polygonreduktion im Speziellen
-
Typisches Verfahren: Beseitige zwei Dreiecke durch Zusammenziehen einer
Kante (edge collapse). Wiederhole das so häufig wie nötig. Starte
mit den Dreiecken, bei denen das am wenigsten auffällt. Sortiere die
Kanten deshalb zunächst nach einem entsprechenden Kriterium (ähnliche
Normalen wie die Nachbarn, kleine Fläche u.ä.).
-
In Managed DirectX als SimplificationMesh eingebaut: Demo
-
Polygonreduktion mit Cinema4D und Maya; Malen der "Wichtigkeit" in Maya
5.0
-
Problem beim Umschalten von LoD: Änderung von Form und Schattierung
fällt als "Popping" auf.
-
Culling (pflücken, aussuchen; Tiere töten, weil ihre Zahl
zu groß ist oder weil sie krank oder zur Zucht ungeeignet sind)
-
Weitere Idee zur Optimierung des Renderns: Ignoriere beim Rendern, was
sowieso nicht (oder nur kaum) sichtbar ist.
-
Backface Culling: Rückseiten weglassen; problematisch bei offenen
Körpern
-
View Frustum Culling: weglassen, was nicht in den Sichtpyramidenstumpf
(view frustum oder seltener auch view frustrum) ragt; ggf. Probleme
mit Schatten und Reflexionen von außerhalb
-
Occlusion Culling: weglassen, was hinter anderen Objekten verborgen
(occluded) ist
-
möglichst schnelle und damit nur grobe Tests; im Zweifelsfall lieber
rendern
-
Tests lieferen damit nur eine potenziell sichtbare Menge (potentially
visible set, PVS) an Polygonen bzw. Objekten; diese wird gerendert
-
Test zum Beispiel mit Bounding Boxes u.ä. Auch von Grafikkarten unterstützt:
Rendere Szene möglichst von nah nach fern. Für jedes Objekt rendere
die Bounding Box ohne Ausgabe, sondern zähle nur, wie viele Pixel
angefasst worden wären (occlusion query). Demo. Managed DirectX: Query.GetOcclusionData
ist derzeit defekt.
-
Andere Verfahren: Szene in Baumstruktur einsortieren (z.B. BSP Tree, Quadtree,
Octree), um schnell feststellen zu können, was wohinter liegt
-
zwei Videos von der Siggraph 2000