

数学とその応用において、符号付き距離関数または符号付き距離場( SDF ) は、計量空間(幾何学的形状の表面など)内の集合Ωの境界までの、与えられた点xの直交距離であり、符号はx がΩ の内部にあるかどうかによって決まります。この関数は、Ω の内部にある点xでは正の値を取り、符号付き距離関数がゼロとなる Ω の境界にx が近づくにつれて値が減少し、Ω の外部では負の値を取ります。 [ 1 ]ただし、別の慣例 (Ω の内部で負、外部で正) が採用されることもあります。[ 2 ]この概念は、方向付き距離関数/場という名前で呼ばれることもあります。
Ωを距離dを持つ距離空間Xの部分集合とし、をその境界とする。Xの点xと部分集合との間の距離Xの通常どおり定義される
どこ下限値を表します。
Xの点xから定義される
Ωが区分的に滑らかな境界を持つユークリッド空間R nの部分集合である場合、符号付き距離関数はほとんど至るところで微分可能であり、その勾配はアイコナール方程式を満たす。
Ωの境界がk ≥ 2に対してC kである場合(微分可能性クラスを参照)、dはΩの境界に十分近い点ではC kとなる。 [ 3 ]特に、境界上ではfは以下を満たす。
ここで、Nは内向き法線ベクトル場である。したがって、符号付き距離関数は法線ベクトル場の微分可能な拡張である。特に、 Ω の境界上の符号付き距離関数のヘッセ行列は、ワインガルテン写像を与える。
さらに、ΓがΩの境界に十分近い領域であり、 fがその上で2回連続微分可能である場合、符号付き距離関数と最も近い境界点を用いて、変数変換のヤコビアンを表すワインガルテン写像W xを含む明示的な公式が存在する。具体的には、 T ( ∂ Ω, μ )がΩの境界から距離μ以内の点の集合(すなわち半径μの管状近傍)であり、gがΓ上で絶対積分可能な関数である場合、
符号付き距離関数を計算するためのアルゴリズムには、効率的な高速マーチング法、高速スイープ法[ 5 ] 、およびより一般的なレベルセット法が含まれます。
ボクセルレンダリングの場合、タクシージオメトリのSDFを計算する高速アルゴリズムは、面積合計テーブルを使用します。[ 6 ]

符号付き距離関数は、例えばリアルタイムレンダリング[ 7 ]、例えばSDFレイマーチング法、コンピュータビジョン[ 8 ] [ 9 ]などに適用されます。
SDF は、2000 年代半ばから、通常はレイマーチングのコンテキストで、リアルタイム レンダリングにおけるオブジェクト ジオメトリの記述に使用されてきました。2007 年までに、 Valve は、ゲームでGPUアクセラレーションを使用して大きなピクセル サイズ (または高 DPI )の滑らかなフォントをレンダリングするために SDF を使用するようになりました。 [ 10 ] Valve の方法は、(連続) ベクトル空間で問題を解決する計算の複雑さを回避するためにラスタ空間で実行されるため、完璧ではありません。レンダリングされたテキストは、鋭い角を失うことがよくあります。2014 年に、 Behdad Esfahbodによって改良された方法が発表されました。Behdad の GLyphy は、フォントのベジェ曲線をアーク スプラインで近似し、グリッド ベースの離散化技術 (遠すぎる点をカリングする) によって高速化され、リアルタイムで実行されます。[ 11 ]
複数のオブジェクトをレンダリングする際のピクセルの相互浸透のエラーを最小限に抑える損失関数として、SDF の修正版が導入されました。 [ 12 ]特に、オブジェクトに属さないピクセルについては、レンダリング時にオブジェクトの外側にある場合はペナルティは課されません。オブジェクト内にある場合は、オブジェクト内の距離に比例した正の値が課されます。
2020年、FOSSゲームエンジンGodot 4.0は、よりリアルなボクセルベースのGIとベイクドGIの中間的な機能であるSDFベースのリアルタイムグローバルイルミネーション(SDFGI)を実装しました。その主な利点は、無限空間に適用できることであり、開発者はオープンワールドゲームにこれを利用できます。[ 13 ]
2023年、Zedテキストエディタの開発者たちは、GPUを使用してすべてのUI要素を120fpsで描画するGPUIフレームワークを発表しました。この作業では、Inigo QuilezのSDFの幾何学的プリミティブのリスト、Figmaの共同創設者であるEvan WallaceのSDFのガウスぼかし、および新しい角丸長方形SDFが使用されています。[ 14 ]