本文へスキップ
バージョン: 3.5.x

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
}
}

サポートされていないプリミティブが指定された場合、サービスは 原点からの距離に基づく球体のような評価に切り替わります。