Catalogue des formes SDF
Références visuelles : Inigo Quilez — Fonction de distance 3D
Qu'est-ce que le SDF ?
*La fonction de distance signée (Signed Distance Function)* renvoie la distance entre un point quelconque de l'espace et la surface la plus proche de la figure. Elle prend une valeur négative à l'intérieur, 0 sur la surface et une valeur positiveà l'extérieur. Cette distance sert d'entrée à la courbe de force. En d'autres termes, plus on se rapproche de la surface, plus la force est importante, et plus on s'en éloigne, plus la force diminue jusqu'à disparaître.
Les formes SDF sont utilisées dans le module de navigation (sous forme de bulles).
Les figures géométriques sont primitiveWa parameters Il est défini par des blocs :
{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}
Figures de base
| Primitif | Paramètres | Remarque |
|---|---|---|
sphere | r (rayon) | Les figures les plus simples |
ellipsoid | a (demi-axe et rayon sous forme de vec3) | SDF approximative ; précise pour le calcul des forces |
box | b (demi-dimension de type vec3) | Alignement des axes |
rounded_box | b (demi-taille), r (rayon de l'angle) | Taille totale = b + r |
box_frame | b (demi-taille), e (épaisseur des bords) | Contours en fil de fer de la boîte |
plane | n (normale de type vec3), h (n Décalage de direction) | Semi-espace infini ; ndoit être normalisé |
Capsules et cylindres
| Primitif | Paramètres | Remarque |
|---|---|---|
capsule | a, b (position des extrémités sous forme de vec3), r (rayon) | capuchon hémisphérique |
capsule_vertical | h (à mi-hauteur), r (rayon) | Abréviation de « axe Y » |
capped_cylinder | a, b (extrémité d'axe de type vec3), r (rayon) | Embout plat |
capped_cylinder_vertical | h (à mi-hauteur), r (rayon) | Abréviation de « axe Y » |
Gamme Torus
| Primitif | Paramètres | Remarque |
|---|---|---|
torus | r1 (diamètre principal), r2 (rayon du tube) | Un beignet dans le plan XZ |
capped_torus | sc (direction de la capsule sous forme de vec2), r1, r2 | arc ; sc = (cos θ, sin θ) |
link | le (mi-long), r1 (rayon de l'anneau), r2 (rayon du tube) | Forme en mailles de chaîne |
cône
| Primitif | Paramètres | Remarque |
|---|---|---|
cone | c (angle sous forme de vec2) (sin α, cos α)), h (hauteur) | Cône infini tronqué |
capped_cone | a, b (extrémité de type vec3), r1 (rayon de la base), r2 (rayon de la face supérieure) | corps tronqué |
rounded_cone | a, b (extrémité de type vec3), r1, r2 | Tronc de cône muni d'un capuchon sphérique |
solid_angle | c (angle sous forme de vec2), r (rayon) | Sphère tronquée par un cône |
Figures spéciales
| Primitif | Paramètres | Remarque |
|---|---|---|
vesica_revolved | a, b (axe de type vec3), w (largeur) | Forme de la lentille |
rhombus | la, lb (en diagonale opposée), h (demi-hauteur d'extrusion), r (arrondi) | section en losange |
pyramid | h (hauteur) | base carrée |
octahedron | r (rayon de l'anneau inscrit) | octogone régulier |
hexagonal_prism | r (rayon de l'encerclement), h (à mi-hauteur) | Direction de l'axe Y |
triangular_prism | w (demi-largeur), h (à mi-hauteur) | Direction de l'axe Z |
Paramètres scalaires (r, h, e etc.) sont des nombres ordinaires.
Les paramètres vectoriels (a, b, n) est un objet : { "x": 0.0, "y": 0.0, "z": 0.0 }.
Paramètre Vec2 (c, sc) est un objet : { "x": 0.707, "y": 0.707 }.
Exemple JSON
Ancien :
{ "primitive": "sphere", "parameters": { "r": 0.05 } }
Elipsoï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 ronde :
{ "primitive": "rounded_box", "parameters": { "b": { "x": 0.30, "y": 0.02, "z": 0.30 }, "r": 0.01 } }
Résumé :
{
"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 dans la direction +X) :
{ "primitive": "plane", "parameters": { "n": { "x": 1.0, "y": 0.0, "z": 0.0 }, "h": 0.0 } }
Toroïde :
{ "primitive": "torus", "parameters": { "r1": 0.08, "r2": 0.02 } }
Cône à embout (truncé) :
{
"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 fournie, le service la remplace par une évaluation pseudo-sphérique basée sur la distance par rapport à l'origine.