SDF図形カタログ
視覚資料: イニゴ・キレス — 3D距離関数
SDFとは何ですか?
*符号付き距離関数(Signed Distance Function)*は、空間上の任意の点から図形の最も近い表面までの距離を返します。内部は負の数、表面上は0、外部は正の数となります。この距離は力曲線の入力となります。つまり、表面に近づくほど力は大きくなり、遠ざかるほど力はなくなります。
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 | ho(arc); 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
}
}
サポートされていないプリミティブが指定された場合、サービスは原点からの距離に基づく 球面近似評価に置き換えます。