两种常见mask实现方式
一种就是常见的Rect2DMask
二是Mask部分,实现效果是模板缓存(Stencil)
两种常见mask实现方式
一种就是常见的Rect2DMask
二是Mask部分,实现效果是模板缓存(Stencil)
1、做UI优化必然会牵扯到渲染
概念一 深度测试
前后关系,两个模型的深度分别是怎么样的
缓冲区:颜色缓冲区保存颜色,深度缓冲区保存深度(和相机的距离)
Zwrite on(深度写入)
ZTest Alway(深度写入)alway代表一直写入
渲染队列的概念
UI为什么会费性能
首先,透明物体最重要的概念是,不会写深度,正常物体在深度写入后会起到优化的作用,因为系统会先渲染前面的物体,而后面被遮挡的物体则不会再进行渲染,半透明物体一般是从后向前渲染,会先将后面渲染一次,再将半透明物体渲染一次(也就是OverDraw增加的原因)
UI系统生成的东西全都是从后向前的渲染,所以UI会存在优化的原因,当我们有大量的UI时,就需要进行优化。
怎么优化?
渲染队列的概念是什么?
脏标记还是什么标记,听不清楚
http://http://tejhg
网格重建,如果在同一个canvas下创建了很多的UI面板,修改其中一个image的颜色,都会重建所有的网格
unity二次压缩
这节课描述有疑问,ASTC 4*4 Block = 16字节,1像素 = 1字节。这个结论怎么来的没听懂?
canvas ui的父物体,图形描绘到屏幕上
决定ui的渲染顺序的几个因素:
1,是否叠加于其他ui上,是则深度+1;
2,
深度值为-1则不渲染
深度计算流程:
1,UI mesh是否重叠,最下层深度为0,覆盖一层深度+1
2,UI与被它覆盖的UI的材质球id和贴图id是否相等,不相等则深度+1
3,按照列表显示顺序以及深度值进行列表排序
4,送入渲染队列
合批
把能够合并mesh得这部分合并到一起
判断合批 :
1.图片是否一样的
2.材质是否一样的
depth(深度)优先级最高
不渲染的深度值为-1
深度越小越先渲染
当前得ui元素会判断底下得ui元素是否能够合批
如果不能合批得话,那么我当前得ui元素得深度值是底下ui元素深度值+1
首先根据材质排序
判断图片id排序
面板顺序排序
mask产生两个drawcall 怎么来的
第一个:最开始设置模板缓存的过程而产生的
第二个:最后还原模板缓存而产生的
mask类里面 GetModifiedMaterial方法 模板的材质处理类
自动添加特殊的材质处理类导致无法合批