Implementieren des Eines Raytracers

Hier beim Raytracing Blog wird viel über mathematische Konzepte hinter dem Raytracing Verfahren geredet. Heute geht es allerdings um die Praxis: Die Implementierung.

Zuerst sollte man einen Moment Zeit nehmen, um sich zu versichern, dass die Ausbreitung von Licht in der Natur nur durch eine unzählige Anzahl von Lichtquellen zustande kommt, welche Licht geradeaus fortbewegen bis sie ein Objekt oder die Oberfläche unseres Auges getroffen haben. Im Fall der Kollision eines Objektes kann der Strahl mit anderer Richtung und Eigenschaften weitergehen und womöglich trotzdem noch das Auge erreichen.

Raytracing ist daher nicht nur ein Algorithmus, sondern ein physikalischer Prozess der sich konstant um uns herum abspielt. Der einzige unterschied ist, dass beim Raytracing Algorithmus die strahlen rückwärts vom Auge aus verfolgt werden.

Der Ray-Tracing-Algorithmus nimmt ein Bild aus Pixeln. Für jedes Pixel in dem Bild, schießt sie einen primären Strahl in der Szene. Die Richtung dieses Primärstrahls wird durch das Verfolgen einer Linie von dem Auge zum Zentrum von diesem Pixel erhalten.

Sobald Richtung und Anfangsposition des Strahls festgelegt sind, wird für jedes Objekt in der Szene überprüft, ob es sich mit diesem Strahl irgendwo schneidet. In einigen Fällen wird der Primärstrahl mehr als ein Objekt schneiden. Wenn das passiert, wählen wir das Objekt, dessen Schnittpunkt am nächsten zum Auge ist.

Wir schießen dann ein Schattenstrahl vom Schnittpunkt zum Licht. Wenn dieser besondere Strahl kein Objekt auf dem Weg zum Licht schneidet, wird der Treffpunkt beleuchtet. Wenn er sich mit einem anderen Objekt schneidet, kommt es zu einem Schatten.

Wird diese Vorgehensweise für jeden Pixel im Bild wiederholt, so entsteht eine zweidimensionale Darstellung einer dreidimensionalen Szene.

Implementieren des Eines Raytracers

Sphere-Tracing

Das Sphere-Tracing oder Kugeltracing ist eine relativ neue Technik für die Darstellung von impliziten Flächen, und hat diverse geometrische Anwendungsgebiete.

Sphere Tracing baut auf das sogenannte Ray-Marching auf bei dem „Märsche“ sich entlang des Strahls in Sichtrichtung in kleinen Schritten vorwärts bewegen bis irgendwann ein Objekt getroffen wird. Wenn die Schritte hierbei zu groß gewählt werden, kommt es zu einem ungenauen Bild, da die Oberfläche des Objekts innerhalb einem Schritt weit durchdrungen wird. Wenn sie zu klein gewählt werden, steigt die Laufzeit des Algorithmus rasant an.

Das Sphere-Tracinggarantiert die implizite Oberfläche nicht zu durchdringen, indem für jeden Schritt die Schrittweite adaptiv als die Distanz des nächsten Objektpunktes gewählt wird. Dieser liegt natürlich nicht unbedingt in Stahlrichtung, in welchem Fall die Kreuzing von Strahl und Objekt sofort bestimmt wären. Die Distanz ist aber nie größer als der nächste Punkt in Stahlrichtung. Somit ist die Korrektheit des Algorithmus garantiert.

Es ist besonders geschickt im Rendering von pathologischen Oberflächen. Zerknitterte und grobe impliziten Oberflächen werden durch Funktionen mit diskontinuierlichen oder nicht definite Ableitungen definiert.

Wer mehr wissen will, sollte sich auf jeden Fall das ganze Paper (englisch) durchlesen.

Sphere-Tracing

Warum überhaupt Raytracing

Was ist denn überhaupt der Unterschied zwischen Raytracing und Rasterisierung
und warum ist Raytracing so langsam, warum ist es genauer? Sind nicht die Lichtberechnungen die gleichen, mit Ausnahme von Spiegelungen? Warum sollte Ich mich überhaupt für Raytracing interessieren?

Die Lichtberechnungen mögen zwar gleich sein, aber die Strahlverfolgung ist flexibel in einer Weise, die bei der Rasterisierung nicht der Fall ist.

Diese Inflexibilität ist nicht unbedingt ein wesentlicher Aspekt der Rasterung, aber Rasterung ist schnell aufgrund jahrzehntelanger Hardware-Entwicklung zur Beschleunigung gewidmet. Kurz gesagt, Rasterisierung ist schnell, aber nicht wirklich korrekt. Es werden wichtige Lichtberechnungen einfach weggelassen.

Ray-Tracing hat keine vergleichbare hardwarebasierte Beschleunigungsnfrastruktur zum bewältigen von komplexe Szenen und hohen auflößungen. Daher ist der Raytracing Prozess normalerweise deutlich langsamer.

Er ist allerding deutlich näher an der Realität und deshalp bis heute noch notwending für das Erzeugen von fotorealistischen Bildern.Zu dem ist das Raytracing aus mathematischer sicht deutlich interessanter, da sich diverse Teilprobleme durchaus analytisch lösen lassen.

Raytracing ist also der Stand der Technik was Bildqualität angeht und kann uns einiges über Geometrie und lineare Algebra zeigen.

Warum überhaupt Raytracing