Blender Dokumentation: Raytracing
Diese Seite bezieht sich auf Blender v2.42 |
Raytracing
BearbeitenRaytracing oder Strahlenverfolgung (in englischer Schreibweise meist ray tracing, seltener ray shooting) ist ein auf der Aussendung von Strahlen basierender Algorithmus zur Verdeckungsberechnung, also zur Ermittlung der Sichtbarkeit von dreidimensionalen Objekten ab einem bestimmten Punkt im Raum. Ebenfalls mit Raytracing bezeichnet man mehrere Erweiterungen dieses grundlegenden Verfahrens, die den weiteren Weg von Strahlen nach dem Auftreffen auf Oberflächen berechnen. Damit sind in Blender Schattenberechnungen, Transparenzen, Spiegelungen und Subsurface Scattering gemeint. Indirekte Lichtreflexionen werden in Blender nicht berechnet, gehören aber bei anderen Raytracern mittlerweile zur Grundausstattung.
Das Prinzip Verdeckungsberechnung [1]
BearbeitenRaytracing 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 den Blickwinkel, mit dem die Szene betrachtet wird.
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.
Zusammenhang zwischen Raytracing und Materialien
BearbeitenBei 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.
Die technische Umsetzung in Blender
BearbeitenDa Blender schon über einen schnellen und betriebssicheren Renderer verfügt, wurde Raytracing als eine Materialeigenschaft hinzugefügt. Bei der ersten „Berührung“ mit dem Objekt wird die Tiefeninformation (z-Buffer) gespeichert. Von da ab kann der Strahl Licht- oder Farbinformationen weiter verarbeiten.
Um Schnittpunkte zwischen Faces und Strahlen sicher erkennen zu können, wurde die Octree-Methode ausgewählt. Dies ist ein lokales Unterteilungssystem, in dem die ganze Szene in kleine Würfel aufgeteilt wird. Beginnend mit einem Würfel, kann mit 8, 64, 512 Würfeln gerechnet werden. Jeder Würfel enthält Referenzpunkte von Faces, wenn sie sich innerhalb dessen Volumens befinden. Wandert der Strahl durch diverse Würfel, lassen sich die zugeordneten Flächen leicht ausfindig machen.
Blender verwendet die „Top Down Traversing“-Methode und der Octree hat eine Obergrenze von 64x64x64 Würfeln. Mit einem Algorithmus, der dem von Bresenham ähnelt, werden die Würfel berechnet, die von dem Strahl durchquert wurden. Diese Methode ist als DDA (digital differential analyzer) - oder im Fall Blender - als 3DDA-Methode bekannt. Der größte Nachteil der festgelegten Octree-Zahl ist, dass immer noch hunderte, wenn nicht tausende Faces für einen einzelnen Durchgang berechnet werden müssen.
Um die Rechenzeiten zu begrenzen, gibt es zwei Möglichkeiten für den Anwender:
- Halten Sie die für die Strahlen „sichtbare Umgebung“ so klein wie möglich. Sie können ein Face von der Berechnung ausschließen, indem Sie in den Materialien „Traceable“ deaktivieren z. B. bei nicht reflektierenden Wänden oder Böden.
- Erhöhen Sie die Octree-Anzahl.
- Environment Maps werden gerendert, bevor Raytracing überhaupt initialisiert wird. Dadurch wird sichergestellt, dass EnvMaps schnell gerendert werden.
In den Scene-Buttons im Render-Panel befindet sich der "Hauptschalter" für das Raytracing. Unter der Bezeichnung Ray werden hier alle Raytracingprozesse zentral an- bzw. ausgeschaltet. Betroffen davon sind Rayshadows, RayMirror, RayTrans, Subsurface Scattering und Ambient Occlusion.
- Bekanntes Problem: Beim Raytracing werden nicht für jeden reflektierten Strahl die korrekten Werte für Filter und OSA berechnet, dadurch werden gespiegelte Bildtexturen etwas unschärfer als erwartet.
- Wenn Sie in eine Szene eine sehr große Fläche einfügen um z.B. eine weite Ebene zu simulieren, wird die Berechnungszeit für den Octree extrem verlängert und die Renderzeiten steigen unverhältnismäßig stark an. Dies kann dazu führen, dass Sie gezwungen werden den Rendervorgang abzubrechen.
Links
BearbeitenFußnoten und Einzelnachweise
Bearbeiten