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
| Primitive | Parameter | Anmerkungen |
|---|---|---|
sphere | r(Radius) | Die einfachste Form |
ellipsoid | a(Halbachsenradius als vec3) | SDF-Näherung. Ausreichende Genauigkeit für die Berechnung der Kräfte |
box | b(Halb-Extent als `vec3`) | Achsenparallel |
rounded_box | b(Halbe Ausdehnung),r(Eckradius) | Gesamtgröße = b + r |
box_frame | b(Halbe Ausdehnung),e(Kantenstärke) | Drahtgitterkontur der Box |
plane | n(Normale vec3),h(n (Richtungsversatz) | Unendlicher Halbraum.n muss normalisiert sein |
Kapseln und Zylinder
| Primitive | Parameter | Anmerkungen |
|---|---|---|
capsule | a、b(Endpunktposition, vec3),r(Radius) | halbkugelförmige Kappe |
capsule_vertical | h(halbe Höhe),r(Radius) | Abkürzung für die Y-Achse |
capped_cylinder | a、b(Achsenendpunkt, vec3),r(Radius) | Kappe mit flacher Stirnfläche |
capped_cylinder_vertical | h(halbe Höhe),r(Radius) | Abkürzung für die Y-Achse |
Toroid-System
| Primitive | Parameter | Anmerkungen |
|---|---|---|
torus | r1(Hauptradius),r2(Rohrradius) | Donut-Form auf der XZ-Ebene |
capped_torus | sc(Cap-Richtung, vec2),r1、r2 | Bogen.sc = (cos θ, sin θ) |
link | le(Halblang),r1(Ringradius),r2(Rohrradius) | Kettengliedform |
Kegel
| Primitive | Parameter | Anmerkungen |
|---|---|---|
cone | c(Winkel, vec2 (sin α, cos α)),h(Höhe) | Ein unendlicher Kegel, dessen Spitze abgeschnitten wurde |
capped_cone | a、b(Endpunkt, vec3),r1(Radius der Grundfläche),r2(der obige Radius) | Kegelstumpf |
rounded_cone | a、b(Endpunkt, vec3),r1、r2 | Kegelstumpf mit kugelförmiger Kappe |
solid_angle | c(Winkel, vec2),r(Radius) | Eine Kugel, aus der ein Kegel herausgeschnitten wurde |
Spezielle Formen
| Primitive | Parameter | Anmerkungen |
|---|---|---|
vesica_revolved | a、b(Achse, vec3),w(Breite) | Linsenform |
rhombus | la、lb(Halbdiagonale),h(halbe Höhe der Extrusion),r(Rundung) | Rautenförmiger Querschnitt |
pyramid | h(Höhe) | quadratische Grundfläche |
octahedron | r(Inkreisradius) | reguläres Oktaeder |
hexagonal_prism | r(Außenradius),h(halbe Höhe) | Y-Achse |
triangular_prism | w(halbe Breite),h(halbe Höhe) | Z-Achse |
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.