在介绍Distance Field soft shadows之前,我们首先得了解距离场.

距离场

距离场:对于每一个点,距离场的值表示该点最近的物体的距离.

距离场一大好处在于混合时的特性.

这样就可以非常方便地去做物体的Blending.
Blending with SDF

SDF被广泛使用在实时渲染的如RayMarching等的各种技术中.

如果我们能用SDF描述场景,比如这样:
Distance Field Visualization

可以发现一个关键点:

我们可以用SDF转换为”安全角度”–即有多少角度不会被遮挡,进而求Visibility.

即: SDF -> 安全角度 -> Visibility

而这正是Distance Field soft shadows的核心思想.

计算安全角度

对于我们的Shading point ,我们向光源做RayMarching.

然后在RayMarching过程中,每一步都可以计算出一个安全角度,取最小的角度.

计算角度很显然可以使用arcsin(SDF(p)/(p-o))然后进一步计算visibility.但是实时渲染比起准确,更追求效率.因此实际上使用的公式是min(k*SDF(p)/(p-0),1.0).

这样做不仅可以增加运算效率,还可以用k来调整阴影软的强度.
k的影响

优缺点

优点:

  • 快(不包括生产距离场的计算)
  • 质量高

缺点:

  • 需要预计算
  • 处理动态物品麻烦
  • 非常耗存储
  • 有Artifact,常见于接缝处