3_批處理的優(yōu)勢(shì)
批處理(batching)用于將多個(gè)對(duì)象的網(wǎng)格合并到一起,并在一個(gè)指令中渲染它們,而不是單獨(dú)準(zhǔn)備和繪制每個(gè)幾何體
DrawCall
DrawCall是從CPU發(fā)送到GPU中用于繪制對(duì)象的請(qǐng)求,當(dāng)場(chǎng)景中包含了大量對(duì)象時(shí),這些操作就會(huì)非常耗時(shí)
比如要渲染一千個(gè)三角形,把它們按照一千個(gè)單獨(dú)的網(wǎng)格進(jìn)行渲染,所花費(fèi)的時(shí)間要遠(yuǎn)大于渲染一個(gè)包含了一千個(gè)三角形的網(wǎng)格
在這兩種情況下GPU的性能消耗其實(shí)并沒有多大區(qū)別,但是CPU的DrawCall數(shù)目就會(huì)成為性能瓶頸
批處理的主要目的就是減少渲染所需的DrawCall數(shù)量
只有同一材質(zhì)的物體才可以進(jìn)行批處理,這是因?yàn)橥徊馁|(zhì)的物體,它們之間的不同僅僅在于頂點(diǎn)數(shù)據(jù)的差別,把這些頂點(diǎn)數(shù)據(jù)合并到一起發(fā)送給GPU,就可以完成一次批處理

動(dòng)態(tài)批處理
動(dòng)態(tài)批處理的要求
所有網(wǎng)格必須使用相同的材質(zhì)引用
網(wǎng)格頂點(diǎn)屬性不能大于900,如果shder中使用了頂點(diǎn)位置,紋理坐標(biāo),法線,那么它的頂點(diǎn)數(shù)不能超過300(這個(gè)數(shù)據(jù)未來會(huì)發(fā)生變化,不要依賴于這個(gè)數(shù)據(jù))
對(duì)象的縮放比例要一致(可以是(1,1,1)(1,2,3)但如果其中包含了(-1,1,1)批處理就會(huì)失?。?/p>
使用了光照紋理的物體應(yīng)該引用相同的光照紋理文件
使用了多Pass的shader會(huì)中斷處理
靜態(tài)批處理
靜態(tài)批處理會(huì)占用更多內(nèi)存,使用時(shí)需要注意
由于不同的圖形API限制,合并到靜態(tài)批處理的頂點(diǎn)數(shù)量是有上限的,一般為32000-64000個(gè)頂點(diǎn)
靜態(tài)批處理的要求
對(duì)象必須標(biāo)記為靜態(tài)
其它需要注意的地方
