批渲染(Batch)
batch render 是大部分引擎提高渲染效率的方法,基本原理就是通過將一些渲染狀態(tài)一致的物體合成一個(gè)大物體杂拨,一次提交給gpu進(jìn)行繪制坠韩,如果不batch的話扒怖,就要提交給很多次罗侯,這可以顯著的節(jié)省drawcall,實(shí)際上這主要節(jié)省了cpu的時(shí)間月杉,cpu從提交多次到提交一次刃跛,對(duì)gpu來(lái)說也不用多次切換渲染狀態(tài)。當(dāng)然能batch的前提一定是渲染狀態(tài)一致的一組物體苛萎。
Unity3d的批渲染分為兩種桨昙,動(dòng)態(tài)和靜態(tài)
靜態(tài)批
要求:必須使用同一張material,然后在編輯器里設(shè)置為static batching的腌歉。
特點(diǎn):靜態(tài)批是無(wú)法運(yùn)動(dòng)的蛙酪。
所以一般制作流程上,對(duì)于場(chǎng)景這些靜態(tài)的物體都采用靜態(tài)批翘盖,美術(shù)會(huì)根據(jù)場(chǎng)景的規(guī)模桂塞,將相鄰的一片物件的貼圖合并到一張或幾張1024或512的大圖上,這樣這些物件可以使用同一個(gè)material馍驯,就可以靜態(tài)批在一起阁危,大幅節(jié)省dc。
靜態(tài)批的時(shí)候Unity3d會(huì)在運(yùn)行時(shí)生成一個(gè)合并的大模型泥彤,并且為這個(gè)模型指定一張共同的貼圖欲芹,所以這個(gè)批在一起的數(shù)量是有限的,如果批在一起的定點(diǎn)數(shù)過多吟吝,它就會(huì)自動(dòng)分成兩個(gè)批,一個(gè)靜態(tài)批的上限我自測(cè)大約在60000多個(gè)頂點(diǎn)單元颈娜。
動(dòng)態(tài)批
動(dòng)態(tài)批是對(duì)那些沒有標(biāo)記成static batching的物體在runtime unity自動(dòng)將他們批在一起剑逃,這個(gè)是可以支持運(yùn)動(dòng)物體的,但是限制較為嚴(yán)格:
1.一個(gè)批次總頂點(diǎn)單元少于900
2.批在一起的所有的模型應(yīng)用同樣的縮放值
3.使用相同的材質(zhì)
4.相同的一張lightmap
5.不能使用多pass的shader
6.不能接收陰影
所以一般是小的運(yùn)動(dòng)的模型才比較容易動(dòng)態(tài)批在一起官辽,當(dāng)然unity又說可能在后續(xù)版本放寬這個(gè)限制