Zum Hauptinhalt springen

SDF-Formkatalog

Visuelle Referenzmaterialien: Inigo Quilez – 3D-Abstandsfunktionen

Was ist SDF?​

Die vorzeichenbehaftete Abstandsfunktiongibt den Abstand von einem beliebigen Punkt im Raum bis zur nächstgelegenen Oberfläche der Form zurück. Innerhalb der Form istder Wert negativ, auf derOberfläche gleich Nullund außerhalb der Formpositiv. Dieser Abstand dient als Eingabe für die Kraftkurve: Je näher am Oberflächenrand, desto größer die Kraft; je weiter entfernt, desto näher die Kraft an Null.

Die SDF-Form wird im Navigationsmodul (Blasenform) verwendet.

Die Form ist primitive und parameters Wird in Blöcken beschrieben:

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

Grundformen​

PrimitiveParameterAnmerkungen
spherer(Radius)Die einfachste Form
ellipsoida(Halbachsenradius als vec3)SDF-Näherung. Ausreichende Genauigkeit für die Berechnung der Kräfte
boxb(Halb-Extent als `vec3`)Achsenparallel
rounded_boxb(Halbe Ausdehnung),r(Eckradius)Gesamtgröße = b + r
box_frameb(Halbe Ausdehnung),e(Kantenstärke)Drahtgitterkontur der Box
planen(Normale vec3),h(n (Richtungsversatz)Unendlicher Halbraum.n muss normalisiert sein

Kapseln und Zylinder​

PrimitiveParameterAnmerkungen
capsulea、b(Endpunktposition, vec3),r(Radius)halbkugelförmige Kappe
capsule_verticalh(halbe Höhe),r(Radius)Abkürzung für die Y-Achse
capped_cylindera、b(Achsenendpunkt, vec3),r(Radius)Kappe mit flacher Stirnfläche
capped_cylinder_verticalh(halbe Höhe),r(Radius)Abkürzung für die Y-Achse

Toroid-System​

PrimitiveParameterAnmerkungen
torusr1(Hauptradius),r2(Rohrradius)Donut-Form auf der XZ-Ebene
capped_torussc(Cap-Richtung, vec2),r1、r2Bogen.sc = (cos θ, sin θ)
linkle(Halblang),r1(Ringradius),r2(Rohrradius)Kettengliedform

Kegel​

PrimitiveParameterAnmerkungen
conec(Winkel, vec2 (sin α, cos α)),h(Höhe)Ein unendlicher Kegel, dessen Spitze abgeschnitten wurde
capped_conea、b(Endpunkt, vec3),r1(Radius der Grundfläche),r2(der obige Radius)Kegelstumpf
rounded_conea、b(Endpunkt, vec3),r1、r2Kegelstumpf mit kugelförmiger Kappe
solid_anglec(Winkel, vec2),r(Radius)Eine Kugel, aus der ein Kegel herausgeschnitten wurde

Spezielle Formen​

PrimitiveParameterAnmerkungen
vesica_revolveda、b(Achse, vec3),w(Breite)Linsenform
rhombusla、lb(Halbdiagonale),h(halbe Höhe der Extrusion),r(Rundung)Rautenförmiger Querschnitt
pyramidh(Höhe)quadratische Grundfläche
octahedronr(Inkreisradius)reguläres Oktaeder
hexagonal_prismr(Außenradius),h(halbe Höhe)Y-Achse
triangular_prismw(halbe Breite),h(halbe Höhe)Z-Achse
Typ der Parameter

Skalarparameter (r、h、e (usw.) sind einfache Zahlenwerte. 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 }。

Beispiele für JSON​

Ball:

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

Ellipsoid(breit 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 } }

Kapsel:

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

Kegel mit Kappe(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 angegeben, greift der Dienst auf eine kugelförmige Schätzung zurück, die auf dem Abstand vom Ursprung basiert.