Unity3D中DrawCall、Batches、SetPassCall

24 篇文章 0 订阅
17 篇文章 2 订阅

DrawCall,一帧当中CPU调用GPU渲染指令接口的次数。

本文测试用的是Unity3D - 2020.3.8版本

在Unity3D编辑器中,通过Window->Analysis->Profiler打开Profiler页面,然后选中Rendering栏,如下所示
在这里插入图片描述
在这里就可以看到drawcall的数量了,在stats界面是看不到DrawCall数目的,对于DrawCall的定义如下:
**DrawCall:**CPU每次调用图像编程接口 glDrawElements(OpenGl中的图元渲染函数)或者 DrawIndexedPrimitive(DirectX中的顶点绘制方法)命令GPU渲染的操作称为一次Draw Call,调用会传入图元模式、顶点数目、索引值类型以及指向索引数组的指针。

Batches, 一帧当中CPU给GPU传输顶点数据以及渲染状态的次数。

查看Batches,在编辑器中查看方式,首先切换到Game界面,然后点States选项,如下所示:
在这里插入图片描述

Batch,就是批次的意思,当CPU和GPU通信的时候,会把需要传递的数据传给GPU,例如渲染状态,用什么Shader、用那些材质等,一个Batch至少会包含一次DrawCall(一般是一次,特殊情况:当这个批次的定点数目过多,就得分成两次或者多次去调用DrawCall),我们在Unity中测试的时候,通常会发现Batches和DrawCall是一样的。通常我们说合批能能够提高游戏的性能,一般可以这么说,但是Batches高并不是游戏帧率低的直接原因,而是batch太多导致切换渲染状态太频繁,切换渲染状态是比较耗时的,比如在Shader常见的是否关闭深度写入,开启模板测试等。

SetPassCall, 和shader的Pass有关,unity的解释是Shader中的Pass被切换的次数。

数值查看在unity编辑器里面的位置如下所示:
在这里插入图片描述
简单来说,就是一帧中,要切换shader中pass的次数,比如一个Shader中有两个pass,那么这个Shader一次就增加两次SetPassCall,如果前后两次drawcall中,shader没变,那么SetPassCall的值是不会增加的,应该可以这么去间的的验证下,在Unity编辑器中,打开FrameDebug,如下:
在这里插入图片描述
通过切换第一个红框中的不同帧,可以看到不同的shader的切换,最后总次数应该是等于我们看到的SetPassCall值。

  • 6
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值