Level set方法中尖锐几何附近求解梯度不准确的问题

在一个准确的SDF场$\phi$中,有$\nabla|\phi|=1$,然而,这一情况在离散到网格的SDF中并不严格成立;

原因是,如果源几何体的表面有尖点,即值连续但导数不连续的点($C_0$连续),则在这一处尖点的外角平分线上,无论用哪边的采样点来求数值差分,得到的都是不完整的信息。而此处的中心差分又没有意义。

例如,矩形的角点。假如矩形的两边分别与$x,y$轴平行,则在其离散的SDF中,对于接近第一象限角点外角平分的网格点,其 $ \phi _x $ 在一侧为0,在另一侧为1;$y$轴也是一样的情况。按Godunov格式,取得此处的导数为$(1,1)$;然而实际上此处的梯度是难以准确定义的,因为在极坐标${\theta}{\in}(0,{\pi}/2)$范围内,无论向哪个方向走,$\phi$的增长率都是1。

此时,Level set方法实际上仍然可以工作,因为我们知道$|\nabla \phi|=1$

然而,实际计算中,如果采用沿坐标轴分别计算$x,y,z$方向的方法计算$\nabla \phi$,在这种增长率$\approx$最大值的方向有多个的情况下,是不能得到正确的$\nabla \phi$的。 + 这是Level set 方法处理尖锐几何体的很大障碍。对于流体中常见的$C_2$连续几何体,此问题造成的影响可以通过加密网格来无限缩小。然而对于有尖点的物体,不管网格取的多小,此效应都不会缓解。

  • 最后更改: 2022/01/04 15:44