Katalog der SDF-Formen
Visuelle Referenz: Inigo Quilez – 3D-Abstandsfunktionen
Was ist ein Obdachloser?
Eine vorzeichenbehaftete Abstandsfunktion gibt den Abstand zwischen einem beliebigen Punkt im Raum und der nächstgelegenen Oberfläche einer Form zurück: negativ im Inneren, null auf der Oberfläche, positiv außerhalb. Dieser Abstand dient als Eingangsgröße für eine Kraftkurve: Je näher man an der Oberfläche ist, desto größer ist die Kraft; darüber hinaus wirkt keine Kraft.
Die SDF-Formulare werden vom Modul „Navigation“ verwendet (Sprachblasen-Formular).
Eine Form wird durch eine primitive und einen Block parameters :
{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}
Grundformen
| Primitiv | Einstellungen | Anmerkungen |
|---|---|---|
sphere | r (Viskose) | Einfachste Form |
ellipsoid | a (Halbachsen in Form von vec3) | SDF: annähernd; genau für die Kräfte |
box | b (Halbdimensionen in Form von vec3) | An den Achsen ausgerichtet |
rounded_box | b (Halbdimensionen), r (Eckenbereich) | Gesamtlänge = b + r |
box_frame | b (Halbdimensionen), e (Kantenstärke) | Drahtumriss einer Schachtel |
plane | n (normalerweise in Form von vec3), h (Versatz entlang n) | Unendlicher Halbraum; n muss normalisiert werden |
Kapseln und Zylinder
| Primitiv | Einstellungen | Anmerkungen |
|---|---|---|
capsule | a, b (Positionen der Endpunkte als vec3), r (Viskose) | Hemisphärische Enden |
capsule_vertical | h (Halbhöhe), r (Viskose) | Tastenkombination für die Y-Achse |
capped_cylinder | a, b (Endpunkte der Achse als vec3), r (Viskose) | Flache Enden |
capped_cylinder_vertical | h (Halbhöhe), r (Viskose) | Tastenkombination für die Y-Achse |
Familie der Torusse
| Primitiv | Einstellungen | Anmerkungen |
|---|---|---|
torus | r1 (Hauptstrahl), r2 (Rohrradius) | Beignet in der XZ-Ebene |
capped_torus | sc (Richtung der Kalotte als vec2), r1, r2 | Bogen ; sc = (cos θ, sin θ) |
link | le (halblang), r1 (Radius des Rings), r2 (Rohrradius) | Form eines Kettenglieds |
Kegel
| Primitiv | Einstellungen | Anmerkungen |
|---|---|---|
cone | c (Winkel als vec2 (sin α, cos α)), h (Höhe) | Unendlicher Kegel, an der Spitze abgeschnitten |
capped_cone | a, b (Endpunkte in Form von vec3), r1 (Radius der Basis), r2 (Umkreis des Gipfels) | Kegelstumpf |
rounded_cone | a, b (Endpunkte in Form von vec3), r1, r2 | Kegelstumpf mit sphärischen Kalotten |
solid_angle | c (Winkel als vec2), r (Viskose) | Von einem Kegel geschnittene Kugel |
Exotische Formen
| Primitiv | Einstellungen | Anmerkungen |
|---|---|---|
vesica_revolved | a, b (Achse in Form von vec3), w (Breite) | Linsenform |
rhombus | la, lb (Halbdiagonalen), h (halbe Extrusionshöhe), r (abgerundet) | Rautenprofil |
pyramid | h (Höhe) | Quadratischer Sockel |
octahedron | r (eingetragener Bezirk) | Reguläres Oktaeder |
hexagonal_prism | r (begrenztes Gebiet), h (Halbhöhe) | Entlang von Y |
triangular_prism | w (halbe Breite), h (Halbhöhe) | Entlang von Z |
Die skalaren Parameter (r, h, e, usw.) sind einfache Zahlen.
Die Vektorparameter (a, b, n) sind Objekte: { "x": 0.0, "y": 0.0, "z": 0.0 }.
Die Parameter vec2 (c, sc) sind Objekte: { "x": 0.707, "y": 0.707 }.
Beispiele für JSON
Bereich:
{ "primitive": "sphere", "parameters": { "r": 0.05 } }
Ellipsoid (größte Ausdehnung in X/Z-Richtung):
{ "primitive": "ellipsoid", "parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } } }
Verpackung:
{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }
Abgerundete 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
}
}
Plan (Grenze entlang +X):
{ "primitive": "plane", "parameters": { "n": { "x": 1.0, "y": 0.0, "z": 0.0 }, "h": 0.0 } }
Tore:
{ "primitive": "torus", "parameters": { "r1": 0.08, "r2": 0.02 } }
Kegelstumpf (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 übergeben, wechselt der Dienst zu einer Sphärenauswertung, die auf dem Abstand zum Ursprung basiert.