什么是DrawCall冀墨??
? ? 通俗來講就是CPU告訴GPU闸衫,我要渲染一個物體,將這個物體的頂點、顏色诽嘉、狀態(tài)等一起告訴CPU讓它去繪制蔚出。如果DrawCall次數(shù)太多,那么CPU要額外干的事就多,最后超負荷,出現(xiàn)卡頓卡死的現(xiàn)象。
怎么解決卡頓卡死的問題?
? ? 和批處理!
那什么是和批處理?
? ? 將多個物體的渲染命令合并成一個渲染命令,一起去提交含懊。那么CPU的壓力就不大了身冬,它就會感覺比較輕松,比較愉快,這樣就不卡了岔乔。
合批常用的分為兩種:
? ? 1酥筝、靜態(tài)合批處理
? ? 2、動態(tài)合批處理
設置為靜態(tài)批處理的必須要勾上Static的標簽,設置為靜態(tài)(會增加你的內(nèi)存占用)
其次他們的材質(zhì)必須是相同的
Saved by batching 被節(jié)省的Batches是多少
動態(tài)批處理:
1雏门、批處理在運行時生成(批處理是動態(tài)產(chǎn)生的)
2嘿歌、批處理中包含對象在不同的幀之間可能有所不同,這取決于哪些網(wǎng)格在主攝像機視圖中當前是可見的
3茁影、甚至能在場景中運動的對象也可以批處理(頂點數(shù)有限制)
4宙帝、Scale必須全部大于0
------不常用的兩種合批方式-------
SRP Batcher處理
要求同一Shader(可以不同的材質(zhì)球)
要求是SRP (URP或HDRP) (Buildin管線是不可以的) (效率會高一點)
自己手動GPU Instance處理
1、自己手動調(diào)用Unity的接口Graphics.DrawMeshInstance
2募闲、需要自己實現(xiàn)裁剪
3步脓、Shader兼容
4、CommandBuffer:CommandBuffer.DrawMeshInstanced
5浩螺、機器支持ComputeBuffer :Graphics.DrawMeshInstancelndiret
6靴患、機器不支持ComputeBuffer :Graphics.DrawMeshlnstancedProcedural
(歡迎補充)