Zum Hauptinhalt springen

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​

PrimitivEinstellungenAnmerkungen
spherer (Viskose)Einfachste Form
ellipsoida (Halbachsen in Form von vec3)SDF: annähernd; genau für die Kräfte
boxb (Halbdimensionen in Form von vec3)An den Achsen ausgerichtet
rounded_boxb (Halbdimensionen), r (Eckenbereich)Gesamtlänge = b + r
box_frameb (Halbdimensionen), e (Kantenstärke)Drahtumriss einer Schachtel
planen (normalerweise in Form von vec3), h (Versatz entlang n)Unendlicher Halbraum; n muss normalisiert werden

Kapseln und Zylinder​

PrimitivEinstellungenAnmerkungen
capsulea, b (Positionen der Endpunkte als vec3), r (Viskose)Hemisphärische Enden
capsule_verticalh (Halbhöhe), r (Viskose)Tastenkombination für die Y-Achse
capped_cylindera, b (Endpunkte der Achse als vec3), r (Viskose)Flache Enden
capped_cylinder_verticalh (Halbhöhe), r (Viskose)Tastenkombination für die Y-Achse

Familie der Torusse​

PrimitivEinstellungenAnmerkungen
torusr1 (Hauptstrahl), r2 (Rohrradius)Beignet in der XZ-Ebene
capped_torussc (Richtung der Kalotte als vec2), r1, r2Bogen ; sc = (cos θ, sin θ)
linkle (halblang), r1 (Radius des Rings), r2 (Rohrradius)Form eines Kettenglieds

Kegel​

PrimitivEinstellungenAnmerkungen
conec (Winkel als vec2 (sin α, cos α)), h (Höhe)Unendlicher Kegel, an der Spitze abgeschnitten
capped_conea, b (Endpunkte in Form von vec3), r1 (Radius der Basis), r2 (Umkreis des Gipfels)Kegelstumpf
rounded_conea, b (Endpunkte in Form von vec3), r1, r2Kegelstumpf mit sphärischen Kalotten
solid_anglec (Winkel als vec2), r (Viskose)Von einem Kegel geschnittene Kugel

Exotische Formen​

PrimitivEinstellungenAnmerkungen
vesica_revolveda, b (Achse in Form von vec3), w (Breite)Linsenform
rhombusla, lb (Halbdiagonalen), h (halbe Extrusionshöhe), r (abgerundet)Rautenprofil
pyramidh (Höhe)Quadratischer Sockel
octahedronr (eingetragener Bezirk)Reguläres Oktaeder
hexagonal_prismr (begrenztes Gebiet), h (Halbhöhe)Entlang von Y
triangular_prismw (halbe Breite), h (Halbhöhe)Entlang von Z
Arten von Parametern

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.