批渲染(Batch)
batch render 是大部分引擎提高渲染效率的方法,基本原理就是通過將一些渲染狀態一致的物體合成一個大物體,一次提交給gpu進行繪制,如果不batch的話,就要提交給很多次,這可以顯著的節省drawcall,實際上這主要節省了cpu的時間,cpu從提交多次到提交一次,對gpu來說也不用多次切換渲染狀態。當然能batch的前提一定是渲染狀態一致的一組物體。
Unity3d的批渲染分為兩種,動態和靜態
靜態批
要求:必須使用同一張material,然后在編輯器里設置為static batching的。
特點:靜態批是無法運動的。
所以一般制作流程上,對于場景這些靜態的物體都采用靜態批,美術會根據場景的規模,將相鄰的一片物件的貼圖合并到一張或幾張1024或512的大圖上,這樣這些物件可以使用同一個material,就可以靜態批在一起,大幅節省dc。
靜態批的時候Unity3d會在運行時生成一個合并的大模型,并且為這個模型指定一張共同的貼圖,所以這個批在一起的數量是有限的,如果批在一起的定點數過多,它就會自動分成兩個批,一個靜態批的上限我自測大約在60000多個頂點單元。
動態批
動態批是對那些沒有標記成static batching的物體在runtime unity自動將他們批在一起,這個是可以支持運動物體的,但是限制較為嚴格:
1.一個批次總頂點單元少于900
2.批在一起的所有的模型應用同樣的縮放值
3.使用相同的材質
4.相同的一張lightmap
5.不能使用多pass的shader
6.不能接收陰影
所以一般是小的運動的模型才比較容易動態批在一起,當然unity又說可能在后續版本放寬這個限制