填充率:参考像素的绘制而不是物理上能不能看的见
填充率:参考像素的绘制而不是物理上能不能看的见
etc2 优点 etc2 支持透明通道
如果当前需求需要透明通道
用两张etc1的图做 通道分离
第二张的图做 只带透明通道就可以
etc2 会比etc1 大小要大一倍
合批就是把能够合并的mesh合并到一起,可以降低drawcall的数量
射线部分的检测判定流程:
1,显示器
2,检查相机显示范围
3,判断射线距离
4,判断UI深度,UI的响应事件开关,UI graphic的剔除
5,射线是否在rectTransform范围内,
6,物体是否超出相机的最远切面,
7,对检测到的物体根据深度排序
合批规则
1.遍历ui
2.根据深度值,材质id,图片id,rendersort依次进行一个深度处理
3.list中所有深度值为-1的都要剔除掉
4.相邻的元素是否能进行合批
UI的和批规则:
1,深度,
2,材质球id
3,贴图id
4,UI物体在列表上的排列顺序(相邻的两个UI)
深度值为-1则不渲染
深度计算流程:
1,UI mesh是否重叠,最下层深度为0,覆盖一层深度+1
2,材质球和
1.渲染概念
深度测试
颜色缓冲区
深度缓冲区 深度值越大
渲染队列
透明物体 不会写写深度 ,没有办法判断是谁先谁后
渲染半透明物体
网格 从建
大部分的问题 牵扯的问答大部分都是网格重建的问题
1. 合批 rebateh
canvas 下任何物体发生变化就会发生,所有的物体都会发生网格重建
2 rebuild 单个物体 canvas.buildbath
Mask之间也能进行和批操作,前提是mask物体不与另一个mask的子物体重叠,同时两个mask在列表中相邻
DrawCall
OverDraw
Betach
和其他子物体没法进行合批
jpg:有损压缩不透明
png:无损压缩不透明
压缩格式转成纹理格式
原因:jpg和png无法被unity解压的
rgba 大 最接近原图
rgba32 高清 原图
一个像素占了几个字节
1字节 = 8 bit
astc 像素块进行计算
1 block = 16 字节
4x4 :高4像素 宽4像素 = 16像素点
在原生的opengl中,所谓深度测试指的是,当前绘制指令里待绘制的所有点,其投影在屏幕上的前后覆盖关系是否受点的z坐标影响。
举同一帧内两条绘制指令的例子。
glenable(gl_depth_test)
glbegin()
绘制三角形A
glend()
gldsiable(gl_depth_test)
glbegin()
绘制三角形B(B的z坐标比A更远)
glend()
绘制B前面有gldisable(gl_depth_test)
所以B的绘制其与A的关系不再受z坐标影响,所以视口窗口里B会在A前面,如果我没有gldisable(gl_depth_test)这一句,那么A就会在B前面。
这跟什么colorbuffer,什么颜色缓冲区的关系扯得太远了。这都是固定管线时代就已经有的内容了……
1.基础知识
2.UI类的实现和关系
3.UI部分渲染规则
4.重建的原理
5.批处理的方式
6.射线的实现
7.填充率
8.UI组件优化点
9.设置上的优化点
10.优化方案实战
mask下的子物体 是可以正常合批的
mask之间满足合批条件也是可以合批
RectMask2D
不占用drawcall,利用当前的的区域做一个裁剪处理。
进行裁剪:
告诉子类传一个区域,告诉它那些点不用绘制,哪些点需要绘制。
rectMask2D的子物体 是没有办法和其他rectmask2D子物体进行合批的
mask上的imag是可以进行合批的