Signed Distance Field
#陰関数 #CG #数学
🤔.icon TODO: Signed Distance Functionへの記事の分離を検討する?
Signed Distance Field (SDF) は、位置ベクトルを入れると物体表面までの距離を返すような関数
ほとんどの場合、距離にはユークリッド距離を用いる
「物体表面」は、厳密には「距離空間における集合の境界」
陰関数の特殊な場合である
物体外部では正の値・物体内部では負の値を取るように設計されることが多い
https://en.wikipedia.org/wiki/Signed_distance_function
SDFの例
無限平面
無限平面は、最も単純に定義できるSDFのひとつ
位置と無限平面の法線との内積を取ったらOK
code:glsl
float sdPlane(vec3 p, vec3 n) {
// assume n to be normalized
return dot(p, n);
}
See: sdPlane
円・球
円や球も、最も単純に定義できるSDFのひとつ
定義が「ある1点からの距離が等しい点の集合」のため、ある一点からの距離に半径を引き算すれば完成
code:glsl
float sdSphere(vec3 p, float r) {
return length(p) - r;
}
See: sdSphere
その他のプロシージャルなSDF
iqの神記事を参照
https://iquilezles.org/articles/distfunctions/
テクスチャ
テクスチャにSDFを格納することも可能
CG文脈では、文字や図形をレンダリングする際に用いられることが多い
初出はImproved Alpha-Tested Magnification for Vector Textures and Special Effects