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使用动态阴影的一些小结的全部内容,希望文章能够帮你解决所遇到的问题。
- 上一篇: joc杂志影响因子2019_另类统计!2
- 下一篇: 和smi_nvidia-smi 报错:无