- 最后登录
- 2017-5-15
- 注册时间
- 2012-3-1
- 阅读权限
- 90
- 积分
- 32973
  
- 纳金币
- 32806
- 精华
- 12
|
圖形顯示的優化
簡單來說就是「結合!結合!結合!」(combine! combine! combine!)
Mesh 儘可能結合,Material 和 Texture 儘可能共用。
一個 Mesh 建議使用的面數在 1500~4000 之間。
一個 Mesh 建議只用一個 Material。
注意:兩個Mesh結合成一個Mesh,但是卻使用兩個 Material,並不會提高效能。
如果要提高效能必須把這兩個Mesh的Material也合併成一個。
換句話說,一個Mesh使用多個 Material 和一個 Material 使用多個 render,其實耗能是差不多的。
所以,儘可能的讓物件共用相同的 Texture 才是提昇效能的根本之道。
Pixel Light
Pixel Light 非常耗能,如果想要在舊電腦上也跑得很順,
可以在 Edit->Render Settings 中把 Pixel Light Count 設成 0。(完全不使用 Pixel Light)
你也可以根據每個 Light 的重要度,分別設定。
重要度高的 Render Mode 設成 Force Pixel 。
不重要的設成 Force Vertex。
Layer 管理
地上的小石頭或瓦礫之類的小東西產生的影子比較不明顯,
我們可以把這些東西設在同一個圖層。
並利用script中 Camera.layerCullDistances 功能 變更參數控制顯示的距離。
function Start ()
{
var distances = new float[32];
// Set up layer 10 to cull at 15 meters distance.
// All other layers use the far clip plane distance.
distances[10] = 15;
camera.layerCullDistances = distances;
}
Shadow
影子的計算完全依靠 GPU。
Soft shadow 比 hard shadow 多花費GPU效能。但是兩者使用的 CPU 與 記憶體是相同的。
Anti-aliasing 也是完全靠 GPU計算。
Anisotropic Textures 也是完全靠 GPU計算,建議在 天花板或是地板的 Texture 上使用。
關於實時陰影的優化 ,請參考 叫你自由 前輩所寫的這一帖:
http://bbs.vrsh.cn/thread-2263-1-2.html
■Texture 2D
Unity 讀取 psD檔之後,會自動將圖檔平面化縮壓,並不會讓製作的遊戲變大。
Texture 的長寬的大小最好由下列數字中挑選:2、4、8、16、32、64、128、256、512、1024、2048。
Texutre 不一定要是正方形的,長方形也可以。
如果 Texture 的大小不是由上方數字所組成的,那麼圖形將會稍微多耗用一些的顯卡的記憶體,讀取時也會稍微變慢。
所以特殊的 Texture 大小建議只使用在 GUI 上。
Mip Maps
使用 Mip Maps 大約會多占用 33%的記憶體,但是可以大幅提昇效能。
所有的 Texture 都建議使用 Mip Maps,唯一不需要使用的是 GUI的 Texture。
■Shader 效能 (Normal、Transparent、Transparent Cutout、Self-Illuminated、Reflective、Lightmap)
由上→下,左→右,愈來愈耗能。
Vertex_Lit -> Decal
-> Diffuse Fast -> Diffuse ->Diffuse Detail
->Bumped ->Specular ->Bumped Specular
-> Parallax Bumped -> Parallax Bumped Specular
附件中有比較清楚的圖示。
■角色(charcater)最佳化
一、每個Mesh只使用一個 Skinned Mesh Renderer。
二、不要使用太多的Material。
唯一需要使用不同的 Material 的原因,應該是你想要使用不同的 shader。
一個角色使用 2~3 Material 應該就能充份表現效果 。
如果角色可能會換武器,人物和武器的Material應該要分開,
三、減少 bone 的數量
角色 bone的數量限制通常在 15~60 之間,通常 30 個bone 已經可以做到很好的效果。
強烈建議一個角色的 bone 數量在 30 個以內。
四、polygon 面數
面數建議在 500~6000之間。
HL2 的面數是 2500~5000、次世代遊戲角色的面數在 5000~7000。
五、將IK 與 FK 嚴格區分
因為 Unity 不需要 IK 的資料,這麼做可以讓你很方便地刪除 IK 資料。
六、使用可重覆利用的 Rig
這樣可以讓不同的角色使用相同的動畫。
七、正確命名每一個bone
正確命名每一個bone之後,使用Ragdoll功能將會事半功倍。否則將骨架設定正確將花費你許多時間。
■腳本相關
參考論壇上前輩的心得,摘錄如下:
1.biobio前輩的 新人的學習作業 FindObjectsOfType,FindGameObjectWithTag,GameObject.Find,这类函数很好用,但是开销很大,要想优化性能最好使用static ArrayList,存储同一个类型的对象,使用的时候查这个list表就好。 |
|