针对Unity中UI的DrawCall的优化

摘要

  • 文档分为5个部分:
    • drawcall的理解;
    • unity中的DrawCall合并;
    • 一些配置和工具;
    • 针对UI的合批分析;
    • UI拼接建议。

DrawCall的理解

什么是drowcall?

drawcall是openGL的描绘次数,一个简单的openGL的绘图次序是:

设置颜色→绘图方式→顶点座标→绘制→结束

每帧都会重复以上的步骤,这就是一次draw call;
如果有两个model,那么需要(两次draw calls):

设置颜色→绘图方式→顶点座标A→绘制→结束

设置颜色→绘图方式→顶点座标B→绘制→结束

也就是说在openGl绘制前,如果色彩通道(color filter),绘图方式(shader),顶点(model)不同的情况下draw calls就会增加;
对openGl来说绘制参数(状态值)的变更要比绘制大量的顶点更耗费cpu。所谓高速绘图就是,在尽量不改变openGl状态值的情况下,用一次draw call完成所有绘制;
比如上面的例子:

设置颜色→绘图方式→顶点座标A+顶点座标B→绘制→结束

就要更加有效率;

unity中的drowcall

unity(或者说基本所有图形引擎)生成一帧画面的处理过程大致可以这样简化描述:
引擎首先经过简单的可见性测试,确定摄像机可以看到的物体,然后把这些物体的顶点(包括本地位置、法线、UV等),索引(顶点如何组成三角形),变换(就是物体的位置、旋转、缩放、以及摄像机位置等),相关光源,纹理,渲染方式(由材质/Shader决定)等数据准备好,然后通知图形API或者就简单地看作是通知GPU开始绘制,GPU基于这些数据,经过一系列运算,在屏幕上画出成千上万的三角形,最终构成一幅图像。

在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call。这一过程是逐个物体进行的,对于每个物体,不只GPU的渲染,引擎重新设置材质/Shader也是一项非常耗时的操作。因此每帧的Draw Call次数是一项非常重要的性能指标,对于iOS来说应尽量控制在20次以内,这个值可以在编辑器的Statistic窗口看到。

详见这篇文章

unity中的DrawCall合并

  • Unity内置了Draw Call Batching技术,主要目标就是在一次Draw Call中批量处理多个物体,只要物体的变换和材质相同,GPU就可以按完全相同的方式进行处理,即可以把它们放在一个Draw Call中。

  • Unity中的Batching分为D

  • 5
    点赞
  • 36
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

华-华仔

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值