符号付き距離関数


符号付き距離関数(ふごうつききょりかんすう、テンプレート:Lang-enまたはテンプレート:Lang-en、SDF)は、与えられた点xから距離空間における集合Ωの境界までのテンプレート:仮リンクである。xがΩの内部にあるかどうかによって符号が決まる。この関数は、Ωの内部の点xでは正の値を持ち、Ωの境界に近づくにつれて値が減少し、符号付き距離関数がゼロになる場所でΩの境界に達し、Ωの外部では負の値を取る[1]。負の値を内部、正の値を外部とする規約が採用されることもある[2]。
定義
テンプレート:Mathを距離空間テンプレート:Mathの部分集合とし、をその境界とする。テンプレート:Mathの点テンプレート:Mvarとテンプレート:Mvarの部分集合との距離は自然に次のように定義される。 ここでは下限を表す。
点テンプレート:Mvarからテンプレート:Mvarのまでの符号付き距離関数は次のように定義される。
ユークリッド空間における特性
Ωがユークリッド空間Rnの区分的に滑らかな境界を持つ部分集合である場合、符号付き距離関数はほとんど至る所で微分可能であり、その勾配はアイコナール方程式を満たす。
Ωの境界がk ≥ 2でCk(滑らかな関数#滑らかさの分類を参照)である場合、dはΩの境界に十分に近い点でCkである。テンプレート:Sfn 特に、境界f上においては
を満たす。ここでNは内向きの法ベクトル場である。したがって、符号付き距離関数は法ベクトル場の微分可能な拡張である。特に、Ωの境界における符号付き距離関数のヘッセ行列はテンプレート:仮リンクを与える。
さらに、Ωの境界に十分に近くfがその上で2回連続的に微分可能である領域Γに対し、符号付き距離関数と最も近い境界点の変数変換のヤコビアンには形作用素Wxを用いた公式が存在する。特に、T(∂Ω, μ)がΩの境界から距離μ以内の点の集合(つまり、半径μの管状近傍)であり、gがΓ上の絶対可積分関数である場合、
が成り立つ。ここでテンプレート:Mathは行列式を示し、dSuは面積分を取ることを示すテンプレート:Sfn。
アルゴリズム
符号付き距離関数を計算するためのアルゴリズムには、効率的なテンプレート:仮リンク、テンプレート:仮リンク[3] およびより一般的なテンプレート:仮リンクがある。
ボクセルレンダリング向けには、タクシー幾何学でSDFを計算するためにテンプレート:仮リンクを使用する高速アルゴリズムが存在する[4]。
応用

符号付き距離関数が利用される分野の例としては、テンプレート:仮リンク[5]、テンプレート:仮リンク、コンピュータビジョンなどがある[6][7]。
SDFは2000年代半ばからレイマーチングの実装においてリアルタイムレンダリングにおけるオブジェクトのジオメトリを記述するために使用され始めた。2007年にはValveが、SDFを使用して大きなピクセルサイズ(または高DPI)の滑らかなフォントをGPUアクセラレーションでレンダリングしている[8]。Valveの手法は(連続的な)ベクタ空間での問題を解く計算複雑性を避けるためにラスタ空間で実行されるため完璧ではなく、レンダリングされたテキストは角が丸まってしまうことが多い。2014年には、en:Behdad Esfahbodによって改良された手法が発表された。BehdadのGLyphyはフォントのベジエ曲線をスプライン曲線で近似し、グリッドベースの離散化手法(遠すぎる点をカリングする)によってリアルタイムで実行する[9]。
複数のオブジェクトをレンダリングする際のピクセルの侵入エラーを最小化するための損失関数としてSDFの修正版が使われている[10]。オブジェクトに属さないピクセルに対して、それがレンダリング時にオブジェクトの外側にある場合はペナルティは課さず、内部にある場合はその距離に比例した正の値を課すというものである。
2020年には、FOSSのゲームエンジンGodot 4.0がSDFベースのリアルタイムGI(SDFGI)を実装した[11]。既存のボクセルベースのGIよりパフォーマンスは劣るものの[12]、広い空間に適用可能であるためオープンワールドゲームの開発に用いることができる[11]。
2023年には、すべてのUI要素をGPUを使用して描画する「GPUI」UIフレームワークがリリースされ、120 fpsでレンダリングを行うZedコードエディタを開発したと発表された。このフレームワークは多くの部分でSDFを使用し、Inigo QuilezによるSDF向け幾何学図形プリミティブ、Evan Wallace(Figmaの共同創設者)のSDFにおける近似ガウシアンぼかし、および丸みを帯びた長方形のSDFを利用している[13]。
脚注
関連項目
- ↑ テンプレート:Cite conference
- ↑ テンプレート:Cite journal
- ↑ Zhao Hongkai. A fast sweeping method for eikonal equations. Mathematics of Computation, 2005, 74. Jg., Nr. 250, S. 603-627.
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite book
- ↑ テンプレート:Cite book
- ↑ テンプレート:Cite book
- ↑ テンプレート:Cite book
- ↑ テンプレート:Cite AV mediaテンプレート:Cbignore Source Code
- ↑ テンプレート:Cite arXiv
- ↑ 11.0 11.1 テンプレート:Cite web
- ↑ テンプレート:Cite web
- ↑ テンプレート:Cite web