大場景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問題引發的。能夠用實物的模型或者面片代替。在進行優化。

相關文章
相關標籤/搜索