Distance Field soft shadows
在介绍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!