0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

游戏卡顿元凶竟然是 Draw Call!

颖脉Imgtec 2025-11-04 10:51 次阅读
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

本文转自:字符无限科技

玩游戏时遇到画面掉帧、操作延迟,大概率和一个叫Draw Call的指标有关。它是游戏渲染的核心环节,也是性能优化绕不开的坎,哪怕是Unity、UE 引擎的资深开发者,也得在它身上下功夫。


什么是Draw Call?

Draw Call仅仅是一条指令!Draw Call指令从CPU传到GPU,渲染一个网格。指令只指向一个被渲染的网格并且不包含任何材质信息。

在发出指令后,GPU的渲染状态值(材质、纹理、shader等)和所有的顶点数据通过神奇的代码转化为以一个信息,然后再在你的屏幕上呈现出美丽的画面。

2755d8a8-b929-11f0-8ce9-92fbcf53809c.png

渲染就是在做一个巨大数量的小任务,比如计算成千上万的顶点和在屏幕上绘制以百万计的像素。

Draw Call 本身的含义很简单,就是CPU调用图像编程接口,如OpenGL 中的glDrawElements 命令或者DirectX 中的DrawlndexedPrimitive命令,以命令GPU 进行渲染的操作。

其核心流程包含三个阶段:

数据准备:CPU将网格数据、纹理、材质属性等资源从内存(RAM)传输至GPU显存(VRAM);

状态配置:设置渲染管线状态(如着色器、混合模式、深度测试)和全局参数(如光照、投影矩阵);

指令提交:调用glDrawElements或DrawIndexedPrimitive等API触发GPU渲染。

关键特性:


命令缓冲区机制:CPU与GPU通过Command Buffer实现异步通信,CPU写入指令,GPU按队列顺序执行;

渲染状态切换成本:每次材质、纹理或着色器变更需重新配置全局状态,产生额外开销。

你在游戏里看到的每棵树、每个角色、每道特效,背后都需要 CPU 发一次(或多次)命令,告诉 GPU “该画这个东西了”。比如屏幕上有 100 棵树,默认情况下可能就有 100 个 Draw Call,GPU 收到命令后才会执行渲染操作。

这里要明确一个关键点:Draw Call就是一个命令,它的发起方是CPU,接收方是GPU。这个命令仅仅会指向一个需要被渲染的图元(primitives)列表,而不会再包含任何材质信息,这是因为我们已经在上一个阶段中完成了!

276769a6-b929-11f0-8ce9-92fbcf53809c.png

一个常见的误区是, Draw Call 中造成性能问题的元凶是GPU,认为GPU 上的状态切换是耗时的,其实不是的,真正“拖后腿”其实的是CPU。


为什么Draw Call 多了会影响帧率?

我们先来做一个实验:先创建10000个小文件,每个文件的大小为1KB,然后把它们从一个文件夹复制到另一个文件夹。你会发现,尽管这些文件的空间总和不超过10MB ,但要花费很长时间。

现在,我们再来创建一个单独的文件,它的大小是10MB,然后也把它从一个文件夹复制到另一个文件夹。而这次复制的时间却少很多!

这是为什么呢?明明它们所包含的内容大小是一样的。原因在于,每一个复制动作需要很多额外的操作,例如分配内存、创建各种元数据等。

如你所见,这些操作将造成很多额外的性能开销,如果我们复制了很多小文件,那么这个开销将会很大。

渲染的过程虽然和上面的实验有很大不同,但从感性角度上是很类似的。在每次调用Draw Call 之前, CPU 需要向GPU 发送很多内容,包括数据、状态和命令等。

2781696e-b929-11f0-8ce9-92fbcf53809c.png

在这一阶段, CPU 需要完成很多工作,例如检查渲染状态等。而一旦CPU 完成了这些准备工作, GPU 就可以开始本次的渲染。

GPU 的渲染能力是很强的,渲染200 个还是2000 个三角网格通常没有什么区别,因此渲染速度往往快于CPU 提交命令的速度。

如果Draw Call 的数量太多, CPU 就会把大量时间花费在提交Draw Call 上,造成CPU 的过载。

2794aca4-b929-11f0-8ce9-92fbcf53809c.jpg


如何减少Draw Call?

尽管减少Draw Call 的方法有很多,但我们这里仅讨论使用批处理(Batching )的方法。

我们讲过,提交大量很小的Draw Call 会造成CPU 的性能瓶颈,即CPU 把时间都花费在准备Draw Call 的工作上了。

那么,一个很显然的优化想法就是把很多小的DrawCall 合并成一个大的Draw Call ,这就是批处理的思想。

需要注意的是,由于我们需要在CPU 的内存中合并网格,而合并的过程是需要消耗时间的。因此,批处理技术更加适合于那些静态的物体,例如不会移动的大地、石头等,对于这些静态物体我们只需要合并一次即可。

当然,我们也可以对动态物体进行批处理。但是,由于这些物体是不断运动的,因此每一帧都需要重新进行合并然后再发送给GPU,这对空间和时间都会造成一定的影响。

27a47846-b929-11f0-8ce9-92fbcf53809c.png

在游戏开发过程中,为了减少Draw Call 的开销,需要注意:

避免使用大量很小的网格。当不可避免地需要使用很小的网格结构时,考虑是否可以合并它们。

