Skip to main content
Version : 3.5.x

Catalogue des formes SDF

Référence visuelle : Inigo Quilez — Fonctions de distance 3D

Qu'est-ce qu'un SDF ?

Une fonction de distance signée renvoie 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 à une courbe de force : plus on est proche de la surface, plus la force est grande ; plus on s'en éloigne, plus elle est nulle.

Les formes SDF sont utilisées par le module de navigation (forme de bulle).

Une forme est décrite par un primitive et un parameters bloc :

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

Formes de base

PrimitifParamètresRemarques
spherer (rayon)La forme la plus simple
ellipsoida (rayons des demi-axes sous forme de vec3)SDF approximative ; précise pour les forces
boxb (demi-intervalles sous forme de vec3)Aligné sur l'axe
rounded_boxb (demi-feuilles), r (rayon de courbure)Superficie totale = b + r
box_frameb (demi-feuilles), e (épaisseur du bord)Esquisse filaire d'une boîte
planen (vec3 normal), h (décalage le long de n)Demi-espace infini ; n doit être normalisé

Capsules et cylindres

PrimitifParamètresRemarques
capsulea, b (positions des extrémités sous forme de vec3), r (rayon)Capuchons hémisphériques
capsule_verticalh (demi-hauteur), r (rayon)Abréviation de l'axe des Y
capped_cylindera, b (extrémités des axes sous forme de vec3), r (rayon)Embouts plats
capped_cylinder_verticalh (demi-hauteur), r (rayon)Abréviation de l'axe des Y

Famille Torus

PrimitifParamètresRemarques
torusr1 (rayon principal), r2 (rayon du tube)Beignet dans le plan XZ
capped_torussc (direction de cap sous forme de vec2), r1, r2Arc ; sc = (cos θ, sin θ)
linkle (buste), r1 (rayon de l'anneau), r2 (rayon du tube)Forme en mailles

Cônes

PrimitifParamètresRemarques
conec (angle sous forme de vec2 (sin α, cos α)), h (hauteur)Cône infini tronqué à son sommet
capped_conea, b (points d'extrémité sous forme de vec3), r1 (rayon de la base), r2 (rayon supérieur)tronc de cône
rounded_conea, b (points d'extrémité sous forme de vec3), r1, r2Tronc de cône avec des calottes sphériques
solid_anglec (angle sous forme de vec2), r (rayon)Sphère coupée par un cône

Formes exotiques

PrimitifParamètresRemarques
vesica_revolveda, b (axe sous forme de vec3), w (largeur)Forme de la lentille
rhombusla, lb (demi-diagonales), h (demi-hauteur d'extrusion), r (arrondi)Section transversale d'un diamant
pyramidh (hauteur)Base carrée
octahedronr (rayon intérieur)Octaèdre régulier
hexagonal_prismr (rayon de circonférence), h (demi-hauteur)Le long de Y
triangular_prismw (demi-largeur), h (demi-hauteur)Le long de Z
Types de paramètres

Paramètres scalaires (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 }. Paramètres de Vec2 (c, sc) sont des objets : { "x": 0.707, "y": 0.707 }.

Exemples JSON

Sphère :

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

Ellipsoïde (plus large dans les axes 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é :

{ "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 (frontière 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 } }

Cône tronqué:

{
"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 utilise alors par défaut une évaluation de type sphérique basée sur la distance par rapport à l'origine.