Catalogue des formes SDF
Référence visuelle : Inigo Quilez — Fonctions de distance en 3D
Qu'est-ce qu'une fonction de distance signée (SDF) ?
Une fonction de distance signée fournit la distance entre un point quelconque de l'espace et la surface la plus proche d'une forme — négative à l'intérieur, nulle sur la surface, positive à l'extérieur. Cette distance sert de donnée d'entrée pour une courbe de force : plus on est proche de la surface, plus la force est forte ; plus on s'en éloigne, plus la force est nulle.
Les formes SDF sont utilisées par le module de navigation (forme en bulle).
Une forme est définie par un primitive et un parameters- Bloc décrit :
{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}
Formes de base
| Primitif | Paramètres | Remarques |
|---|---|---|
sphere | r (Rayon) | Forme la plus simple |
ellipsoid | a (Rayons de Halbachsen sous forme de vec3) | SDF approximative ; précise pour les forces |
box | b (Allongements de halba sous forme de vec3) | Parallèle aux axes |
rounded_box | b (allongements à mi-course), r (rayon de l'angle) | Extension totale = b + r |
box_frame | b (allongements à mi-course), e (Kantendicke) | Contour en treillis métallique d'une boîte |
plane | n (vecteur normal vec3), h (Décalage le long de n) | Demi-espace infini ; n doit être normalisé |
Capsules et cylindres
| Primitif | Paramètres | Remarques |
|---|---|---|
capsule | a, b (positions des points d'extrémité sous forme de vec3), r (Rayon) | Capuchons hémisphériques |
capsule_vertical | h (à mi-hauteur), r (Rayon) | Abréviation de l'axe Y |
capped_cylinder | a, b (extrémités des axes sous forme de vec3), r (Rayon) | Embouts plats |
capped_cylinder_vertical | h (à mi-hauteur), r (Rayon) | Abréviation de l'axe Y |
Famille des tores
| Primitif | Paramètres | Remarques |
|---|---|---|
torus | r1 (rayon principal), r2 (Rayon du tube) | Forme annulaire dans le plan XZ |
capped_torus | sc (direction de la cape sous forme de vec2), r1, r2 | Bogen ; sc = (cos θ, sin θ) |
link | le (mi-longueur), r1 (Rayon de l'anneau), r2 (Rayon du tube) | Forme de maillon de chaîne |
Kegel
| Primitif | Paramètres | Remarques |
|---|---|---|
cone | c (Angle sous forme de vec2 (sin α, cos α)), h (Hauteur) | Cône infini, tronqué à sa pointe |
capped_cone | a, b (points d'extrémité sous forme de vec3), r1 (rayon de base), r2 (rayon de pointe) | Tronc de cône |
rounded_cone | a, b (points d'extrémité sous forme de vec3), r1, r2 | Tronc de cône muni de capuchons sphériques |
solid_angle | c (Angle sous forme de vec2), r (Rayon) | Une boule traversée par un cône |
Formes exotiques
| Primitif | Paramètres | Remarques |
|---|---|---|
vesica_revolved | a, b (axe de type vec3), w (Largeur) | Linsenform |
rhombus | la, lb (demi-diagonales), h (hauteur à mi-hauteur de l'extrusion), r (Abrundung) | Section transversale en forme de losange |
pyramid | h (Hauteur) | Base quadratique |
octahedron | r (rayon de l'encerclement) | Octaèdre régulier |
hexagonal_prism | r (rayon de cercle), h (à mi-hauteur) | Le long de Y |
triangular_prism | w (demi-largeur), h (à mi-hauteur) | Le long de Z |
Paramètre scalaire (r, h, e etc.) sont des nombres simples.
Les paramètres vectoriels (a, b, n) sont des objets : { "x": 0.0, "y": 0.0, "z": 0.0 }.
Vec2-Paramètre (c, sc) sont des objets : { "x": 0.707, "y": 0.707 }.
Exemples avec JSON
Kugel :
{ "primitive": "sphere", "parameters": { "r": 0.05 } }
Ellipsoïde (plus large dans les directions X et Z) :
{ "primitive": "ellipsoid", "parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } } }
Encadré :
{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }
Boîte aux angles arrondis :
{ "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
}
}
Plan (limite le long de l'axe +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 } }
Tronc de cône (Frustum) :
{
"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
}
}
Si une primitive non prise en charge est spécifiée, le service utilise une évaluation de type sphérique basée sur la distance par rapport à l'origine.