避免使用过多的材质。尽量在不同的网格之间共用同一个材质。

合并的网格会在一次渲染任务中进行绘制,他们的渲染数据,渲染状态和shader都是一样的,因此合并的条件至少是:同材质、同贴图、同shader。最好网格顶点格式也一致。

合并本身有消耗,因此尽量在编辑器下进行合并。

确实需要在运行时合并的,将静态的物体和动态的物体分开合并:静态的合并一次就可以,动态的只要有物体发生变换就要重新合并。

Draw Call 作为游戏性能的关键指标,优化的核心从来不是让GPU 少画,而是让 CPU 少发命令。掌握批处理技巧,再注意开发中的细节,就能有效减少卡顿,让游戏画面更流畅。


声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • cpu
    cpu
    +关注

    关注

    68

    文章

    11339

    浏览量

    226026
  • gpu
    gpu
    +关注

    关注

    28

    文章

    5292

    浏览量

    136113
收藏 人收藏
加入交流群
微信小助手二维码

扫码添加小助手

加入工程师交流群

    评论

    相关推荐
    热点推荐

    N9H20 GPIO上电竟然是高电平,有没有办法解决?

    一直很纳闷,GPIO上电竟然是高电平。有没有办法解决,是不是要改动启动程序才能解决问题?
    发表于 01-17 08:27

    [转帖]这样的建站程序,竟然是免费的!

    这样的建站程序,竟然是免费的!废话就不多说了,大家看了图再发表意见吧![/url][url=http://b86.net]这样的程序,只需要,购买耐思尼克www.b86.net/?s=cartoon
    发表于 05-22 16:06

    影响PCB价格的因素竟然是这些,表示都忽略了

    影响PCB价格的因素竟然是这些,表示都忽略了
    发表于 04-09 19:41

    那种小时候游戏插接的封装怎么画?

    ``问下上图中那中小时候玩的游戏游戏卡插接部分(好像就是一排长条矩形的焊盘的样子)的封装哪里有?``
    发表于 06-11 11:37

    【NUCLEO-F412ZG试用体验】Nucleo412竟然是6层板

    本帖最后由 zpzdd 于 2017-2-28 09:37 编辑 看了板子的图纸才知道Nucleo412竟然是6层板,ST真是大手笔啊
    发表于 02-28 09:36

    AD421供电问题,Vcc引脚输出竟然是12v是怎么回事?

    电路图,如图所示,mosfet采用,ND2020l,VCC竟然是12v,这是怎么回事呢?如何解决?谢谢!
    发表于 09-26 15:34

    器件功耗太大,元凶竟然是它!

    不同器件的电源,直至找到真正肇事者,这时我想起不久之前的一个类似案例,那个案例的“元凶”是一个独自挂在供电轨和地之间的LED,没有限流电阻与之为伍。LED最终失效是因为过流,还是纯粹因为它觉得无聊了,我不能
    发表于 10-26 11:44

    新创公司:SD摇身变游戏卡

    新创公司:SD摇身变游戏卡 FXI Technologies AS公司CEO Isaac van Kempen希望把任天堂的游戏卡形式引入智能手机领域。该公司计划在2011年初发布内置游戏与硬件加速器的microSD
    发表于 11-17 09:15 966次阅读

    500天不,荣耀V9这次吹的有点大!

    手机一直都是安卓手机用户的痛点,打游戏卡到爆,开应用慢到底,而各品牌对付手机的招数也不尽相同。近日,声称500天不
    发表于 03-10 17:31 2067次阅读

    游戏画面是什么原因

    对于广大玩家们而言,影响游戏体验的一大元凶,就当属和画面撕裂了,特别是在玩动作游戏时,
    的头像 发表于 04-18 10:13 1.8w次阅读

    高通和腾讯联合研发,通过实时双频Wi-Fi技术解决游戏卡问题

    在 Wi-Fi 已经成为生活必需品的当下,Wi-Fi 是否快速稳定甚至会影响我们的生活品质。 比如周末在家里打一盘《王者荣耀》,如果离路由器的位置隔着一两堵墙,可能时不时就出现延迟高的情况。
    的头像 发表于 09-23 16:18 3525次阅读

    Win10玩游戏卡怎么办

    很多网友都说Win10下玩游戏卡,相反在Win7里就会好很多。这一方面是由你的电脑硬件决定,另一方面也和游戏版本有关。通常来说,新游戏对于Win10的兼容性会更好一些。此外在Win1
    的头像 发表于 04-02 09:34 5348次阅读

    iPhone12翻车,5G游戏卡严重

    很多同学的 iPhone 12 到手之后,本来高高兴兴 ,结果玩十分钟游戏就会发现,、掉帧、暗屏的问题全都出现了,这是买了个假 12 ? 而且这不是个例,甚至还登上了知乎热榜第一: 根据我的实测
    的头像 发表于 11-10 10:23 6130次阅读

    你不知道的FPC,它的发展史竟然是这样的!

    你不知道的FPC,它的发展史竟然是这样的!
    的头像 发表于 11-15 10:48 2671次阅读

    UPS(不间断电源)故障频发?原因竟然是这样

    UPS(不间断电源)故障频发?原因竟然是这样
    的头像 发表于 04-19 13:53 2130次阅读
    UPS(不间断电源)故障频发?原因<b class='flag-5'>竟然是</b>这样