SDF-Figurenkatalog
Visuelle Referenzmaterialien: Inigo Quilez – 3D-Abstandsfunktion
Was ist SDF?
*Die vorzeichenbehaftete Abstandsfunktion (Signed Distance Function)* gibt den Abstand eines beliebigen Punktes im Raum zur nächstgelegenen Oberfläche der Figur zurück. Im Inneren ist der Wert negativ, auf der Oberfläche 0 und außerhalb positiv. Dieser Abstand dient als Eingabe für die Kraftkurve. Das heißt: Je näher man der Oberfläche kommt, desto größer wird die Kraft, und je weiter man sich von ihr entfernt, desto geringer wird sie.
SDF-Figuren werden im Navigationsmodul (in Form von Blasen) verwendet.
Die Figur ist primitiveWow parameters wird durch Blöcke definiert:
{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}
Grundformen
| Primitiv | Parameter | Anmerkung |
|---|---|---|
sphere | r (Radius) | Die einfachsten Figuren |
ellipsoid | a (Halbachse und Halbradius im Format „vec3“) | Näherungs-SDF; genau bei der Kraftberechnung |
box | b (Halbdimension im Format „vec3“) | Wellenausrichtung |
rounded_box | b (Halbgröße), r (Eckenradius) | Gesamtgröße = b + r |
box_frame | b (Halbgröße), e (Kantendicke) | Drahtgitter-Umriss der Schachtel |
plane | n (Normalen im Format `vec3`), h (n Richtungsversatz) | Unendlicher Halbraum; nmuss normalisiert werden |
Kapseln und Zylinder
| Primitiv | Parameter | Anmerkung |
|---|---|---|
capsule | a, b (Endpunktposition im Format „vec3“), r (Radius) | halbkugelförmige Kappe |
capsule_vertical | h (halbhoch), r (Radius) | Abkürzung für die Y-Achse |
capped_cylinder | a, b (Achsenendpunkte im Format `vec3`), r (Radius) | Flache Endkappe |
capped_cylinder_vertical | h (halbhoch), r (Radius) | Abkürzung für die Y-Achse |
Taurus-Reihe
| Primitiv | Parameter | Anmerkung |
|---|---|---|
torus | r1 (Hauptdurchmesser), r2 (Rohrradius) | Donut in der XZ-Ebene |
capped_torus | sc (Richtung der Kappe im Format „vec2“), r1, r2 | 호 (Bogen); sc = (cos θ, sin θ) |
link | le (Halbweg), r1 (Radius des Rings), r2 (Rohrradius) | Kettengliedform |
Kegel
| Primitiv | Parameter | Anmerkung |
|---|---|---|
cone | c (Winkel im Format vec2 (sin α, cos α)), h (Höhe) | Ein unendlicher Kegel mit abgeschnittener Spitze |
capped_cone | a, b (Endpunkt im vec3-Format), r1 (Radius der Grundfläche), r2 (Radius der Oberseite) | Trunk |
rounded_cone | a, b (Endpunkt im vec3-Format), r1, r2 | Kegelstumpf mit kugelförmiger Kappe |
solid_angle | c (Winkel im Format „vec2“), r (Radius) | Eine Kugel, die durch einen Kegel abgeschnitten wurde |
Spezielle Figuren
| Primitiv | Parameter | Anmerkung |
|---|---|---|
vesica_revolved | a, b (Achse vom Typ vec3), w (Breite) | Linsenform |
rhombus | la, lb (Diagonale), h (Extrusionshalbhöhe), r (Rundung) | Rautenquerschnitt |
pyramid | h (Höhe) | quadratische Grundfläche |
octahedron | r (Inkreisradius) | Oktopeder |
hexagonal_prism | r (Umkreisradius), h (halbhoch) | Y-Achse |
triangular_prism | w (Halbbreite), h (halbhoch) | in Z-Richtung |
Skalarparameter (r, h, e usw.) sind gewöhnliche Zahlen.
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 }.
JSON-Beispiel
Ehemals:
{ "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 } } }
Kasten:
{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }
Runde Schachtel:
{ "primitive": "rounded_box", "parameters": { "b": { "x": 0.30, "y": 0.02, "z": 0.30 }, "r": 0.01 } }
Zusammenfassung:
{
"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 (+X-Richtung, Begrenzung):
{ "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 Kappen (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 ein nicht unterstütztes Primitiv bereitgestellt, ersetzt der Dienst dieses durch eine sphärische Näherungsbewertung auf der Grundlage des Abstands vom Ursprung.