Gehen wir von folgender Szene aus (der Pfeil markiert die Blickrichtung, beide Quader sollen sich auf der gleichen Höhe befinden):

Der dem Betrachter näherstehende Quader besitzt den folgenden Umriss (dick eingezeichnet):

Aus diesem Umriss lässt sich nun das Shadow Frustum bilden:

Es ist zu sehen, dass sich der zweite Quader vollständig innerhalb des Frustums befindet. Er kann daher bedenkenlos ignoriert werden.

Damit haben wir nun die wichtigsten Techniken beisammen, um zu bestimmen, ob ein Objekt oder Dreieck sichtbar ist oder ignoriert werden kann. Noch eine Anmerkung zur ursprünglichen Leserfrage: die Frage war auch, ob bei sich bewegenden Objekten die Bewegungsinformation in die Verdeckungstests mit einbezogen werden kann, etwa, indem anhand der Bewegungsinformationen abgeleitet wird, dass sich ein Objekt längere Zeit hinter einem anderen befinden wird und daher für die nächsten Bilder gar nicht mehr berücksichtigt werden muss. Ich könnte mir vorstellen, dass es möglich wäre, diese Information zu erfassen und zu berücksichtigen; ich vermute aber, dass der Aufwand hierfür nicht im Verhältnis zum Geschwindigkeitsgewinn steht. Das Prüfen etwa, ob sich ein Objekt innerhalb eines Shadow Frustums befindet, ist relativ einfach machbar; der eigentlich teure Schritt ist die Erstellung des Frustums. Da dieses aber vermutlich ohnehin für jedes Bild berechnet werden muss, ist der Geschwindigkeitsgewinn hier einfach zu niedrig, als dass es sich lohnen würde.

Der nächste Artikel zu diesem Thema wird sich um ein ähnliches Thema drehen und sich mit der Frage beschäftigen, wie man mit Dreiecken umgeht, die sich (teilweise) verdecken, aber von denen nicht eins eindeutig aussortiert werden kann, so dass beide gezeichnet werden müssen. Außerdem wird das in diesem Artikel unterschlagene Thema der Transparenz eine Rolle spielen. Seid gespannt!

1 / 2 / 3 / 4

Kommentare (2)

  1. #1 camil7
    Oktober 20, 2012

    Danke für den ausführlichen Artikel und die Mühe der vielen Illustrationen, die alles sehr schön veranschaulichen!
    Seit ich das letzte Mal in die Thematik geschaut habe, hat sich doch einiges getan.
    Die Idee mit dem “Backface Culling” finde ich besonders elegant, weil einfach, aber effizient.
    Die “Level of Detail” methode konnte ich bei einigen älteren Animationen noch gut nachvollziehen, da haben sich die Objekte beim Annähern regelrecht “entfaltet”. Inzwischen ist das so weit entwickelt, dass der Effekt nicht mehr sichtbar ist.
    Die Links zu den PDFs funktionieren auch für mich (nur beim zweiten Artikel fehlen zwei Abbildungen, die vermutlich wegen der hohen Auflösung aus dem PDF entfernt wurden) – und ich kann voll verstehen, dass Du das nicht auch noch in einen Blog-artikel klemmen wolltest. Das gibt noch reichlich weiteren Lesestoff …
    Nochmals Danke!

  2. #2 McNeal
    Januar 20, 2013

    Hi Marcus,

    schoener Artikel! Gibt einen soliden Einblick und du hast dir auch viel Muehe gegeben mit den Illustratione, find ich gut! Zwar ein wenig veraltet, so auf dem Stand 2000 wuerd ich sagen, aber der ganze neue Kram sprengt eh den Rahmen eines Blogartikels.

    Nur ein paar kleine Anmerkungen:
    LOD ist so ziemlich das wichtigste Cullingverfahren, da es die Komplexitaetsklasse aendern kann. Idealerweise aendert sich der Aufwand von O(n) auf O(log n). Andere Cullingverfahren aendern nur eine Konstante, wenn ueberhaupt.
    Achja, und kam der Z-Buffer eigentlich schon vor?

    Occlussion-Culling hat sich, bis auf Portalrendering, uebrigens nie so grossflaechig durchgesetzt. Das war mehr ne nette Forschungsarbeit als es praxistaglich ist.

    Zu der Frage mit dem Occlusion-Culling von bewegten Objekten koennte man z.B. groessere Huellenkoerper verwenden. Bewegt sich das Objekt aus diesem erweiterten Huellenkoerper heraus, muss ein neuer Verdeckungstest durchgefuehrt werden, ebenfalls mit groesserem Huellenkoerper. Dasselbe kann man mit dem Shadow Frustum machen, nur in die andere Richtung, also das Frustum kleiner machen um den Test noch konservativer zu gestalten. Sozusagen ein lazy-update, falls es das Wort gibt 🙂 Das duerfte aber nur ganz speziellen Faellen lohnenswert sein.