Zum Haupttext springen

SDF-Figurenkatalog

Visuelle Referenzmaterialien: Inigo Quilez – 3D-Abstandsfunktion

Was ist SDF?​

*Die vorzeichenbehaftete Abstandsfunktion (Signed Distance Function)* gibt den Abstand eines beliebigen Punktes im Raum zur nächstgelegenen Oberfläche der Figur zurück. Im Inneren ist der Wert negativ, auf der Oberfläche 0 und außerhalb positiv. Dieser Abstand dient als Eingabe für die Kraftkurve. Das heißt: Je näher man der Oberfläche kommt, desto größer wird die Kraft, und je weiter man sich von ihr entfernt, desto geringer wird sie.

SDF-Figuren werden im Navigationsmodul (in Form von Blasen) verwendet.

Die Figur ist primitiveWow parameters wird durch Blöcke definiert:

{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}

Grundformen​

PrimitivParameterAnmerkung
spherer (Radius)Die einfachsten Figuren
ellipsoida (Halbachse und Halbradius im Format „vec3“)Näherungs-SDF; genau bei der Kraftberechnung
boxb (Halbdimension im Format „vec3“)Wellenausrichtung
rounded_boxb (Halbgröße), r (Eckenradius)Gesamtgröße = b + r
box_frameb (Halbgröße), e (Kantendicke)Drahtgitter-Umriss der Schachtel
planen (Normalen im Format `vec3`), h (n Richtungsversatz)Unendlicher Halbraum; nmuss normalisiert werden

Kapseln und Zylinder​

PrimitivParameterAnmerkung
capsulea, b (Endpunktposition im Format „vec3“), r (Radius)halbkugelförmige Kappe
capsule_verticalh (halbhoch), r (Radius)Abkürzung für die Y-Achse
capped_cylindera, b (Achsenendpunkte im Format `vec3`), r (Radius)Flache Endkappe
capped_cylinder_verticalh (halbhoch), r (Radius)Abkürzung für die Y-Achse

Taurus-Reihe​

PrimitivParameterAnmerkung
torusr1 (Hauptdurchmesser), r2 (Rohrradius)Donut in der XZ-Ebene
capped_torussc (Richtung der Kappe im Format „vec2“), r1, r2호 (Bogen); sc = (cos θ, sin θ)
linkle (Halbweg), r1 (Radius des Rings), r2 (Rohrradius)Kettengliedform

Kegel​

PrimitivParameterAnmerkung
conec (Winkel im Format vec2 (sin α, cos α)), h (Höhe)Ein unendlicher Kegel mit abgeschnittener Spitze
capped_conea, b (Endpunkt im vec3-Format), r1 (Radius der Grundfläche), r2 (Radius der Oberseite)Trunk
rounded_conea, b (Endpunkt im vec3-Format), r1, r2Kegelstumpf mit kugelförmiger Kappe
solid_anglec (Winkel im Format „vec2“), r (Radius)Eine Kugel, die durch einen Kegel abgeschnitten wurde

Spezielle Figuren​

PrimitivParameterAnmerkung
vesica_revolveda, b (Achse vom Typ vec3), w (Breite)Linsenform
rhombusla, lb (Diagonale), h (Extrusionshalbhöhe), r (Rundung)Rautenquerschnitt
pyramidh (Höhe)quadratische Grundfläche
octahedronr (Inkreisradius)Oktopeder
hexagonal_prismr (Umkreisradius), h (halbhoch)Y-Achse
triangular_prismw (Halbbreite), h (halbhoch)in Z-Richtung
Parametertyp

Skalarparameter (r, h, e usw.) sind gewöhnliche Zahlen. Vektorparameter (a, b, n) ist ein Objekt: { "x": 0.0, "y": 0.0, "z": 0.0 }. Vec2-Parameter (c, sc) ist ein Objekt: { "x": 0.707, "y": 0.707 }.

JSON-Beispiel​

Ehemals:

{ "primitive": "sphere", "parameters": { "r": 0.05 } }

Ellipsoid (in X/Z-Richtung breiter):

{ "primitive": "ellipsoid", "parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } } }

Kasten:

{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }

Runde Schachtel:

{ "primitive": "rounded_box", "parameters": { "b": { "x": 0.30, "y": 0.02, "z": 0.30 }, "r": 0.01 } }

Zusammenfassung:

{
"primitive": "capsule",
"parameters": {
"a": { "x": 0.0, "y": -0.03, "z": 0.0 },
"b": { "x": 0.0, "y": 0.03, "z": 0.0 },
"r": 0.04
}
}

Ebene (+X-Richtung, Begrenzung):

{ "primitive": "plane", "parameters": { "n": { "x": 1.0, "y": 0.0, "z": 0.0 }, "h": 0.0 } }

Torus:

{ "primitive": "torus", "parameters": { "r1": 0.08, "r2": 0.02 } }

Kegel mit Kappen (Kegelstumpf):

{
"primitive": "capped_cone",
"parameters": {
"a": { "x": 0.0, "y": -0.05, "z": 0.0 },
"b": { "x": 0.0, "y": 0.05, "z": 0.0 },
"r1": 0.04, "r2": 0.01
}
}

Wird ein nicht unterstütztes Primitiv bereitgestellt, ersetzt der Dienst dieses durch eine sphärische Näherungsbewertung auf der Grundlage des Abstands vom Ursprung.