在做Unity大场景VR项目开发时,发现在运行时帧率掉的很严重,而且在VR里体验也很难受,一般来讲,做游戏开发帧率控制在30 - 60fps,而VR则需要60 - 120fps,影响帧率的硬件参数主要是CPU,GPU和内存。
而且开发VR时,VR是双相机渲染,所以同样的面数在VR中消耗的性能则是普通游戏(单相机渲染)的两倍到三倍。所以在VR性能优化时跟重新开发时的工作量一样大。
说了怎么多,如何优化呢?
首先看下性能分析器:
Unity自带的: profile 、frame debuger
Intel: GPA
腾讯:Wetest
IOS平台 : Xcode Instrument
高通: adreno
'''
优化策略:
减少Drawcall:
1.减少材质球的使用,静态批处理、动态批处理等;
2.使用meshbaken和sample lod等插件对模型进行优化;
降低资源:
1.复用物体的材质、贴图,把复用的模型打包成prefab重复使用;
其他方案:
烘培、遮挡剔除、视线剔除等。
烘培:GI实时灯光很消耗帧率,基本是无灯光下每个模型增加几个DC值,在无特殊的要求下尽量使用烘培后的灯光能很大程度的优化游戏的性能。
烘培步骤:进行灯光设置,lighting面板设置,模型设置。当然以下是测试参数,可以慢慢的改变相关的参数进行更适合场景和效果的烘培。[unity版本为5.4.03]
剔除渲染:occulusion (室外效果不错)
把所需要进行剔除的物体的设置为static,然后打开window-occulusion culling面板进行bake操作,bake界面的参数越细致则剔除渲染需要的时间越久
优化前:
优化后:
但要注意的是很容易参数设置不准确,造成一些物体闪烁的影响。可视范围内drawcall和面数明显减低
贴图:在外观不变的前提下,贴图大小越小越好。
灯光:
像素光。
像素光可以让你的游戏看起来效果很牛逼,但是不要使用过多的像素光。
在你的游戏中可以使用质量管理器来调节像素光的数量来取得一个性能和质量的均衡点.
性能占用顺序:聚光灯>点光源>平行光。
一个好的点亮场景的方法就是先得到你想要的效果,然后看看哪些光更重要;
在保持光效的前提下看看哪些光可以去掉。
如果可以就烘焙吧
其他点:
1.允许的话在大场景中使用线性雾,这样可以使远距离对象或阴影不易察觉,因此可以通过减小相机和阴影距离来提高性能;
2.实时阴影很耗性能,尽量减小产生阴影的距离
3.少用像素灯和使用像素灯的Shader;
4.项目中如果没有灯光或对象在移动那么就不要使用实时灯光
5.建材质球时尽量考虑使用Substance
6.养成良好的标签(Tags)、层次(Hieratchy)和图层(Layer)的条理化习惯,将不同的对象置于不同的标签或图层,三者有效的结合将很方便的按名称、类别和属性来查找;