这节课描述有疑问,ASTC 4*4 Block = 16字节,1像素 = 1字节。这个结论怎么来的没听懂?
这节课描述有疑问,ASTC 4*4 Block = 16字节,1像素 = 1字节。这个结论怎么来的没听懂?
etc2 优点 etc2 支持透明通道
如果当前需求需要透明通道
用两张etc1的图做 通道分离
第二张的图做 只带透明通道就可以
etc2 会比etc1 大小要大一倍
一个像素占了几个字节
1字节 = 8 bit
astc 像素块进行计算
1 block = 16 字节
4x4 :高4像素 宽4像素 = 16像素点
填充率:参考像素的绘制而不是物理上能不能看的见
RectMask2D
不占用drawcall,利用当前的的区域做一个裁剪处理。
进行裁剪:
告诉子类传一个区域,告诉它那些点不用绘制,哪些点需要绘制。
rectMask2D的子物体 是没有办法和其他rectmask2D子物体进行合批的
mask上的imag是可以进行合批的
mask下的子物体 是可以正常合批的
mask之间满足合批条件也是可以合批
jpg:有损压缩不透明
png:无损压缩不透明
压缩格式转成纹理格式
原因:jpg和png无法被unity解压的
rgba 大 最接近原图
rgba32 高清 原图
mask产生两个drawcall 怎么来的
第一个:最开始设置模板缓存的过程而产生的
第二个:最后还原模板缓存而产生的
mask类里面 GetModifiedMaterial方法 模板的材质处理类
自动添加特殊的材质处理类导致无法合批
合批规则
1.遍历ui
2.根据深度值,材质id,图片id,rendersort依次进行一个深度处理
3.list中所有深度值为-1的都要剔除掉
4.相邻的元素是否能进行合批
首先根据材质排序
判断图片id排序
面板顺序排序
depth(深度)优先级最高
不渲染的深度值为-1
深度越小越先渲染
当前得ui元素会判断底下得ui元素是否能够合批
如果不能合批得话,那么我当前得ui元素得深度值是底下ui元素深度值+1
合批
把能够合并mesh得这部分合并到一起
判断合批 :
1.图片是否一样的
2.材质是否一样的
和其他子物体没法进行合批
http://http://tejhg
在原生的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,什么颜色缓冲区的关系扯得太远了。这都是固定管线时代就已经有的内容了……
网格重建,如果在同一个canvas下创建了很多的UI面板,修改其中一个image的颜色,都会重建所有的网格
渲染队列的概念
UI为什么会费性能
首先,透明物体最重要的概念是,不会写深度,正常物体在深度写入后会起到优化的作用,因为系统会先渲染前面的物体,而后面被遮挡的物体则不会再进行渲染,半透明物体一般是从后向前渲染,会先将后面渲染一次,再将半透明物体渲染一次(也就是OverDraw增加的原因)
UI系统生成的东西全都是从后向前的渲染,所以UI会存在优化的原因,当我们有大量的UI时,就需要进行优化。
怎么优化?
渲染队列的概念是什么?
1、做UI优化必然会牵扯到渲染
概念一 深度测试
前后关系,两个模型的深度分别是怎么样的
缓冲区:颜色缓冲区保存颜色,深度缓冲区保存深度(和相机的距离)
Zwrite on(深度写入)
ZTest Alway(深度写入)alway代表一直写入
两种常见mask实现方式
一种就是常见的Rect2DMask
二是Mask部分,实现效果是模板缓存(Stencil)