環(huán)境
Unity : 2020.3.37f1
Pipeline : BRP
(另一個(gè)項(xiàng)目在 2021.1.xx 的 LTS 下的 URP 管線同樣如此,目測:因?yàn)?UGUI 不受渲染管線切換而變化)
目的
便于索引,記錄搬磚
Screen Space - Overlay
可以看到,下圖
Canvas 的 Render Mode 在使用: Screen Space - Overlay 模式下的DC為 8
這里導(dǎo)致合批失敗的有兩個(gè)問題:
- 圖片顯示有相互的堆疊遮擋
- 部分UI組件的localPosition.z != 0
UI AABB overlap
localPosition.z != 0
DrawCall 就會增加很多
相當(dāng)于一個(gè)都合批不了,要是UI復(fù)雜,有多,那么性能就渣渣了
優(yōu)化
如下圖
我們修改了這些內(nèi)容,即可合批:
- Canvas Render Mode 調(diào)整為:Screen Space - Camera,并指定相機(jī)
- 然后將 UI 的 Hierarchy 層級嵌套要展平,需要同級化
- 然后 shader 需要開啟 alpha test 和 ZWrite On, ZTest LEqual
Canvas Render Mode 調(diào)整為:Screen Space - Camera,并指定相機(jī)
然后將 UI 的 Hierarchy 層級嵌套要展平,需要同級化
Alpha Test, ZWrite On, ZTest LEqual
限制
這個(gè)方案目前總結(jié)下來有那么一些限制:
- 如果透明區(qū)域不是偏向 矩形的,那么只能開啟 alpha test
- 如果開其alpha test 那么邊緣效果黑背景混合鋸齒感比較強(qiáng)
- hierarchy 視圖中的 go 層級需要調(diào)整,導(dǎo)致無法使用 parent 的整體移動
- 如果需要整體移動需要自己寫組件同步位置
該方案起源
其他項(xiàng)目組的一位 TA 大佬,分享了一下 UI 的 AABB Overlap 下的合批
結(jié)果他自己做了一些嘗試,發(fā)現(xiàn)可以這么整
這種如果有 UGUI 黑箱部分的合批邏輯,都會比較好處理(比如,如果你們項(xiàng)目有購買 unity 引擎源碼,那是可以一探究竟,甚至可以自行修改的)
然后我們沒有unity引擎源碼,在這種情況下,這位TA大佬都測試出來了,真的牛逼
(然后這種方式其實(shí)在 UWA UGUI 優(yōu)化課程中也有講到類似的優(yōu)化,到時(shí)連接我就不方便發(fā)了,給自己看,我也貼上來吧:Unity - UGUI 優(yōu)化 (NGUI vs UGUI) - 筆錄 - UWA大神推薦學(xué)習(xí)篇)
因此我將這次大佬的研究成果直接記錄筆記,便于后續(xù)索引,備忘
另外,這些內(nèi)容純純是搬磚,都是基于別人的引擎(unity引擎)下使用UGUI 的一些問題
較真怎么才不屬于搬磚:文章來源:http://www.zghlxwxcb.cn/news/detail-643306.html
- 尋找硬件物質(zhì)材料
- 制作硬件
- 制作芯片
- 編寫硬件芯片驅(qū)動程序
- 編寫操作系統(tǒng)
- 再操作系統(tǒng)上編寫編程語言(不使用二進(jìn)制指令的編寫方式,規(guī)模大就不可維護(hù))
- 編寫編譯器
- 編寫IDE
- 使用你自己的IDE編寫引擎APP
- 再使用你自己的系統(tǒng)編寫引擎的渲染器
- 再編寫渲染與硬件加速渲染結(jié)合
那么恭喜你,終于不是搬磚了文章來源地址http://www.zghlxwxcb.cn/news/detail-643306.html
到了這里,關(guān)于Unity - 搬磚日志 - UGUI合批優(yōu)化 - Overlap(UI AABB 有重疊), Z != 0 照樣合批的方案的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!