(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)
3D程序的性能消耗發生在:
-
頂點相關數據和紋理數據加載入內存
把大量的模型數據頂點相關數據和紋理數據從磁盤或網絡加載到內存中,3D程序中,這塊的數據量是相當大的,可能會有上GBytes的數據需要加載到內存中。 -
顯示數據從內存傳輸到顯卡中
顯卡提供了接口,傳輸framebuffer, 傳輸texture, 傳輸shader, 把加載到的內存中數據傳遞給顯卡。 -
顯卡渲染pipeline執行,執行相關頂點、像素等shader處理
針對這3項,通常我們優化的方向有:
-
針對數據量,減少加載的數據量
a. 通過lod,對數據的加載,提供層次簡模,減少同一時刻需要加載的數據數量
b. 3D模型中一般圖片佔資源總大小比例很高,可以通過紋理簡化DDS-DXT,RGB565紋理,
c. 頂點索引相關數據簡化,例如,索引使用ushort;也可以考慮頂點合併,三角形簡化等各類思路 -
針對向顯卡傳送渲染數據,數據量減少的前提下,同樣的渲染數據量情況下,減少接口調用次數
a. 頂點相關數據減少批次數量:通過合併批次,提高交互的效率,減少顯卡接口調用的次數
b. 紋理合並,減少傳遞紋理的次數 -
shader程序優化,精簡shader中無用的邏輯
a. shader邏輯精簡,減少查詢紋理相關複雜操作的次數
b. 可以在頂點shader中做的,優於在像素shader中做
(Owed by: 春夜喜雨 http://blog.csdn.net/chunyexiyu)