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
| Grafikelement | Parameter | Erläuterung |
|---|---|---|
sphere | r(Radius) | Die einfachsten Formen |
ellipsoid | a(Halbachsenradius, dargestellt als vec3) | SDF-Näherung; die Berechnung der Kräfte ist relativ genau |
box | b(Halbseitenlänge, dargestellt als vec3) | An den Koordinatenachsen ausrichten |
rounded_box | b(Länge einer Seite),r(Abrundungsradius) | Gesamtabmessungen = b + r |
box_frame | b(Länge einer Seite),e(Kantenstärke) | Drahtgitterkontur eines Quaders |
plane | n(Normvektor, vec3),h(entlang n (Abweichung von der Richtung) | Unendlicher Halbraum;n Muss normalisiert sein |
Kapselkörper und Zylinder
| Grafikelement | Parameter | Erläuterung |
|---|---|---|
capsule | a、b(Endpunktposition, vec3),r(Radius) | halbkugelförmige Endkappe |
capsule_vertical | h(halbe Höhe),r(Radius) | Abkürzung für die Y-Achse |
capped_cylinder | a、b(Achsenendpunkt, vec3),r(Radius) | Flache Endkappe |
capped_cylinder_vertical | h(halbe Höhe),r(Radius) | Abkürzung für die Y-Achse |
Die „Huanmian“-Serie
| Grafikelement | Parameter | Erläuterung |
|---|---|---|
torus | r1(Hauptradius),r2(Rohrdurchmesser) | Donut-Form in der XZ-Ebene |
capped_torus | sc(Hutrichtung, vec2),r1、r2 | Bogen;sc = (cos θ, sin θ) |
link | le(halblang),r1(Ringradius),r2(Rohrdurchmesser) | Kettengliedform |
Kegel
| Grafikelement | Parameter | Erläuterung |
|---|---|---|
cone | c(Winkel, vec2 (sin α, cos α)),h(Höhe) | Ein unendlicher Kegel, der an der Spitze abgeschnitten ist |
capped_cone | a、b(Endpunkt, vec3),r1(Bodenradius),r2(Radius der Oberseite) | Rundtisch |
rounded_cone | a、b(Endpunkt, vec3),r1、r2 | Kegelstumpf mit kugelförmiger Endkappe |
solid_angle | c(Winkel, vec2),r(Radius) | Von einem Kegel abgeschnittene Kugel |
Sonderformen
| Grafikelement | Parameter | Erläuterung |
|---|---|---|
vesica_revolved | a、b(Achse, vec3),w(Breite) | linsenförmig |
rhombus | la、lb(Halbdiagonale),h(Halbe Höhe in der Längsrichtung),r(Abgerundete Ecken) | Rautenquerschnitt |
pyramid | h(Höhe) | quadratischer Boden |
octahedron | r(Innerer Radius) | reguläres Oktaeder |
hexagonal_prism | r(Radius des Umkreises),h(halbe Höhe) | entlang der Y-Achse |
triangular_prism | w(halbe Breite),h(halbe Höhe) | entlang der Z-Achse |
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.