首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > 软件架构设计 >

關於優化的根本觀念

2012-10-10 
關於優化的基本觀念圖形顯示的優化??簡單來說就是「結合!結合!結合!」(combine! combine! combine!)??Mesh

關於優化的基本觀念

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

热点排行