Aller directement au corps du texte

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​

PrimitifParamètresRemarque
spherer (rayon)Les figures les plus simples
ellipsoida (demi-axe et rayon sous forme de vec3)SDF approximative ; précise pour le calcul des forces
boxb (demi-dimension de type vec3)Alignement des axes
rounded_boxb (demi-taille), r (rayon de l'angle)Taille totale = b + r
box_frameb (demi-taille), e (épaisseur des bords)Contours en fil de fer de la boîte
planen (normale de type vec3), h (n Décalage de direction)Semi-espace infini ; ndoit être normalisé

Capsules et cylindres​

PrimitifParamètresRemarque
capsulea, b (position des extrémités sous forme de vec3), r (rayon)capuchon hémisphérique
capsule_verticalh (à mi-hauteur), r (rayon)Abréviation de « axe Y »
capped_cylindera, b (extrémité d'axe de type vec3), r (rayon)Embout plat
capped_cylinder_verticalh (à mi-hauteur), r (rayon)Abréviation de « axe Y »

Gamme Torus​

PrimitifParamètresRemarque
torusr1 (diamètre principal), r2 (rayon du tube)Un beignet dans le plan XZ
capped_torussc (direction de la capsule sous forme de vec2), r1, r2arc ; sc = (cos θ, sin θ)
linkle (mi-long), r1 (rayon de l'anneau), r2 (rayon du tube)Forme en mailles de chaîne

cône​

PrimitifParamètresRemarque
conec (angle sous forme de vec2) (sin α, cos α)), h (hauteur)Cône infini tronqué
capped_conea, b (extrémité de type vec3), r1 (rayon de la base), r2 (rayon de la face supérieure)corps tronqué
rounded_conea, b (extrémité de type vec3), r1, r2Tronc de cône muni d'un capuchon sphérique
solid_anglec (angle sous forme de vec2), r (rayon)Sphère tronquée par un cône

Figures spéciales​

PrimitifParamètresRemarque
vesica_revolveda, b (axe de type vec3), w (largeur)Forme de la lentille
rhombusla, lb (en diagonale opposée), h (demi-hauteur d'extrusion), r (arrondi)section en losange
pyramidh (hauteur)base carrée
octahedronr (rayon de l'anneau inscrit)octogone régulier
hexagonal_prismr (rayon de l'encerclement), h (à mi-hauteur)Direction de l'axe Y
triangular_prismw (demi-largeur), h (à mi-hauteur)Direction de l'axe Z
Types de paramètres

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.