合批:把N個物體合到一起來提交給GPU,GPU一次繪制吱韭,這個過程叫做合批
DrawCall:Cpu給GPU下達一次渲染指令鱼的,叫做DrawCall
批次數(shù)目/Drawcall數(shù)目:提交繪制一個游戲場景痘煤,場景中的物體分幾次提交給GPU進行繪制的次數(shù)
合批常用技術
基本的大原則熏挎,哪些物品會合批:同一材質的物體,有合批的可能
美術處理:場景美術把場景做到一個物體里面烦磁,或少數(shù)幾個物體里面(把關卡做成一個fbx模型)
-
靜態(tài)合批
游戲引擎將“能夠合批”(同一材質球)的“靜態(tài)物體”(標記為靜態(tài)不可移動的物體)哼勇,合到一起,提交給GPU陨晶,預先合并好這些靜態(tài)物體成一個整體網格帝璧,提交給GPU渲染局限性:a物體時靜態(tài)的
b預先計算好合并整體網格,增加合并后的內存開銷
c把所有的網格合并到一起褐耳,1000個樹渴庆,合并之后,會有1000個網格刃滓,內存暴漲耸弄,不合并的話,只需要1個網格
CPU的開銷和drawcall減少得到我們性能提升之間來做平衡
d具有相同的實例的材質球
-
動態(tài)合批
游戲引擎將“能動態(tài)合批的”(同一材質球)的物體的每個頂點老客,CPU根據(jù)它的矩陣震叮,來計算合批物品的每個頂點對應的世界空間的坐標,然后就把這些物體的頂點(世界空間的頂點)+單位矩陣提交個GPU苇瓣,GPU就會一起把他們繪制出來
(基于世界空間的坐標系,我們重新給這些動態(tài)合批的物體來重新建模哲嘲,所有的頂點+材質給GPU繪制)動態(tài)合批是一個雙刃劍 CPU消耗運算性能(需要CPU把頂點轉到世界空間下,非動態(tài)合批時GUP轉換的)画切,但可以帶來性能提升囱怕,使用時,需要關注一下
動態(tài)合批的限制:頂點數(shù)目不應過多典格,倆個相同的物體台丛,當倆個物體三個軸向的負縮放的個數(shù)為偶數(shù)個時(0,2)時防嗡,可以合批侠坎,當倆個物體中任意一個物體或倆個物體同時三個軸向的負縮放的個數(shù)為奇數(shù)時,不合批
材質球實例相同
有光照紋理數(shù)據(jù)硅蹦,必須要相同
多個Pass的著色器不會被合批
延遲渲染無法合批 GPU Instancing合批
本質提交一個物體童芹,GPU繪制出這個物品的N個實列鲤拿,通過GPU里面繪制N次到不同的位置(位置,選擇近顷,縮放)
1000個小兵,可以在一個批次進行完成
滿足合批的條件缀遍,同一物體饱须,材質球(材質球屬性可不同)
數(shù)量需要小于GPU每次出來的極限
Shader需要開啟GPU Instancing的支持
4.合理安排物品的繪制順序,不要打亂合批
3D物體:引擎自動計算譬挚,盡可能的在3D場景里面使用同一個材質(shader+紋理)
盡可能在同一個渲染隊列里面使用同一個材質
盡可能在3D場景里面使用同一種Shader,不要根據(jù)渲染順序來回切換Shader(Set pass call開銷很大)
2D UI:盡可能安排同一個圖集的物體在一個繪制順利里面
5.將多個物體的紋理合并到一起
游戲物體:將地圖與地圖上的物體盐须,使用同一個紋理
6.手動合并Mesh