Alpha-Testing
在iOS上使用alpha-testing的開銷非常大,盡量將alpha-test shader替換為alpha-blend。
Vertex Performance
在iPhone 3GS以及新的硬體上盡量控制每幀渲染不超過4萬個頂點(一萬多個面)。
Lighting Performance
象素級動態光照計算因為要計算每個受影響的象素而增加大量的計算開銷,也會讓對象渲染多個pass。盡量避免讓多個Pixel Light影響單個對象,盡量使用方向光。Pixel Light指將Render Mode設定為Important的光。
頂點級動態光照計算會影響頂點變換的計算開銷,盡量避免多個光同時影響單個對象,如果可能的話盡量使用預烘培的光照圖。
Optimize Model
Geometry
模型最佳化的兩條標準:
剔除那些非必要的面,把那些永遠也不會顯示的面刪掉
盡量減少UV映射的接縫和硬邊(hard edge)
注意,圖形硬體實際渲染的頂點數與在3D建模軟體中看到的頂點數不一樣,建模軟體中顯示的頂點數是構成模型的實際頂點數,而在引擎中渲染的時候,一些頂點需要被分為多個,比如那些有多個法線的頂點,或者是有多個UV座標的頂點以及有多個顏色值的頂點,他們都必須拆分為多個。所以最終在Unity中看到的頂點數一般都與建模軟體中看到的不一樣。
Texture Compression
儘可能使用iOS內建的PVRT壓縮格式,它不僅能減少貼圖檔案的大小,讓遊戲的載入速度更快,並且點用更少的內在,而且還能顯著提高渲染效能。
如果映像帶alpha通道,使用PVRT壓縮格式後看起來可能會有些問題。如果出現了這種情況可以使用PVRTexTool來產生.pvr檔案,這些檔案裡帶有PVRT壓縮參數,Unity引擎匯入這些壓縮映像後能夠更好的還原出原始映像。
如果PVRT壓縮格式完全不能滿足映像品質方面的要求,比如對於UI貼圖來說,則可以採用16位元影像像格式,這也比完全的32位RGBA映像要節省一半的空間。
Tips for writing well performing shaders
在iPhone 3GS之後,GPU已經開始完全支援頂點shader和象素Shader,但也不能期望在iOS平台上能夠實現與案頭系統一樣的複雜Shader,iOS的硬體效能畢竟還是受限的。
Complex arthmetic operations
類似於pow,exp,log,cos,sin,tan之類的算術計算會造成很大的GPU開銷,一般來說在每個fragment中盡量不要超過一次這種調用。更好的做法是通過尋找texture來擷取資料。
盡量不要使用自己寫的normalize, dot, inverse, sqrt函數,使用內建的,驅動會為這些函數產生更加最佳化的實現。
盡量減少discard操作的使用,這會讓fragments變得非常慢。
Floating point operations
使用浮點數時必須指明其大小,盡量使用最小的格式。
如果使用GLSL ES編寫Shader,其資料格式為:
1. highp 完全的32位浮點格式,適合於頂點變換的計算,速度比較慢
2. mediump 16位的浮點格式,適用於UV座標,比highp快大約兩倍
3. lowp 10位的定點格式,適用於colors, lighting計算,比highp快大約四倍
CG的shader與GLSL ES類似,三個格式為 float, half, fixed
Bake Lighting into Lightmaps
盡量將靜態光進行預渲染,Unity提供了內建的Lightmapper工具。
使用光照圖僅僅會消耗額外一點點產生時間,但是能夠帶來更多的好處:
1. 在有2個象素級光照的情況下能夠提高2到3倍的渲染速度
2. 更加平滑的光照表現
Share Materials
如果多個物體使用相同的材質被渲染到同一個攝像機下,Unity iOS能夠使用一系列的最佳化手段:
1. 避免大量的渲染狀態切換
2. 避免因為不同的參數而導致頂點及象素處理過程的暫停
3. 讓多個小的可移動物體使用同批次渲染以減少draw call數量
讓多個標了”static”屬性的不論大小的可移動物體使用同批次渲染以減少draw call數量
上面的每一步都能夠大量的減少CPU開銷,所以儘可能的把多個小貼圖合并到一張大圖上,讓儘可能多的物體都使用這同一張大貼圖
Simple Checklist to make Your Game Faster
幾個關於最佳化的檢查點:
1. 在iPhone 3GS及新的硬體上控制每幀最多渲染4萬個頂點
2. 如果使用內建的Shader,盡量選擇Mobile類別下的,其中Mobile/VertexLit是目前最快的
3. 盡量減少每屏可見的材質數量,儘可能的共用材質
4. 把所有不會移動的物體都標註”static”屬性
5. 儘可能的使用PVRTC格式的貼圖,或者16位貼圖
6. 儘可能的使用combiners或者pixel shader來混合多張貼圖,盡量避免採用多個pass的方法
7. 如果自己寫shader,盡量使用小的浮點數格式
8. 盡量避免使用比較費時的算術計算
9. 除非必要不要使用Pixel Light,保證只會有最多一個Pixel Light影響到物體
10.除非必要不要使用動態光,可以使用預烘培的方法來代替
11.使用儘可能少的貼圖數量
12.盡量避免alpha-testing的使用,可以使用alpha-blending來代替
13.除非必要不要使用霧
14.在情境中儘可能的使用遮擋體以減少需要渲染的物體數量
15.使用天空盒來剔除遠處的物體
原文地址:http://unity3d.com/support/documentation/Manual/Optimizing%20Graphics%20Performance.html
原創文章,轉載請註明: 轉載自All-iPad.net
本文連結地址: Optimizing
Graphics Performance (iOS)