Computergrafik

Signed Distance Functions

Raymarching | | Raymarching mit OpenGL

Eine Raymarching-Variante ist Sphere Tracing. Sie nutzt Signed Distance Functions (SDF) zur Bestimmung der Abtastrate.

Eine Signed Distance Function ermittelt für die bekannte Geometrie den [Mindest]-Abstand eines Abtastpunktes zur Geometrie. Im Inneren der Geometrie ist dieser entsprechend negativ. Die SDF der gesamten Geometrie ist gleich dem Minimum aller SDF der Szene.

Beispiel: SDF einer Kugel an der Position $\vec c$ mit Radius $r$:

$\displaystyle{ \mbox{SDF}(\vec v) = ||\vec v - \vec c|| - r }$

Die obige SDF kann durch Sustitution der Entfernungs- durch Grauwerte visualisiert werden (siehe rechtes Bild).

Weitere SDFs zu verschiedenen Primitiven hat Inigo Quilez (iq) gesammelt. Mit Hilfe von SDFs kann auch einfach Constructive Solid Geometry (CSG) implementiert werden, da das Minimum von sich überlappender Geometrie gleich dem Minimum der Teile ist.

Wie man mit SDFs auch komplexe Geometrien darstellen kann, zeigt ein Demo von iq. Die zugrundeliegenden Ãœberlegungen gibt es in einem YouTube Video.

Sphere Tracing

Sei $f(t)$ ein Sichtstrahl mit $f(t) = \vec{eye} + t \cdot \vec{dir}$. Dann kann der Sichtstrahl mit der SDF der Szene wie folgt abgetatstet werden:

$\displaystyle{ t' = t + SDF(f(t)) }$

Mit der SDF der Szene als Abtastrate ist man sicher, dass man keine Geometrie übersieht, da der Mindest-Abstand, der eine leere Kugel um den aktuellen Abtastpunkt definiert, nie überschritten werden kann.

Leerräume können damit sehr schnell durchschritten werden. Dafür trifft man i.d.R. nie exakt die Geometrie. Man muss also beim Unterschreiten eines gewissen Epsilons einen Treffer annehmen.

Dieses Verfahren nennt man Sphere-Tracing, da in jedem Schritt die Schrittweite von der Größe der Kugel abhängt, in der keine Geometrie zu finden ist. Hier eine interaktive Demo auf shadertoy.

Raymarching | | Raymarching mit OpenGL

Options: