阴影衰减和计算

工程源码: git工程源碼
作者原文(英文版):URP英文网址
(1)阴影痤疮和渗透
在这里插入图片描述
这是产生阴影渗透和痤疮的根本原因:

shadowBias 的偏移的大小: 基于斜率 slope 来动态算出偏移的大小
影物飘离

(2)软阴影的实现: PCSS 相关的逻辑 和SDF
不想再详细的说了

(3)关于阴影遮罩shadowMask对光源数量的限制:
场景中的灯光的个数:
(1)ShadowMask: 最多支持4个mixed的
(2)单帧最多64个 非dirLight, (场景可以支持更多) ,会按照重要性排序,多余的会被忽略

在这里插入图片描述
在这里插入图片描述
(三)阴影平坠 Shadow Pancaking
平坠对使用 正交投影阴影的 方向光有效
对有固定位置的other光源并不适用

(四)阴影的衰减:

阴影的衰减 要插值两次

第一次: 用着色点在世界空间中的位置 和 maxShadowDistance 的比例
即: 超过maxShadowDistance就衰减为0,所以先算出此点在全局中的强度(这里只考虑 Quality中设置为distance shadowMask的情况, 其实和shadowMask 的计算也区别不大)
第二次: 由shadowMap采样算出的强度(此处 比如取4个点 ,每个点的值 在阴影内为1,不在阴影内为0, 加权求平均)

MixBakedAndRealtimeShadows: 混合baked和实时的阴影强度:包含第三次和第四次

第三次: 算出 shadowMask中的阴影强度(烘焙强度)

shadow = lerp(烘焙强度, 实时阴影强度, 全局强度)

第四次: 应用灯光强度和 第三次算出的shadow做插值

return lerp(1.0, shadow, 灯自身的强度)

最后的总结: 感觉每啥可说的, 最近脑子跟不上了,稍微整理一下。。
(1)感觉很明白的。过几天再来个相似的东西,就有点懵了, 宏观上感觉知道,
(2) 细节上混乱不清了,是在自我欺骗吗 哈哈哈哈哈哈。。。。。
思考,一定要思考 , 而不是麻木不仁的感觉“这看懂了,这会了,这不难,这很简单”的错觉

おすすめ

転載: blog.csdn.net/js0907/article/details/121155522