メインコンテンツへスキップ

SDF 形状カタログ

視覚的な参考資料: イニゴ・キレス — 3D 距離関数

SDF とは?​

符号付き距離関数は、空間内の任意の点から、その形状に最も近い表面までの距離を返します。表面の内側では負、表面上ではゼロ、外側では正となります。この距離が力曲線への入力となり、表面に近いほど力は大きくなり、遠ざかるほど力はゼロになります。

SDF 形状は、ナビゲーション・モジュール(バブル形状)で使用されます。

形状は primitive と parameters ブロックで記述されます:

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

基本形状​

プリミティブパラメータ備考
spherer(半径)最も単純な形状
ellipsoida(vec3 としての半軸半径)近似SDF。力の計算には十分な精度
boxb(vec3 としてのハーフエクステント)軸平行
rounded_boxb(ハーフエクステント)、r(角の半径)全体の大きさ = b + r
box_frameb(ハーフエクステント)、e(線の太さ)ボックスのワイヤーフレームの輪郭
planen(法線 vec3)、h(n (方向のオフセット)無限の半空間。n は正規化されている必要があります

カプセルと円柱​

プリミティブパラメータ備考
capsulea、b(端点の位置、vec3)、r(半径)半球状のキャップ
capsule_verticalh(ハーフの高さ)、r(半径)Y軸の略称
capped_cylindera、b(軸の端点、vec3)、r(半径)平らな端面キャップ
capped_cylinder_verticalh(ハーフの高さ)、r(半径)Y軸の略称

トーラス系​

プリミティブパラメータ備考
torusr1(主半径)、r2(チューブの半径)XZ平面上のドーナツ形状
capped_torussc(キャップ方向、vec2)、r1、r2円弧。sc = (cos θ, sin θ)
linkle(ハーフ長)、r1(リング半径)、r2(チューブの半径)チェーンリンク形状

円錐​

プリミティブパラメータ備考
conec(角度、vec2 (sin α, cos α))、h(高さ)先端が切り取られた無限円錐
capped_conea、b(端点、vec3)、r1(底面の半径)、r2(上部の半径)円錐台
rounded_conea、b(端点、vec3)、r1、r2球状のキャップを持つ円錐台
solid_anglec(角度、vec2)、r(半径)円錐で切り取られた球

特殊な形状​

プリミティブパラメータ備考
vesica_revolveda、b(軸、vec3)、w(幅)レンズの形状
rhombusla、lb(半対角線)、h(押し出しの半分の高さ)、r(丸め)菱形の断面
pyramidh(高さ)正方形の底面
octahedronr(内接半径)正八面体
hexagonal_prismr(外接半径)、h(ハーフの高さ)Y軸方向
triangular_prismw(ハーフ幅)、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
}
}

サポートされていないプリミティブが指定された場合、サービスは 原点からの距離に基づいた球状の評価にフォールバックします。