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 graphique | Paramètres | Explication |
|---|---|---|
sphere | r(rayon) | Les formes les plus simples |
ellipsoid | a(rayon du demi-axe exprimé sous forme de vec3) | Approximation de la SDF ; le calcul des forces est relativement précis |
box | b(longueur de la demi-arête exprimée en vec3) | Aligné avec les axes de coordonnées |
rounded_box | b(longueur d'un côté),r(rayon d'arrondi) | Dimensions totales = b + r |
box_frame | b(longueur d'un côté),e(épaisseur du bord) | Contour filaire d'un parallélépipède rectangle |
plane | n(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 graphique | Paramètres | Explication |
|---|---|---|
capsule | a,b(position du point d'extrémité, vec3),r(rayon) | capuchon hémisphérique |
capsule_vertical | h(demi-hauteur),r(rayon) | Forme abrégée de l'axe Y |
capped_cylinder | a,b(point d'extrémité de l'axe, vec3),r(rayon) | Capuchon plat |
capped_cylinder_vertical | h(demi-hauteur),r(rayon) | Forme abrégée de l'axe Y |
Série « Huanmian »
| Élément graphique | Paramètres | Explication |
|---|---|---|
torus | r1(rayon principal),r2(rayon du tuyau) | Forme de beignet dans le plan XZ |
capped_torus | sc(direction de la pointe du chapeau, vec2),r1,r2 | arc ;sc = (cos θ, sin θ) |
link | le(mi-long),r1(rayon de l'anneau),r2(rayon du tuyau) | Forme des maillons |
Cône
| Élément graphique | Paramètres | Explication |
|---|---|---|
cone | c(angle, vec2 (sin α, cos α)),h(Altitude) | Cône infini tronqué à son sommet |
capped_cone | a,b(point d'extrémité, vec3),r1(rayon de la base),r2(rayon de la face supérieure) | Table ronde |
rounded_cone | a,b(point d'extrémité, vec3),r1,r2 | Cône muni d'un embout sphérique |
solid_angle | c(angle, vec2),r(rayon) | Sphère coupée par un cône |
Formes spéciales
| Élément graphique | Paramètres | Explication |
|---|---|---|
vesica_revolved | a,b(axe, vec3),w(largeur) | en forme de lentille |
rhombus | la,lb(demi-diagonale),h(hauteur à mi-hauteur),r(coins arrondis) | section en losange |
pyramid | h(Altitude) | base carrée |
octahedron | r(rayon de courbure) | Octaèdre régulier |
hexagonal_prism | r(rayon du cercle circonscrit),h(demi-hauteur) | le long de l'axe Y |
triangular_prism | w(demi-largeur),h(demi-hauteur) | le long de l'axe Z |
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.