SDF (Signed Distance Field) 基础理论与计算
一、SDF 基础理论
SDF (Signed Distance Field) 是一种空间表示方法,核心是通过
有符号距离 描述空间中点与目标几何表面的关系。其定义为:对空间中任意点 ( mathbf{x} ),SDF 函数 ( phi(mathbf{x}) ) 输出点 ( mathbf{x} ) 到目标几何表面的 最短距离,且距离的符号表示点与表面的相对位置——通常规定 表面外部点为正,内部点为负或反之,需统一规则。
数学表达 为:
[ phi(mathbf{x}) = pm d ]
其中 ( d ) 是点 ( mathbf{x} ) 到几何表面的最短欧氏距离,符号由点的内外位置决定。当 ( phi(mathbf{x}) = 0 ) 时,点 ( mathbf{x} ) 恰好位于几何表面上。
二、SDF 计算方法
SDF 的计算需根据几何复杂度选择不同策略,核心分为 析计算 与 数值计算 两类。
1. 析计算
适用于 简单几何形状如球体、立方体、平面等,可直接推导 SDF 函数表达式。
- 球体:设球心为 ( mathbf{c} ),半径为 ( r ),则点 ( mathbf{x} ) 的 SDF 为:
[ phi(mathbf{x}) = |mathbf{x} - mathbf{c}| - r ]
- 轴对齐立方体:设立方体中心为 ( mathbf{c} ),半长、半宽、半高分别为 ( a,b,c ),则:
[ phi(mathbf{x}) = maxleft(|x - c_x| - a, |y - c_y| - b, |z - c_z| - cright) ]
- 平面:设平面法向量为 ( mathbf{n} )单位向量,平面上一点为 ( mathbf{p} ),则:
[ phi(mathbf{x}) = (mathbf{x} - mathbf{p}) cdot mathbf{n} ]
2. 数值计算
适用于 复杂或隐式定义的几何如三维模型、血管、地形等,需通过算法近似求距离。
- 采样法:在规则网格如体素网格上离散化空间,对每个网格点计算到几何表面的最短距离。核心是通过遍历几何表面的顶点/面片,计算点到各图元的距离并取最小值,效率较低但直观。
- 快速行进法FMM:基于水平集理论,从已知表面点( phi=0 )出发,沿梯度方向“推进”计算周围点的 SDF。利用优先级队列逐步扩展距离场,确保计算顺序距离递增,适用于动态几何或拓扑变化场景。
- 水平集方法:将几何表面表示为高维函数如三维空间中的四维函数的零水平集,通过求 Hamilton-Jacobi 方程演化距离场,支持几何融合、变形等复杂操作。
SDF 通过简洁的数学形式将几何信息编码为连续函数,在计算机图形学如实时渲染、体积绘制、物理模拟碰撞检测、医学影像器官分割等领域有广泛应用,其核心价值在于将复杂几何关系转化为可高效计算的数值场。