Passer directement au contenu principal

Catalogue des formes SDF

Ressources visuelles : Inigo Quilez — Fonctions de distance en 3D

Qu'est-ce que le SDF ?​

La fonction de distance signéerenvoie la distance entre un point quelconque de l'espace et la surface la plus proche de la forme. Elle estnégativeà l'intérieur,nullesur la surface etpositiveà l'extérieur. Cette distance sert d'entrée à la courbe de force : plus on se rapproche de la surface, plus la force est importante, et plus on s'en éloigne, plus la force tend vers zéro.

La forme SDF est utilisée dans le module Navigation (forme en bulle).

La forme est primitive et parameters Il est écrit sous forme de blocs :

{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}

Formes de base​

PrimitiveParamètresRemarques
spherer(rayon)La forme la plus simple
ellipsoida(rayon du demi-axe sous forme de vec3)SDF approximative. Précision suffisante pour le calcul des forces
boxb(demi-extension sous forme de vec3)Parallélisme des axes
rounded_boxb(demi-extension),r(rayon de l'angle)Dimensions totales = b + r
box_frameb(demi-extension),e(Épaisseur des bords)Contour filaire de la boîte
planen(normale vec3),h(n (décalage de direction)Un demi-espace infini.n doit être normalisé

Capsules et cylindres​

PrimitiveParamètresRemarques
capsulea,b(position des sommets, vec3),r(rayon)Capuchon hémisphérique
capsule_verticalh(demi-hauteur),r(rayon)Abréviation de l'axe Y
capped_cylindera,b(extrémité de l'axe, vec3),r(rayon)Capuchon à face plane
capped_cylinder_verticalh(demi-hauteur),r(rayon)Abréviation de l'axe Y

Système torique​

PrimitiveParamètresRemarques
torusr1(rayon principal),r2(rayon du tube)Forme de beignet sur le plan XZ
capped_torussc(direction de la casquette, vec2),r1,r2Arc.sc = (cos θ, sin θ)
linkle(demi-longueur),r1(rayon de l'anneau),r2(rayon du tube)Forme des maillons de la chaîne

cône​

PrimitiveParamètresRemarques
conec(angle, vec2 (sin α, cos α)),h(Hauteur)Cône infini tronqué à sa pointe
capped_conea,b(point d'extrémité, vec3),r1(rayon de la base),r2(rayon supérieur)tronc de cône
rounded_conea,b(point d'extrémité, vec3),r1,r2un tronc de cône surmonté d'un capuchon sphérique
solid_anglec(angle, vec2),r(rayon)Sphère découpée par un cône

Formes particulières​

PrimitiveParamètresRemarques
vesica_revolveda,b(axe, vec3),w(largeur)Forme de la lentille
rhombusla,lb(demi-diagonale),h(demi-hauteur de l'extrusion),r(Arrondi)section en losange
pyramidh(Hauteur)une base carrée
octahedronr(rayon d'encerclement)Octaèdre régulier
hexagonal_prismr(rayon extérieur),h(demi-hauteur)Direction de l'axe Y
triangular_prismw(demi-largeur),h(demi-hauteur)Dans la direction de l'axe Z
Type des paramètres

Paramètres scalaires (r,h,e (etc.) sont de simples valeurs numériques. Les paramètres vectoriels (a,b,n) est un objet :{ "x": 0.0, "y": 0.0, "z": 0.0 }。 Paramètres Vec2 (c,sc) est un objet :{ "x": 0.707, "y": 0.707 }。

Exemple de JSON​

Ballon :

{ "primitive": "sphere", "parameters": { "r": 0.05 } }

Ellipsoïde(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 } } }

Encadré aux coins arrondis :

{ "primitive": "rounded_box", "parameters": { "b": { "x": 0.30, "y": 0.02, "z": 0.30 }, "r": 0.01 } }

Capsule :

{
"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 } }

Toroïde :

{ "primitive": "torus", "parameters": { "r1": 0.08, "r2": 0.02 } }

Cône à sommet(tronc de cône) :

{
"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 recourt à une approximation sphérique basée sur la distance par rapport à l'origine.