SDF形状カタログ
ビジュアルリファレンス: イニゴ・キレス — 3D距離関数
SDFとは何ですか?
符号付き距離関数は、空間内の任意の点と、ある形状の 最も近い表面との間の距離を返す。内部では負、表面上ではゼロ、 外部では正となる。この距離は力曲線の入力となる。表面に 近づくほど力は大きくなり、表面を越えると力は全く働かない。
SDFフォームは、ナビゲーションモジュール(バブルフォーム)で使用されます。
形状は、ある primitive そして、1つのブロック 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 (ベクトルv3形式の軸の端点)、 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
}
}
サポートされていないプリミティブが指定された場合、サービスは原点からの距離に基づく 球面評価に切り替わります。