SDF 形状カタログ
可視化の参考: イニゴ・キレス — 3D距離関数
SDFとは何ですか?
*符号付き距離関数(SDF)*は、空間内の任意の点から形状の最も近い表面までの距離を返します。内部では負、表面上ではゼロ、 外部では正となります。この距離は力曲線の入力として使用されます。表面に近づくほど力は大きくなり、遠ざかるほど力は小さくなり、最終的にゼロになります。
SDFの形状はナビゲーションモジュールで使用されます(バブル形状)。
形状は、ある primitive と一つ parameters 「ブロック」の説明:
{
"shape": {
"primitive": "sphere",
"parameters": { "r": 0.05 }
}
}
基本形状
| 図形要素 | パラメータ | 説明 |
|---|---|---|
sphere | r(半径) | 最も単純な形状 |
ellipsoid | a(vec3 で表される半軸半径) | SDFの近似;力の計算が比較的正確である |
box | b(vec3 で表される半辺の長さ) | 座標軸に合わせる |
rounded_box | b(半辺の長さ)、r(角丸の半径) | 全寸法 = b + r |
box_frame | b(半辺の長さ)、e(縁の厚さ) | 直方体のワイヤーフレーム輪郭 |
plane | n(法線ベクトル,vec3)、h(沿 n (方向のずれ) | 無限半空間;n 正規化済みである必要があります |
カプセル体と円柱体
| 図形要素 | パラメータ | 説明 |
|---|---|---|
capsule | a、b(端点の位置,vec3)、r(半径) | 半球形エンドキャップ |
capsule_vertical | h(半高)、r(半径) | Y軸の略記法 |
capped_cylinder | a、b(軸端点、vec3)、r(半径) | 平面エンドキャップ |
capped_cylinder_vertical | h(半高)、r(半径) | Y軸の略記法 |
環面シリーズ
| 図形要素 | パラメータ | 説明 |
|---|---|---|
torus | r1(主半径)、r2(管の半径) | XZ 平面内のドーナツ形状 |
capped_torus | sc(ベクトル2の方向)、r1、r2 | 円弧;sc = (cos θ, sin θ) |
link | le(半長)、r1(円周半径)、r2(管の半径) | チェーンリンクの形状 |
円錐体
| 図形要素 | パラメータ | 説明 |
|---|---|---|
cone | c(角度,vec2 (sin α, cos α))、h(高度) | 頂点で切断された無限円錐 |
capped_cone | a、b(端点,vec3)、r1(底面の半径)、r2(上面半径) | 円台 |
rounded_cone | a、b(端点,vec3)、r1、r2 | 球形の端蓋が付いた円錐台 |
solid_angle | c(角度,vec2)、r(半径) | 円錐によって切り取られた球体 |
特殊形状
| 図形要素 | パラメータ | 説明 |
|---|---|---|
vesica_revolved | a、b(軸、vec3)、w(幅) | レンズ型 |
rhombus | la、lb(半対角線)、h(引張半高)、r(角丸) | 菱形断面 |
pyramid | h(高度) | 底面が正方形 |
octahedron | r(内切半径) | 正八面体 |
hexagonal_prism | r(外接円の半径)、h(半高) | Y軸に沿って |
triangular_prism | w(半角)、h(半高) | Z軸に沿って |
パラメータ型
スカラーパラメータ(r、h、e など)は通常の数値です。
ベクトルパラメータ(a、b、n)を対象として:{ "x": 0.0, "y": 0.0, "z": 0.0 }。
Vec2 パラメータ(c、sc)を対象として:{ "x": 0.707, "y": 0.707 }。
JSON の例
球体:
{ "primitive": "sphere", "parameters": { "r": 0.05 } }
楕球体(X/Z方向がより広い):
{ "primitive": "ellipsoid", "parameters": { "a": { "x": 0.06, "y": 0.03, "z": 0.06 } } }
直方体:
{ "primitive": "box", "parameters": { "b": { "x": 0.04, "y": 0.02, "z": 0.04 } } }
角丸長方体:
{ "primitive": "rounded_box", "parameters": { "b": { "x": 0.30, "y": 0.02, "z": 0.30 }, "r": 0.01 } }
カプセル本体:
{
"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
}
}
平面(+X方向の境界):
{ "primitive": "plane", "parameters": { "n": { "x": 1.0, "y": 0.0, "z": 0.0 }, "h": 0.0 } }
円面:
{ "primitive": "torus", "parameters": { "r1": 0.08, "r2": 0.02 } }
円台(円錐台):
{
"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
}
}
サポートされていない図形要素が指定された場合、サービスは 原点からの距離に基づく準球面評価に切り替わります。