先来一句现实又扎心的:
在 UGUI 里,真正能一刀把合批砍得稀碎的,不是美术乱画,不是程序乱写,而是:Mask / RectMask2D。
你可能已经发现了:
- 一个简单的 ScrollView / 列表,
- 加了个 Mask 或 RectMask2D 之后,
- Profiler 一看:UI DrawCall 数量明显上去了;
- Frame Debugger 里,原本可以整整齐齐合在一起的批次,被硬生生切成几段。
这时候网上一搜:
“Mask 会打断合批、RectMask2D 也会打断合批”——
说得跟铁律一样,但很少有人解释清楚:为啥它们“必须”打断合批?
这篇文章就用大白话,
从“GPU 是怎么画东西的”的角度,把这事讲透:
- Mask / RectMask2D 本质在干嘛?
- 它们对 GPU 渲染状态做了哪些“特殊要求”?
- 为啥这些要求一来,合批就不得不让路?
- Mask 和 RectMask2D 谁更重?有什么取舍?
- 项目里该怎么用,才能既有遮罩效果又不把性能打崩?