Raytracing (dt. StrahlverfolgungHans-Joachim Bungartz u. a.: Einführung in die Computergraphik: Grundlagen, geometrische Modellierung, Algorithmen, S. 135. Vieweg, Braunschweig 2002, ISBN 3-528-16769-6 oder Strahlenverfolgung,Beat Brüderlin, Andreas Meier: Computergrafik und Geometrisches Modellieren, S. 154. Teubner, Stuttgart 2001, ISBN 3-519-02948-0 in englischer Schreibweise meist ray tracing) ist ein auf der Aussendung von Strahlen basierender Algorithmus zur Verdeckungsberechnung, also zur Ermittlung der Sichtbarkeit von dreidimensionalen Objekten von einem bestimmten Punkt im Raum aus. Ebenfalls mit Raytracing bezeichnet man mehrere Erweiterungen dieses grundlegenden Verfahrens, die den weiteren Weg von Strahlen nach dem Auftreffen auf Oberflächen berechnen.

Verwendung findet Raytracing in der 3D-Computergrafik. Hier ist der grundlegende Raytracing-Algorithmus eine Möglichkeit zur Darstellung einer 3D-Szene. Erweiterungen, die den Weg von Lichtstrahlen durch die Szene simulieren, dienen, ebenso wie das Radiosity-Verfahren, der Berechnung der Lichtverteilung.

Weitere Anwendungsgebiete von Raytracing sind die Auralisation, Seismik und Hochfrequenztechnik.

mini|hochkant=1.5|Mit Raytracing berechnetes Bild

Ursprung und Bedeutung mini|Mit Raytracing können fotorealistische Bilder erzeugt werden

Vor der Entwicklung von Raytracing bestand das junge Gebiet der 3D-Computergrafik im Wesentlichen aus einer Reihe von „Programmiertricks“, mit denen die Schattierung von beleuchteten Objekten nachgeahmt werden sollte. Raytracing war der erste Algorithmus auf diesem Gebiet, der einen gewissen physikalischen Sinn ergab.

Das erste mit Raytracing berechnete Bild wurde 1963 an der University of Maryland auf einem oszilloskopartigen Bildschirm ausgegeben.Terrence Masson: CG 101: A Computer Graphics Industry Reference. S. 267. Digital Fauxtography 2007, ISBN 0-9778710-0-2 Als Entwickler des Raytracing-Algorithmus gelten oft Arthur Appel, Robert Goldstein und Roger Nagel, die den Algorithmus Ende der 1960er Jahre veröffentlichten.Arthur Appel: Some Techniques for Shading Machine Renderings of Solids. In Proceedings of the Spring Joint Computer Conference 1968. S. 37–45. AFIPS Press, ArlingtonMathematical Applications Group, Inc.: 3-D Simulated Graphics Offered by Service Bureau. Datamation 13, 1 (Feb. 1968): 69, Robert Goldstein, Roger Nagel: 3-D Visual Simulation. Simulation 16, 1 (Jan. 1971): 25–31, Weitere Forscher, die sich zu dieser Zeit mit Raytracing-Techniken beschäftigten, waren Herb Steinberg, Marty Cohen und Eugene Troubetskoy.Terrence Masson: CG 101: A Computer Graphics Industry Reference. In: Digital Fauxtography, 2007, ISBN 0-9778710-0-2, S. 162. Raytracing basiert auf der geometrischen Optik, bei der das Licht als eine Gruppe von Strahlen verstanden wird. Die beim Raytracing verwendeten Techniken wurden bereits wesentlich früher, unter anderem von Herstellern optischer Systeme, verwendet. Heute verwenden viele Renderer (Computerprogramme zur Erzeugung von Bildern aus einer 3D-Szene) Raytracing, eventuell in Kombination mit weiteren Verfahren.

Einfache Formen des Raytracings berechnen nur die direkte Beleuchtung, also das direkt von den Lichtquellen eintreffende Licht. Raytracing wurde seit seiner ersten Verwendung in der Computergrafik jedoch mehrmals wesentlich erweitert. Weiterentwickelte Formen berücksichtigen auch das indirekte Licht, das von anderen Objekten reflektiert wird; man spricht dann von einem globalen Beleuchtungsverfahren.

Der Begriff Raycasting bezeichnet meist eine vereinfachte Form des Raytracings, wird teilweise aber auch synonym dazu gebraucht.

Grundprinzip Die Erzeugung eines Rasterbildes aus einer 3D-Szene wird Rendern oder Bildsynthese genannt. Voraus geht die Erstellung einer solchen Szene vom Benutzer mit Hilfe eines 3D-Modellierungswerkzeugs.

In der Szenenbeschreibung werden zumindest folgende Daten angegeben:

