寫給自己部門的一個優化文檔

  接觸優化,搗鼓了幾天,然後負責人讓我寫個文檔分享下。僅限內部使用,不具有通用性

                                             美    術

1 靜態對象勾選static, 物體上的MeshCollider,,Animator組件去掉。

2 圖片資源導入Unity後修改下Max size,在不失真的情況下,儘量的小,一般最大不要超過1024.

3 玩家看不到的模型,可以做的儘量簡單,頂點數和三角面儘量的少。例如怪物,人物模型儘量不超過5000,最多不過1W。一般導入Untiy後頂點數不超過1W都能接受,看具體情況,比如一個子彈,幾百的頂點數即可,一個炮臺,最好能控制在3000以內。需要精細的另說。

4 合併mesh,材質。有多個小的子物體的,可以合併成一個mesh,能用一個材質的就用同一個材質,一個模型的materials儘量控制在3個以內。

5 場景中需要有多個平行光的,告訴程序即可,由程序員處理需要動態批處理的物體。最好的情況是不使用實時光。

6 場景使用LOD技術

7 粒子特效控制個數,達到效果的情況下儘量的少,對於場景中需要大量出現的,可以不使用粒子特效,必須用的儘量減少粒子個數,粒子大小。

8 聲音。背景聲音可以使用MP3的壓縮格式,較短的聲音可以使用wav

                                    

                                        程    序

1 優化代碼。

         1)設置物體父級用SetParent函數

         2)不要頻繁的創建對象

         3)不要在每幀調用的函數中處理複雜的數學運算

         4)不要每幀都使用耗時函數查找對象

         5)……

 

2 先判斷瓶頸是GPU還是CPU。

    關閉垂直同步,在profiler中查看耗時的地方,以往經驗,Camera.render一般不會高於7ms。如果再關閉垂直同步的情況下,出現了Gfx.WaitForPresent,說明代碼限制了幀數,或者說GPU跟不上cpu的速度,需要優化渲染,瓶頸就在GPU。

3  BehaviourUpdate總耗時一般不會高於2ms,太高就需要優化代碼。 GC Alloc如果每幀高於10K的都需要注意下,理論上高於2k的都要處理,如果一個每幀都調用的函數時間超過0.5ms,那要想想該怎麼優化了。

4 動態批處理。一般來說頂點數低於900的對象,可以使用批處理技術,相同的材質,相同的mesh,相同的縮放比例,會自動進行動態批處理。需要注意的是,美術有可能需要多個平行光,這些光會影響到動態批處理的對象,設置Lighting->Culling Mask,不要讓光影響到需要動態批處理的對象即可。

5 按以往經驗,Draw call個數不可高於2500(戴上眼鏡情況下),這是極限了,再高就要掉幀,一般要控制在1000以內。頂點數和三角面最好控制在100W以內。

6 關閉垂直同步,燈光選擇NoShadows.

 2016-10-27修改

7.代碼方面,將不能靜態批處理和動態批處理,材質又是同一種的,可以進行mesh合同。

ps: 電腦上測試幀數,需注意關閉Profiler,Scene場景,控制檯輸出對幀數影響也較大。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章