Distance Field soft shadows
摘要:本文介绍基于距离场(SDF)的软阴影技术,通过RayMarching计算安全角度并转换为可见性,使用近似公式提升效率,具有实时性优势但需预计算距离场。
在介绍Distance Field soft shadows之前,我们首先得了解距离场.

距离场:对于每一个点,距离场的值表示该点最近的物体的距离.
距离场一大好处在于混合时的特性.

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

SDF被广泛使用在实时渲染的如RayMarching等的各种技术中.
如果我们能用SDF描述场景,比如这样:

可以发现一个关键点:

我们可以用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来调整阴影软的强度.

优缺点
优点:
- 快(不包括生产距离场的计算)
- 质量高
缺点:
- 需要预计算
- 处理动态物品麻烦
- 非常耗存储
- 有Artifact,常见于接缝处
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 VanishingBlog!


