Raytracing

Aus DGL Wiki
Wechseln zu: Navigation, Suche
Raytracer CSG.png

Übersicht

Raytracing ist wie Rastergrafik ein Verfahren zur Erzeugung von 3-Dimensionalen Computergrafiken. Es ist ein hoch parallelisierbarer Prozess, der meist rein auf der CPU läuft, auffallend (über-)realistische Grafiken erzeugen kann, aber dafür sehr viel Rechenleistung verschlingt. Im High-Performance-Raytracing existieren auch Versuche auf GPUs zu rechnen, was im Zusammenhang mit Polygonmeshes gut zu bewerkstelligen ist, jedoch im Bereich von implizit gegebenen Körpern sehr schwierig bis unmöglich zu implementieren ist und je nach Anwendungsgebiet ein k.O. Kriterium oder bewusst in Kauf genommen werden kann (Mit OpenGl ist das Darstellen implizit gegebener Körper nicht ohne Weiteres machbar).

Prinzip

Die Funktionsweise eines Raytracers lehnt sich an eine Idee aus der Antike an. Man glaubte, dass das Auge Sehstrahlen verlassen und, sobald sie auf einen Gegenstand treffen, dem Auge die Sichtinformation zurückgeben. Bei einem Raytracer werden diese Strahlen von einem 4-Eck, welches den Monitor repräsentiert, in die Szene geworfen.

Tutorial RaytracingI griechisch.jpg

Schatten

Trifft ein Strahl ein Objekt, so können von Dort weitere Strahlen zu den Lichtquellen geworfen werden. Trifft ein solcher noch vor der Lichtquelle auf ein weiteres Objekt, so liegt der Punkt im Schatten der Lichtquelle und wird nicht beleuchtet.

Tutorial RaytracingI teaser.jpg

Reflexionen und Transparenz

Ähnlich kann bei Reflexionen vorgegangen werden. Wird ein spiegelndes Objekt getroffen, so werden Strahlen in die Reflektionsrichtung geworfen um zu bestimmen, was sich in der Reflexionsrichtung befindet.

Reflextion.jpg

Transparenz funktioniert dann natürlich ähnlich, nur dass dann der Strahl in das Objekt hineingebrochen und nicht darüberhinweg gespiegelt wird.

Lösen impliziter Mathematischer Gleichungen

Das Lösen Mathematischer Gleichungen im Raum ist eine weitere Spezialität, kann jedoch nur schlecht für beliebige Systeme automatisiert werden, es muss also je nach Art des Objekts ein unterschiedliches Verfahren eingesetzt werden. So existieren Methoden für Lipschitzstetige Funktionen (siehe Bild: L-stetiger Blobtree), Polynome (etwa für mit Splines definierte Rotationskörper) oder Isosurfaces (Gleichungen über die man "nicht viel" weis; diese können im Prinzip nur durch entlanglaufen und Abtasten entlang des Strahls gelöst werden) und viele weitere mehr.

Raytracer Blobtree.png

Globale Beleuchtung / Lightmaps

Im Bereich globaler Beleuchtung haben Raytracer gegenüber Rastergrafik den Vorteil, dass für die Bestimmung eines Farbwerts immer die komplette Szene zur Verfügung steht und somit indirekt einfallendes Licht anhand der Umgebung bestimmt werden kann und nicht durch einen Ambienten Faktor oder Multipassrendering approximiert werden muss. Da Raytracer selten interaktiv arbeiten müssen, steht dann auch die dafür nötige Zeit um eine Monte-Carlo Integration oder Photonmapping durchzuführen zur Verfügung.

Raytracer Photonmapping.png

Interessanterweise finden sich unter diesem Aspekt Raytracer auch in interaktiver Rastergrafik unter dem Begriff Lightmapping wieder. Mithilfe eines Raytracers wird für jedes Polygon in der Szene eine Textur erzeugt, die deren statischen Lichteinfall repräsentiert.

Siehe Auch

Tutorial_Raytracing_-_Grundlagen_I,Tutorial_Raytracing_-_Grundlagen_II