Beschleunigungsmöglichkeiten beim Raytracing



Bei einer hohen Anzahl von Objekten kann es sehr lange dauern, bis alle Flächen von allen Objekten durch getestet wurden. Daher empfiehlt es sich einen einfachen „Vortest“ einzuführen, der ganze Objekte von der Berechnung ausschließen kann. Am einfachsten ist der Test mit der „Boundingsphere“ des Objekts (der umhüllenden Kugel). Das Objekt liegt vollständig in ihr drin und wird sie nicht vom Strahl getroffen, so kann das ganze Objekt aus der Schnittpunktberechnung entfernt werden. In manchen Fällen kann eine Boundingsphere ein recht großes Volumen haben, wohingegen die Tatsächliche Abbildung das Objekts auf dem Bild recht schmal ausfällt (z.B. bei einem langen Zylinder). Für solche Objekte empfiehlt sich ein anderes Testobjekt, wie die „Boundingbox“ (der umschließende Würfel) oder „Boundinghull“ (konvexe Hülle des Objekts).


Ein anderer Ansatz ist, die Objekte in einer speziellen Datenstruktur zu speichern mit der schnell entschieden werden kann, ob sie von einem Strahl getroffen werden können oder nicht. Eine solche Datenstruktur ist ein „Octaltree“. Jeder Knoten in diesem Baum beschreibt ein Würfelförmiges Raumstück der Szene. Die Wurzel enthält das Raumstück in dem alle Objekte der Szene liegen. Teilt man nun das Raumstück eines Knotens in acht gleichgroße, Würfelbereiche, so erhält man die Raumstücke der acht Kinder dieses Knoten.

Fügt man nun ein Objekt in die Szene ein, so testet man zunächst, ob es vollständig in den Wurzelknoten hineinpasst (dies sollte der Fall sein, denn die Wurzel ist so konstruiert, das ALLE Objekte hineingehen). Ist dies der Fall, testet man zunächst für alle Kinder, ob das Objekt vollständig hineinpassen würde. Scheitert dieser Test, so weist man dem aktuellen Knoten dieses Objekt zu. Passt das Objekt in eines der Kinder, macht man dieses zum aktuellen Knoten und prüft nun erneut, ob man das Objekt in die Kinder einfügen kann. Bei einem Scheitern weist man das Objekt diesem Knoten zu, bei Erfolg fährt man mit diesem Kind rekursiv fort, bis man entweder einen Knoten findet, dem man das Objekt zuweisen kann, oder bis man eine gewünschte maximale Tiefe erreicht hat.




Sind alle Objekte in einem solchen Baum eingefügt worden, braucht man nun nicht mehr für jeden Strahl alle in der Szene vorhandenen Objekte auf mögliche Schnitte prüfen. Es reicht zuerst zu schauen, ob der Strahl den Baum trifft. Ist dies nicht der Fall, kann er auch keine Objekte treffen, da alle in diesem Enthalten sind. Liegt jedoch ein Treffer vor, so muss nun geprüft werden, welche Kinder des eben getroffenen Knoten ebenfalls den Strahl schneiden.



Index

Raytracingverfahren

Raytracing