大场景VR的优化总结

 

 

     留坑,续写。性能优化

     最近在作外景的项目,被相关的帧率优化和灯光布置困扰的不要不要的。下面写下我是怎么优化帧率和对帧率的一些理解。函数

     帧率,游戏的重要影响因素,会对玩家的手感以及视觉产生重大的影响,通常的游戏帧率控制在30帧-60fps,而VR则要求90帧左右,主要关联的硬件参数为CPU,GPU,以及内存。性能

并且不要忽略VR是双目的,因此一样面数的场景则VR的性能损耗是普通游戏的两到三倍。因此性能优化在VR里可能跟从新制做游戏的工做量同样大,那优化有什么策略呢?最好的解决方案是根据性能查看器来分析性能能损耗的因素,而后根据逐个因素来调优。测试

相关的性能分析器有:优化

unity自带的:profile,frame debugerspa

intel:GPA插件

腾讯:Wetestdebug

IOS平台-Xcode Instrument 
高通-adreno
 
侑虎科技-wpa

 

优化策略:code

图像层:orm

      减小Drawcacll-方法:减小材质球的使用,静态批处理,动态批处理等,使用meshbaken和sample lod等插件对模型进行优化处理。下降资源-复用物体的材质,贴图,把复用模型打包成prefab重复使用,其余方案:烘培,遮挡剔除,视线剔除等,

相关的插件:

 

      烘培:GI实时灯光很消耗帧率,基本是无灯光下每一个模型增长几个DC值,在无特殊的要求下尽可能使用烘培后的灯光能很大程度的优化游戏的性能。烘培步骤:进行灯光设置,lighting面板设置,模型设置。固然如下是个人测试参数,能够慢慢的改变相关的参数进行更适合场景和效果的烘培。unity版本为5.4.03

                                                              

 

剔除渲染:occulusion (室外效果不错)

把所须要进行剔除的物体的设置为static,而后打开window-occulusion culling面板进行bake操做,bake界面的参数越细致则剔除渲染须要的时间越久

 

优化前:

 优化后

 

但要注意的是很容易参数设置不许确,形成一些物体闪烁的影响。可视范围内drawcall和面数明显减低

 网格:

合并:

using UnityEngine;
using System.Collections;
 
public class MyClass : MonoBehaviour
{
    void Start ()
    {
        MeshFilter [] meshFilters = GetComponentsInChildren<MeshFilter> ();
        CombineInstance[] combine = new CombineInstance[meshFilters.Length];
 
        for (int i = 0; i < meshFilters.Length; i++) {
            combine [i].mesh = meshFilters [i].sharedMesh;
            combine [i].transform = meshFilters [i].transform.localToWorldMatrix;
            meshFilters [i].gameObject.active = false; 
        }
 
            transform.GetComponent<MeshFilter> ().mesh = new Mesh ();
            transform.GetComponent<MeshFilter> ().mesh.CombineMeshes (combine);
            transform.gameObject.active = true;
    }
}

1. 先在 Unity 中创建 空物件 ( Empty ) 
2. 再建立2个 Cube 方块,并放入 空物件底下 (能够改为你本身的模型)
3. 把 MyClass 代码丟进 空物件上 。
4. (可选) 创建一个 Material 材质,而且丢进 空物件上
5. 执行

贴图:在外观不变的前提下,贴图大小越小越好。

合并:

 

粒子:

 

灯光:

像素光。
像素光可让你的游戏看起来效果很牛逼,可是不要使用过多的像素光。
在你的游戏中可使用质量管理器来调节像素光的数量来取得一个性能和质量的均衡点.

性能占用顺序:聚光灯>点光源>平行光。
一个好的点亮场景的方法就是先获得你想要的效果,而后看看哪些光更重要;
在保持光效的前提下看看哪些光能够去掉。

若是能够就烘焙吧

 

代码层:

 1.减小每次代码的帧调用

在 update函数里有些不须要很精确的操做能够减帧调用来进行优化

 

2.

 

 

profile里的占坑:

Gfx.WaitForPresent:

 

模型的规范化很重要:

这个一开始就要作好,否则后续很痛苦要返工的。

 

 其余的点:

1.容许的话在大场景中使用线性雾,这样可使远距离对象或阴影不易察觉,所以能够经过减少相机和阴影距离来提升性能;

2.实时阴影很耗性能,尽可能减少产生阴影的距离

3.少用像素灯和使用像素灯的Shader;

4.项目中若是没有灯光或对象在移动那么就不要使用实时灯光

5.建材质球时尽可能考虑使用Substance

6.养成良好的标签(Tags)、层次(Hieratchy)和图层(Layer)的条理化习惯,将不一样的对象置于不一样的标签或图层,三者有效的结合将很方便的按名称、类别和属性来查找;

 

 

 

 优化插件:

Mesh Baker-优化材质球,合并模型,会和渲染剔除有冲突,没调好UV很容易错误

SimpleLOD-

 churer-减面,

 

 

 

 

 

踩到的坑:远处的树裁剪,一开始觉得是相机的问题,而后发现不是,地形自带的,tree didstant 以及广告牌fade问题引发的。能够用实物的模型或者面片代替。在进行优化。

相关文章
相关标签/搜索