SDF 形状カタログ
視覚的な参考資料: イニゴ・キレス — 3D 距離関数
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(キャップ方向、vec2)、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
}
}
サポートされていないプリミティブが指定された場合、サービスは 原点からの距離に基づいた球状の評価にフォールバックします。