Kameraclipping


Viewfrustum Culling

Angenommen unsere Szene, die wir rendern wollen, besteht aus einer Vielzahl von Objekten, welche wiederum aus einer Vielzahl von Dreiecken bestehen. Der einfachste Ansatz wäre nun einfach alle Dreiecke unserem HSE – Algorithmus zu übergeben. Wenn unsere Szenen aber aus 1000 Objekten und mehr besteht, von denen aber z.B nur 5 gerade zu sehen sind, ist dieser einfach ineffizient.

Wir müssen also feststellen, welche Objekte überhaupt niemals von der Kamera gesehen werden. Wir stellen hier nun das Viewfrustum Culling vor bzw. einen ersten Basisschritt, den man im Anschluss noch verfeinern könnte. Dazu benötigen wir einerseits die Bounding Spehre von der aktuellen Kamera, also die des Frustums, sowie alle Bounding Spheres der Objekte. Da das Viewfrustum eine Pyramide ist, kann man die Bounding Spehre sehr einfach berechnen. Der Mittelpunkt ist genau die Hälfte vom Abstand zwischen Near- und Farplane, der Radius ist der Abstand vom diesem Mittelpunkt zu irgendeinem Eckpunkt der Farplane. Nun können wir den Schnittest durchführen, welcher sogar sehr schnell berechenbar ist, wenn man einfach die quadratischen Abstände der Vektoren vergleicht. Alleine schon mit diesem einfachen Test kann man eine Vielzahl von Objekten schon mal entfernen, welche überhaupt nicht sichtbar sind.

Natürlich kann man, wie oben schon erwähnt, den Sichtbarkeitstest verfeinern. Angenommen unsere Szene wäre in einem Octree gespeichert. Als erstes würde man nun überprüfen, welche Bereiche das Viewfrustum der Kamera im Octree schneidet und diese Objekte daraus entnehmen. Anschließen führt man nun den Bounding Sphere Test durch. Will man nun noch weiter verfeinern, so kann man die Bounding Box vom Objekt mit dem Viewfrustum der Kamera schneiden.

Zum Abschluss ist allerdings noch zu sagen, dass eine beliebige Verfeinerung irgendwann auch wieder zum Flaschenhals werden kann, und genau das Gegenteil bewirkt, was wir eigentlich wollen: den Speedup beim Rendern. Das liegt einfach daran, dass die ganzen Schnittest natürlich auch Rechenzeit kosten und es manchmal sinnvoller ist, bestimmte Dreiecke auf den Bildschirm zu projizieren und dann dort einfach zu clippen.

Index

Z - Buffer Algorithmus