Aller au contenu principal

Catalogue des formes SDF

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

Qu'est-ce que le SDF ?​

*La fonction de distance signée (SDF)* renvoie la distance entre un point quelconque de l'espace et la surface la plus proche de la forme :cettedistanceest négative à l'intérieur,nulle sur la surfaceet positive à l'extérieur. Cette distance sert de donnée d'entrée à la courbe de force : plus on se rapproche de la surface, plus la force est grande ; plus on s'en éloigne, plus la force diminue, jusqu'à devenir nulle.

La forme SDF est utilisée par le modulede navigation(forme de bulle).

La forme est définie par un primitive et un parameters Description du bloc :

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

Formes de base​

Élément graphiqueParamètresExplication
spherer(rayon)Les formes les plus simples
ellipsoida(rayon du demi-axe exprimé sous forme de vec3)Approximation de la SDF ; le calcul des forces est relativement précis
boxb(longueur de la demi-arête exprimée en vec3)Aligné avec les axes de coordonnées
rounded_boxb(longueur d'un côté),r(rayon d'arrondi)Dimensions totales = b + r
box_frameb(longueur d'un côté),e(épaisseur du bord)Contour filaire d'un parallélépipède rectangle
planen(vecteur normal, vec3),h(le long de n (décalage de direction)Demi-espace infini ;n Doit être normalisé

Corps de capsule et corps cylindrique​

Élément graphiqueParamètresExplication
capsulea,b(position du point d'extrémité, vec3),r(rayon)capuchon hémisphérique
capsule_verticalh(demi-hauteur),r(rayon)Forme abrégée de l'axe Y
capped_cylindera,b(point d'extrémité de l'axe, vec3),r(rayon)Capuchon plat
capped_cylinder_verticalh(demi-hauteur),r(rayon)Forme abrégée de l'axe Y

Série « Huanmian »​

Élément graphiqueParamètresExplication
torusr1(rayon principal),r2(rayon du tuyau)Forme de beignet dans le plan XZ
capped_torussc(direction de la pointe du chapeau, vec2),r1,r2arc ;sc = (cos θ, sin θ)
linkle(mi-long),r1(rayon de l'anneau),r2(rayon du tuyau)Forme des maillons

Cône​

Élément graphiqueParamètresExplication
conec(angle, vec2 (sin α, cos α)),h(Altitude)Cône infini tronqué à son sommet
capped_conea,b(point d'extrémité, vec3),r1(rayon de la base),r2(rayon de la face supérieure)Table ronde
rounded_conea,b(point d'extrémité, vec3),r1,r2Cône muni d'un embout sphérique
solid_anglec(angle, vec2),r(rayon)Sphère coupée par un cône

Formes spéciales​

Élément graphiqueParamètresExplication
vesica_revolveda,b(axe, vec3),w(largeur)en forme de lentille
rhombusla,lb(demi-diagonale),h(hauteur à mi-hauteur),r(coins arrondis)section en losange
pyramidh(Altitude)base carrée
octahedronr(rayon de courbure)Octaèdre régulier
hexagonal_prismr(rayon du cercle circonscrit),h(demi-hauteur)le long de l'axe Y
triangular_prismw(demi-largeur),h(demi-hauteur)le long de l'axe Z
Types de paramètres

Paramètres scalaires (r,h,e etc.) sont des valeurs ordinaires. Les paramètres vectoriels (a,b,n) :{ "x": 0.0, "y": 0.0, "z": 0.0 }。 Paramètres de Vec2 (c,sc) :{ "x": 0.707, "y": 0.707 }。

Exemple JSON​

Sphère :

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

Parallélépipède rectangle :

{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }

Parallélépipède rectangle à angles arrondis :

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

Corps de la 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 } }

Cercle :

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

Table ronde(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 des éléments graphiques non pris en charge sont fournis, le service recourt alors à une évaluation quasi-sphérique basée sur la distance par rapport à l'origine.