Unity实时灯光优化

3回答

Unity实时灯光优化

提问者 Ace 2017-08-31 1.2k浏览
Unity的实时光性能消耗较大,因为实时光的影响,物体也无法batch,有什么方案可以达到实时光照效果而不那么耗费性能呢,有什么具体的实现思路?

快来消灭0回答吧

{{ dataList.answer_count | view-format }}回答
  • gavindong 2017-09-01 14:39
    专家回答
    如果你用Forward Rendering,实时光的开销是比较大的,所以需要尽量控制实时光的数量,最好就是一个主方向光
    除非是用延迟渲染,Unity最新版本在IOS平台上开放了延迟渲染,但Android仍然不开放。延迟渲染对显存带宽要求非常高,在移动平台上会存在瓶颈
    因此建议还是使用LightMap静态烘焙。Unity最近新增了ShadowMask的烘焙方式,阴影被单独烘焙到一张贴图上,渲染时,近处物件采用实时阴影,远处物件仍然是静态阴影,这样可以在实时光效果和性能之间得到一个平衡
    如果在场景里放置了大量LightProbe,会打断Static Batching,Unity只会将相同LightProbe的物件进行静态合批,你可以尝试用Instance方式单独绘制这些物件,将LightProbe产生的球谐函数参数作为Instance变量传入,可以达到Batching一样的效果,缺点是只能对完全相同的物件合批
    2评论
  • 夕阳 2017-09-01 14:42
    首先可以考虑LightMap和,预先烘焙出来可以大大降低性能消耗,毕竟实时光照在的性能消耗非常大在移动端有限的性能中能不用就不用,如果非要用的话,不知道场景是否为可破坏或者动态的呢?如果不是的话可以考虑Light Probe(光照探针)
    1评论
  • 韩宇飞 2017-12-07 12:55
    gavindong说的一样,如果一定要加大量的实时光源,延迟渲染是最好的解决方案。如果是场景里希望实现一个光照可以考虑GI和光照贴图。
    这里介绍一个比较我们使用的取巧的做法,美术编辑场景的时候还是在场景中放大量的点光源,游戏中子弹,开火等粒子也会挂一些标记。在实际运行场景的时候并不直接开启光源,而是每个光源自动生成一些mask,然后有一个自顶而下的相机渲染,通过投影贴花的方式把光源投在场景中,并且这些光源效果是实时可变的。
    这样做的好处是开销极低,几乎市面上所有的手机都可以实现伪实时光得效果,并且效果还不错。不过也有有一定局限性,因为是投影贴花一些垂直墙壁的效果不太好,更适合俯视角的游戏。
    2评论
  • {{ answer.user.NickName }} {{ answer.profession }} {{ answer.created_at | time-format }}
    专家回答
    {{{ answer.answer }}}
    {{ answer.answer_count | view-format }}评论
加载中... 查看更多回答