關於優化的基本觀念

圖形顯示的優化
  簡單來說就是「結合!結合!結合!」(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表就好。

你可能感兴趣的:(thread,UP,bbs)