Zum Hauptinhalt springen
Version: 3.5.x

SDF-Formkatalog

Visuelle Referenz: Inigo Quilez — 3D-Abstandsfunktionen

Was ist ein SDF?

Eine vorzeichenbehaftete Abstandsfunktion gibt den Abstand eines beliebigen Punktes im Raum zur nächstgelegenen Oberfläche einer Form zurück – negativ innerhalb der Oberfläche, null auf der Oberfläche, positiv außerhalb. Dieser Abstand dient als Eingabe für eine Kraftkurve: Je näher an der Oberfläche, desto größer die Kraft; je weiter entfernt, desto geringer die Kraft.

SDF-Formen werden vom Navigations modul verwendet (Blasenform).

Eine Form wird durch eine primitive und eine parameters Block:

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

Grundformen

PrimitivParameterAnmerkungen
spherer (Radius)Einfachste Form
ellipsoida (Halbachsenradien als vec3)Ungefähre SDF; genau bei Kräfte
boxb (Halb-Extents als vec3)Achsenparallel
rounded_boxb (Halbformate), r (Kurvenradius)Gesamtumfang = b + r
box_frameb (Halbformate), e (Kantenstärke)Drahtmodell einer Schachtel
planen (normal vec3), h (Versatz entlang n)Unendlicher Halbraum; n muss normalisiert werden

Kapseln und Zylinder

PrimitivParameterAnmerkungen
capsulea, b (Endpunktpositionen als vec3), r (Radius)Halbkugelförmige Kappen
capsule_verticalh (halbe Höhe), r (Radius)Kurzform für die Y-Achse
capped_cylindera, b (Achsenendpunkte als vec3), r (Radius)Flache Endkappen
capped_cylinder_verticalh (halbe Höhe), r (Radius)Kurzform für die Y-Achse

Torus-Familie

PrimitivParameterAnmerkungen
torusr1 (Hauptradius), r2 (Rohrradius)Donut in der XZ-Ebene
capped_torussc (Richtung des Vektors als vec2), r1, r2Bogen; sc = (cos θ, sin θ)
linkle (Halbfigur), r1 (Ringradius), r2 (Rohrradius)Form eines Maschendrahtzauns

Kegel

PrimitivParameterAnmerkungen
conec (Winkel als vec2 (sin α, cos α)), h (Höhe)Unendlicher Kegel, an der Spitze abgeschnitten
capped_conea, b (Endpunkte als vec3), r1 (Grundradius), r2 (Oberradius)Kegelstumpf
rounded_conea, b (Endpunkte als vec3), r1, r2Kegelstumpf mit Kugelkalotten
solid_anglec (Winkel als vec2), r (Radius)Eine Kugel, die von einem Kegel durchschnitten wird

Exotische Formen

PrimitivParameterAnmerkungen
vesica_revolveda, b (Achse als vec3), w (Breite)Linsenform
rhombusla, lb (Halbdiagonalen), h (Halbe Extrusionshöhe), r (Rundung)Diamantquerschnitt
pyramidh (Höhe)Quadratischer Sockel
octahedronr (Inradius)Reguläres Oktaeder
hexagonal_prismr (Umfangradius), h (halbe Höhe)Entlang Y
triangular_prismw (halbe Breite), h (halbe Höhe)Entlang der Z
Parametertypen

Skalarparameter (r, h, e, usw.) sind einfache Zahlen. Vektorparameter (a, b, n) sind Objekte: { "x": 0.0, "y": 0.0, "z": 0.0 }. Vec2-Parameter (c, sc) sind Objekte: { "x": 0.707, "y": 0.707 }.

JSON-Beispiele

Sphäre:

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

Ellipsoid (breiter in X/Z-Richtung):

{ "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 } } }

Abgerundetes Kästchen:

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

Kurzfassung:

{
"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 (Grenze entlang der +X-Achse):

{ "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 } }

Abgeschnittener Kegel (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 eine nicht unterstützte Primitive übergeben, greift der Dienst auf eine kugelartige Auswertung des Abstands vom Ursprung zurück.