Mask必须有一个Image,Mask会打断相邻的合批,mask下的和mask外的无法合批,mask会产生两个drallcall,最开始设置模板缓存的时候会产生一次drallcall,mask下子物体都都遍历结束,需要把模板缓存还原一下,又产生一次drallcall。
需要用到mask的时候会给mask添加一种特殊的材质,导致跟外部无法合批,
合批的条件,材质id一样, 图片id也一样,
开始mask之前,设置模板缓存,mask之后还原模板缓存,分别造成了一次drallcall
模板缓存需要隐藏的地方模板缓存为0,显示的地方模板缓存为1,渲染的过程中取出像素模板缓存为1渲染,为0不渲染。渲染的0和1存在每一个像素点上,模板缓存的操作是像素级的,一个像素像素的操作,
Mask下的物体,即使被遮挡,深度计算以及drallcall在用着,
Mask下的物体之前能进行正常的合批,Mask之间满足合批条件,他们之间的元素也是可以进行合批的,
隐藏物体的框不能和可以合批的物体重叠,
Mask2D子物体渲染区域的操作,不占用drallcall,Mask上的Img和Mask上的Img是可以合批的, Mask2D下的与别的Mask2D下的物体无法合批
RectMask2D比Mask节省性能,RectMask2D是给子物体传一个区域,告诉子物体,那些点需要绘制,哪些点不需要,区域外的顶点不绘制,如果物体完全移出裁剪区域,不占用drallcall,不参与UI深度运算。RectMask2D的子物体和Mask的子物体没办法合批。
如果当前场景中只有一个mask,用RectMask2D比较省。
OverDrall
UI填充率问题,尽量减少UI之间的覆盖,减少重叠,
切九宫格优化填充率,减少Text的outline,shadow的使用,会大量增加顶点数4倍,用textmeshpro
主摄像机的设置,减少Unity默认天空盒的绘制,3D场景可以设置一个3D相机,一个2D相机。
Image的平铺模式Tiled会增加顶点数,正常情况下是8,使用平铺后变为变为了68=8+15*4,每增加一个图,增加4个顶点
Image组件,改用RawImage,把图标的模式改为Repeat
更改之后没有增加额外的顶点数
取消勾选