欢迎访问 生活随笔!

生活随笔

当前位置: 首页 > 编程资源 > 编程问答 >内容正文

编程问答

ue4场景没阴影_UE4 Mobile使用动态阴影的一些小结

发布时间:2025/4/16 编程问答 30 豆豆
生活随笔 收集整理的这篇文章主要介绍了 ue4场景没阴影_UE4 Mobile使用动态阴影的一些小结 小编觉得挺不错的,现在分享给大家,帮大家做个参考.

UE4在Mobile平台里,除了预先烘焙的静态阴影之外,对于动态物体一般使用两种阴影:调制阴影(Modulated Shadows)和级联阴影(Cascade Shadows,简称CSM)。

调制阴影是UE3时代就已经有的产物,关于它的资料不多,基本只知道它比一般的Shadows要省,而且还能随意更改颜色。调制阴影看上去非常平滑没有锯齿,因此可能是用Shadow Volume生成的。根据虚幻官网的介绍,他们使用调制阴影主要用来解决场景打光过亮导致阴影太淡的问题。由于在游戏制作中一般只有一盏灯是去投射动态阴影,如果场景里还有别的灯光,就会导致这盏投射阴影的灯贡献光照的比例变小,因此投射出的阴影变得不明显。场景师可能就会因此提出需要,要求加深阴影的颜色。由于调制阴影的颜色是自由控制并不是根据灯光计算出来的,自然比一般的阴影要便宜得多。但是实际使用后,我发现调制阴影存在以下的几个问题:

  • 调制阴影只会简单地和场景进行乘积。这就会导致这样一个结果:如果一个角色不是一个整体——比如带着一把武器,那么武器的影子和身体的影子的重叠处会颜色更深,导致阴影看起来不是一个整体。同样如果角色走到预先烘焙好的静态阴影里面,调制阴影同样无法融入静态阴影。
  • (如果只是上述的问题,其实在手机端还是可以接受的,毕竟性能优先嘛。而且在手机上这些问题看上去不是很明显。真正让人不能接受的是下面的问题)

    2. 调制阴影貌似没有做视锥体剔除。

    我们可以在UE4里简单创建一个场景,放入一些Movable Objects。我这里放了几个方块、一艘船以及大量的工具人。

    接着将Directional Light打开Modulated Shadows后,跑到一个空地背对所有的Movable Objects,使用RenderDoc截取一帧画面。

    我们会在RenderDoc里面发现,在ShadowDepths里存了场景里所有Movable Objects的深度信息。并且在渲染完场景后,每个阴影都被渲染了出来,尽管场景里并没有这些物体。

    这意味着即便画面中没有多少物体,调制阴影依然会把场景里所有Movable Objects的阴影计算一遍。这么一来当场景有大量Movable Objects的时候,开销完全没有节省下来,说不定还增加了不少。

    上述这些问题在使用CSM后可以得到完美解决:阴影可以融入任何场景或者静态阴影;在渲染时也进行了视锥体剔除。我们用RenderDoc截一帧会发现,ShadowDepths只存储了视锥体内Movable Objects的阴影,渲染阴影的时候也不会渲染视锥体外的Movable Objects。

    当然CSM的消耗比调制阴影要大,原理可参考这篇文章:https://docs.microsoft.com/en-us/windows/win32/dxtecharts/cascaded-shadow-maps。根据原理我们可以得知,CSM不仅仅要计算光照,还需要收集场景信息去生成frusta信息以解决阴影的Perspective Aliasing问题,在每个frusta之间还需要做blend去消除接缝。我们可以将Cascade的数量调为1即可减少大量消耗,最好不要超过2。这样一来CSM的开销其实并不比调制阴影高多少。

    总结:在Mobile平台里使用动态阴影的时候,如果场景里Movable Objects不多的时候可以考虑调制阴影,其他大多数情况还是用CSM比较好。如果一定要使用调制阴影,最好改一下管线做一下视锥体剔除。我想我可以理解官方为什么快要废弃调制阴影了。

    总结

    以上是生活随笔为你收集整理的ue4场景没阴影_UE4 Mobile使用动态阴影的一些小结的全部内容,希望文章能够帮你解决所遇到的问题。

    如果觉得生活随笔网站内容还不错,欢迎将生活随笔推荐给好友。