die Position der elementaren Primitive, wie Polygone oder Kugeln, aus denen sich die Objekte der Szene zusammensetzen; die lokalen Beleuchtungsmodelle und deren Parameter, die die Farben und Materialien der einzelnen Objekte der Szene bestimmen; die Lichtquellen der Szene.

Daneben wird beim Raytracing auch die Position eines Augpunktes sowie einer Bildebene angegeben, die zusammen die Perspektive angeben, aus der die Szene betrachtet wird. Der Augpunkt ist ein Punkt im Raum, der der Position einer virtuellen Kamera oder eines allgemeinen Beobachters entspricht. Die Bildebene ist ein virtuelles Rechteck, das sich in einiger Entfernung zum Augpunkt befindet. Sie ist die dreidimensionale Entsprechung des zu rendernden Rasterbildes im Raum. Rasterförmig verteilte Punkte auf der Bildebene entsprechen den Pixeln des zu erzeugenden Rasterbildes.

Kameramodell und Schärfentiefe Im Raytracer kann das Kameramodell um eine endliche Blende erweitert werden: Anstelle eines idealen primären Strahls pro Pixel wird ein Satz von Strahlen verwendet, die durch verschiedene Punkte einer virtuellen Linse verlaufen, sodass Objekte außerhalb der gewählten Fokusebene eine gezielte Unschärfe erhalten. In praktischen Systemen zur Produktvisualisierung kann die Schärfentiefe zusammen mit der vollständigen Steuerung der virtuellen Kamera und der Anpassung der Perspektive festgelegt werden, das heißt Teil des Aufnahme-Modells selbst sein und nicht nur eine nachträgliche Bildbearbeitung.

Im weit verbreiteten Dünnlinsenmodell wird der Unschärfegrad vor allem durch den Abstand zur Fokusebene und die Größe der Blende bestimmt: eine Änderung dieser Parameter verändert den Bereich der Tiefen, der als scharf wahrgenommen wird. Eine praktische Berechnungsmethode besteht darin, für jedes Pixel mehrere leicht verschobene Strahlen auszusenden und deren Ergebnisse zu mitteln; die Erhöhung der Anzahl solcher Abtastungen macht die Unschärfe glatter, erhöht jedoch die Rechenzeit.

Die Geometrie der virtuellen Blendenöffnung kann durch die Anzahl der Lamellen und deren Krümmung definiert werden: Bei null Lamellen entspricht die Öffnung einer kreisförmigen Blende, und mit zunehmender Krümmung polygonaler Lamellen nähert sich die Öffnung einem Kreis an. Beim interaktiven Raytracing kann der Effekt über die Zeit akkumuliert werden, indem in aufeinanderfolgenden Frames zufällige Startpunkte der Strahlen auf der Dünnlinse gewählt und die erhaltenen Abtastungen aufsummiert werden; dies ergibt eine dynamische Schärfentiefe ohne festen Satz von Strahlen in einem Frame. Die Unterstützung dieses Effekts hängt auch vom Projektionstyp ab: einige Raytracing-Renderer wenden die fokale Unschärfe nur für die perspektivische Kamera an und deaktivieren sie bei Parallelprojektion.

Verdeckungsberechnung miniatur|hochkant=2|Das Raytracing-Prinzip: Vom Augpunkt aus wird ein Strahl durch einen Pixel der Bildebene gesendet und auf den nächsten Schnittpunkt mit der Szene getestet. Der Pixel wird entsprechend eingefärbt. miniatur|Eine dem Raytracing ähnliche Technik wird zum Zeichnen einer Laute angewandt (Holzschnitt von Albrecht Dürer, 1525)

Raytracing ist in erster Linie ein Verfahren zur Verdeckungsberechnung, also zur Ermittlung der Sichtbarkeit von Objekten ab dem Augpunkt. Das Grundprinzip ist recht einfach.

Raytracing arbeitet mit einer Datenstruktur, Strahl genannt, die den Anfangspunkt und die Richtung einer Halbgeraden im Raum angibt. Es wird für jedes Pixel die Richtung des Strahls berechnet, der vom Augpunkt aus zum entsprechenden Pixel der Bildebene weist. Für jedes Primitiv der Szene wird nun mittels geometrischer Verfahren der eventuelle Schnittpunkt, bei dem der Strahl auf das Primitiv trifft, ermittelt. Dabei wird gegebenenfalls die Entfernung vom Augpunkt zum Schnittpunkt berechnet. Der „Gewinner“, also das vom Augpunkt aus sichtbare Primitiv, ist dasjenige mit der geringsten Distanz.

