URP 的级联阴影优化

借用场景LOD的思想,既然远处的模型替换成了低模,动画看上去也不会动了,那么阴影贴图渲染其实每帧变化并不大,也会随着级联阴影层级的提高变化越来越小;

因此可以想到,对远距离的级联阴影级别下,可以不对每个物体阴影做重新绘制;

将阴影贴图进行cache缓存,并对级联阴影的每个级别的阴影贴图块按不同的刷新率去更新,就可以降低每帧投影体绘制的次数了。

  • 在URP下,主光源级联阴影是通过MainLightShadowCasterPass脚本完成的,拷贝一份MainLightShadowCasterCachedPass,同时修改UniversalRenderer中所有MainLightShadowCasterPass为MainLightShadowCasterCachedPass
  • 由于级联阴影Texture不能每帧创建了,在MainLightShadowCasterCachedPass中移除m_MainLightShadowmapTexture的释放逻辑,并将释放逻辑分离出接口
  • 将MainLightShadowmapTexture的释放逻辑移至UniversalRanderer下的Dispose中,相当于变相延长了它的生命周期
  • 添加bool变量判断是否是第一帧,添加针对ShadowMap的更新数组,数组有几个元素代表了做几帧的更新循环,如1|4代表了第一个级别与第三个级别的级联阴影块,如此处代表了每3帧中第一个级别更新2次,第二个级别更新1次,另外一个创建记录当前运行到多少帧的变量,方便取模按照3帧一个循环更新阴影贴图
  • 修改MainLightShadowCasterCachedPass中ShadowMap创建逻辑,只有当对象为空或者ShadowMap大小发生改变时才创建
  • 修改RenderMainLightCascadeShadowmap中的每帧渲染逻辑替换为按3帧一循环的渲染逻辑,并把RenderShadowSlice替换为修改的RenderShadowSlice,以控制不同级别阴影块的单独绘制,而不是控制整个ShadowMap了
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