Zum Hauptinhalt springen

SDF-Formkatalog

Visualisierungshinweis: Inigo Quilez – 3D-Abstandsfunktionen

Was ist SDF?​

*Die signierte Distanzfunktion (SDF)* gibt den Abstand eines beliebigen Punktes im Raum zur nächstgelegenen Oberfläche der Form zurück –im Innerenistder Wert negativ,auf der Oberfläche null und außerhalb positiv. Dieser Abstand dient als Eingabe für die Kraftkurve: Je näher der Punkt an der Oberfläche liegt, desto größer ist die Kraft; je weiter er entfernt ist, desto kleiner ist die Kraft, bis sie schließlich null wird.

Die SDF-Form wirdvom Navigationsmodulverwendet (Blasenform).

Die Form wird durch einen primitive und ein parameters Beschreibung des Blocks:

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

Grundformen​

GrafikelementParameterErläuterung
spherer(Radius)Die einfachsten Formen
ellipsoida(Halbachsenradius, dargestellt als vec3)SDF-Näherung; die Berechnung der Kräfte ist relativ genau
boxb(Halbseitenlänge, dargestellt als vec3)An den Koordinatenachsen ausrichten
rounded_boxb(Länge einer Seite),r(Abrundungsradius)Gesamtabmessungen = b + r
box_frameb(Länge einer Seite),e(Kantenstärke)Drahtgitterkontur eines Quaders
planen(Normvektor, vec3),h(entlang n (Abweichung von der Richtung)Unendlicher Halbraum;n Muss normalisiert sein

Kapselkörper und Zylinder​

GrafikelementParameterErläuterung
capsulea、b(Endpunktposition, vec3),r(Radius)halbkugelförmige Endkappe
capsule_verticalh(halbe Höhe),r(Radius)Abkürzung für die Y-Achse
capped_cylindera、b(Achsenendpunkt, vec3),r(Radius)Flache Endkappe
capped_cylinder_verticalh(halbe Höhe),r(Radius)Abkürzung für die Y-Achse

Die „Huanmian“-Serie​

GrafikelementParameterErläuterung
torusr1(Hauptradius),r2(Rohrdurchmesser)Donut-Form in der XZ-Ebene
capped_torussc(Hutrichtung, vec2),r1、r2Bogen;sc = (cos θ, sin θ)
linkle(halblang),r1(Ringradius),r2(Rohrdurchmesser)Kettengliedform

Kegel​

GrafikelementParameterErläuterung
conec(Winkel, vec2 (sin α, cos α)),h(Höhe)Ein unendlicher Kegel, der an der Spitze abgeschnitten ist
capped_conea、b(Endpunkt, vec3),r1(Bodenradius),r2(Radius der Oberseite)Rundtisch
rounded_conea、b(Endpunkt, vec3),r1、r2Kegelstumpf mit kugelförmiger Endkappe
solid_anglec(Winkel, vec2),r(Radius)Von einem Kegel abgeschnittene Kugel

Sonderformen​

GrafikelementParameterErläuterung
vesica_revolveda、b(Achse, vec3),w(Breite)linsenförmig
rhombusla、lb(Halbdiagonale),h(Halbe Höhe in der Längsrichtung),r(Abgerundete Ecken)Rautenquerschnitt
pyramidh(Höhe)quadratischer Boden
octahedronr(Innerer Radius)reguläres Oktaeder
hexagonal_prismr(Radius des Umkreises),h(halbe Höhe)entlang der Y-Achse
triangular_prismw(halbe Breite),h(halbe Höhe)entlang der Z-Achse
Parametertyp

Skalarparameter (r、h、e usw.) sind Standardwerte. Vektorparameter (a、b、n) als Ziel:{ "x": 0.0, "y": 0.0, "z": 0.0 }。 Vec2-Parameter (c、sc) als Ziel:{ "x": 0.707, "y": 0.707 }。

JSON-Beispiel​

Kugel:

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

Quader:

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

Rechteck mit abgerundeten Ecken:

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

Kapselkörper:

{
"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-Richtung):

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

Ringfläche:

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

Rundpyramide(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
}
}

Wenn nicht unterstützte Elemente bereitgestellt werden, greift der Dienst auf eine auf dem Abstand vom Ursprung basierende, quasi-sphärische Auswertung zurück.