Das Prinzip der Aussendung der Strahlen vom Augpunkt aus ähnelt dem Aufbau einer Lochkamera, bei der ein Objekt auf einem Film abgebildet wird. Beim Raytracing sind allerdings „Film“ (Bildebene) und „Loch“ (Augpunkt) vertauscht. Ähnlich wie bei der Lochkamera bestimmt der Abstand zwischen Bildebene und Augpunkt die „Brennweite“ und damit das Sichtfeld.

Da die Strahlen nicht wie in der Natur von den Lichtquellen, sondern vom Augpunkt ausgehen, spricht man auch von Backward Ray Tracing. Raytracing beschäftigt sich mit der Frage, woher das Licht kommt. Einige Veröffentlichungen nennen das Verfahren allerdings Forward Ray Tracing oder Eye Ray Tracing.

Schnittpunkttests Der oben erwähnte Test auf einen eventuellen Schnittpunkt von Strahl und Primitive ist das Herzstück des Raytracings. Solche Tests lassen sich für eine Vielzahl von Primitiventypen formulieren. Neben Dreiecken und Kugeln sind unter anderem Zylinder, Quadriken, Punktwolken oder gar Fraktale möglich.

Bei Kugeln ist der Schnittpunkttest eine relativ kurze und einfache Prozedur, was die Popularität dieser Objekte auf Raytracing-Testbildern erklärt. Viele Renderprogramme lassen jedoch aus Gründen der Einfachheit nur Dreiecke als Primitiven zu, aus denen sich jedes beliebige Objekt näherungsweise zusammensetzen lässt.

Seit Kurzem werden auch komplexere Geometrien für den Schnittpunkttest wie etwa NURBS verwendet.Oliver Abert u. a.: Direct and Fast Ray Tracing of NURBS Surfaces. In Proceedings of IEEE Symposium on Interactive Ray Tracing 2006. S. 161–168. IEEE, Salt Lake City 2006, ISBN 1-4244-0693-5. () In: uni-koblenz.de Vorteilhaft dabei ist ein Maximum an Präzision, da die Fläche nicht wie sonst üblich in Dreiecke unterteilt wird. Der Nachteil ist eine erhöhte Renderzeit, da der Schnittpunkttest mit komplexen Freiformflächen sehr viel aufwändiger als mit einfachen Dreiecken ist. Eine hinreichende Annäherung an die Genauigkeit von NURBS ist zwar auch mit Dreiecken möglich, in diesem Fall muss aber eine sehr große Anzahl gewählt werden.

Shading Bei der Ermittlung des nächsten Primitivs wird nicht nur der Schnittpunkt und seine Distanz zum Augpunkt, sondern auch die Normale des Primitivs am Schnittpunkt berechnet. Damit sind alle Informationen vorhanden, um die zum Augpunkt reflektierte „Lichtstärke“ und somit die Farbe zu ermitteln. Dabei werden auch die Beschreibungen der Lichtquellen der Szene genutzt. Den Berechnungen liegen lokale Beleuchtungsmodelle zugrunde, die die Materialbeschaffenheit eines Objekts simulieren. Diesen Teil des Renderers, der für die Ermittlung der Farbe zuständig ist, nennt man Shader.

Beispielcode Die Programmierung eines einfachen Raytracers erfordert wenig Aufwand. In Pseudocode lässt sich das Prinzip folgendermaßen darstellen:

Prozedur Bild_Rendern Strahl.Ursprung := Augpunkt Für jedes (x,y)-Pixel der Rastergrafik Strahl.Richtung := [3D-Koordinaten des Pixels der Bildebene] − Augpunkt Farbe des (x,y)-Pixels := Farbe_aus_Richtung(Strahl)

Funktion Farbe_aus_Richtung(Strahl) Schnittpunkt := Nächster_Schnittpunkt(Strahl) Wenn Schnittpunkt.Gewinner = (kein) dann Farbe_aus_Richtung := Hintergrundfarbe sonst Farbe_aus_Richtung := Farbe_am_Schnittpunkt(Strahl, Schnittpunkt)

Funktion Nächster_Schnittpunkt(Strahl) MaxDistanz := ∞ Schnittpunkt.Gewinner := (kein) Für jedes Primitiv der Szene Schnittpunkt.Distanz := Teste_Primitiv(Primitiv, Strahl) Wenn Schnittpunkt.Distanz < MaxDistanz dann MaxDistanz := Schnittpunkt.Distanz Schnittpunkt.Gewinner := Primitiv Nächster_Schnittpunkt := Schnittpunkt

Jeder Raytracer, unabhängig von der verwendeten Raytracing-Variante, folgt einer ähnlichen Struktur, die noch einen Schnittpunkttest (Teste_Primitiv) und einen Shader (Farbe_am_Schnittpunkt) enthält.

Leistung Beschleunigungstechniken