在Unity中,每次引擎准备数据并通知GPU的过程称为一次Draw Call,这一过程是逐个物体进行的,对于每个物体,不止GPU的渲染,引擎重新设置材质/Shader也是一项非常耗时的操作,下面就给大家介绍下Draw Call

DrawCall

DrawCall就是一个命令,从CPU发起,GPU接收。这个命令指向一个需要被渲染的图元(primitives)列表,告诉GPU开始进行一个渲染过程。相当与OpenGL中的glDrawElements命令,DirectX中的DrawIndexedPrimitive命令。

CPU和GPU并行工作

使用一个命令缓冲区(Command Buffer),CPU添加命令,GPU读命令。命令有多种,DrawCall是其中一种,其他命令还有改变渲染状态等。

1.CPU和GPU并行工作的原理

为了CPU和GPU可以并行工作,就需要一个命令缓冲区(Command Buffer)

命令缓冲区包含了一个命令队列,由CPU向其中添加命令,而由GPU从中读取命令。添加和读取的过程是相互独立的,因此命令缓冲区可以使CPU和GPU相互独立工作。当CPU需要渲染一些对象时,它可以向命令缓冲区添加命令,而GPU完成了上一次的渲染任务后,它就可以从命令队列里取出一个命令并执行它。

命令缓冲区中的命令有很多种类,而Draw Call是其中的一种,其它命令还有改变渲染状态等命令(改变使用的Shader,使用不同的纹理等)。

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

在每次调用Draw Call之前,CPU需要向GPU发送很多内容,包括数据,状态,命令等。在这一阶段,CPU需要完成很多工作,例如检查渲染状态等。而一旦CPU完成了这些准备工作,GPU就可以开始本次的渲染。GPU的渲染能力是很强的,渲染300个和3000个三角网格通常没有什么区别,因此渲染速度往往快于CPU提交命令的速度。如果Draw Call的数量太多,CPU就会把大量时间花费在提交Draw Call命令上,造成CPU的过载。

*因此造成Draw Call性能问题的元凶是CPU。

3.如何减少DrawCall?

提交大量很小的Draw Call会造成CPU的性能瓶颈,即CPU把时间都花费在准备Draw Call的工作上了。那么,一个很显然的优化想法就是把很多小的Draw Call合并成一个大的Draw Call,这就是批处理的思想。

需要注意的是,由于我们需要在CPU的内存中合并网格,而合并的过程是需要消耗时间的。因此,批处理更适合静态的物体,例如不会移动的大地,石头等,对于这些静态物体我们只需合并一次即可。当然,我们也可以对动态物体进行批处理。但是,由于这些物体是不断运动的,因此每一帧都需要重新进行合并然后再发送给GPU,这对空间和时间都会造成一定的影影响

Unity Draw Call是什么? DrawCall的简单介绍相关推荐

  1. 【贪玩巴斯】Unity3D初学圣经(一)——学习要求 Unity简单介绍 游戏引擎介绍 课程体系介绍 「1-1 到 1-4 」—— 2021年12月9日

    Unity3D初学圣经 一 --学习要求 & Unity简单介绍 & 游戏引擎介绍 & 课程体系介绍 本文对应视频P1 1-1 到P2 1-4 1.学习要求 2.Unity简单 ...

  2. Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现

    Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现 目录 Unity 工具类 之 编辑扩展器 之 简单的音效管理编辑扩展器面板实现 一.简单介绍 二.实现原理 三.注意事项 四. ...

  3. Unity动画系统简单介绍

    Unity动画系统知识点简单介绍(简易) 本文是学习文,其中转载某些文章,如有侵权,联系删除. 学习要点: 1.动画的分类 游戏物体的基础动画设置,UGUI设置的按钮状态,2D游戏Sprite动画,R ...

  4. 人脸识别开源库face_recognition的简单介绍

    人脸识别开源库face_recognition的简单介绍 原文出处: https://blog.xugaoxiang.com/ai/face-recognition-cnn.html 软硬件环境 ub ...

  5. 【Unity3D插件】DoTween插件的简单介绍及示例代码

    推荐阅读 CSDN主页 GitHub开源地址 Unity3D插件分享 简书地址 我的个人博客 QQ群:1040082875 unity里面做插值动画的插件有许多,比较常见的有itween.hotwee ...

  6. 简单介绍十几款常用的画架构图流程图的软件

    简单介绍十几款常用的画架构图流程图的软件 draw.io draw.io是开源免费的在线画图工具,还提供桌面版本. 特性: 实时协作: 支持在线离线版本: 存储支持多种方式:Google Drive, ...

  7. Unity DOTS 学习笔记1 - ECS 0.50介绍和安装

    Unity DOTS 学习笔记1 - ECS 0.50介绍和安装 为什么学习这个技术 ECS的全称为Entity Component System,是最早由暴雪在GDC2017上提出的一个新的游戏设计 ...

  8. 强大的UI编辑器-FairyGui简单介绍

    FairyGui简单介绍 学习路径 1.下载FairyGUI编辑器. 2.下载对应你的开发平台的FairyGUI SDK. 3.对照SDK里的例子(包括编辑器里的UI设计,和运行时的代码),阅读全部官 ...

  9. 在Unity中制作完整的技能系统(介绍篇)

    在Unity中制作完整的技能系统(介绍篇) 大噶吼呀,还是我暴躁老哥酒九.最近的我遇到了游戏荒,于是我就重新去玩了玩<英雄联盟>,结果发现还是一如既往的强了(不是).对于这款游戏我就不用多 ...

最新文章

  1. 微信小程序 --- 拨打电话
  2. sql 外连接的写法。
  3. html树形多选下拉列表,EasyUI 多行树形下拉框(Multiple ComboTree)_Vue EasyUI Demo
  4. Appium+python自动化2-环境搭建(windows下)
  5. 接口——Serializable
  6. spring—事务控制
  7. 基于哈希表的索引堆变形(Hackerrank: QHEAP1)
  8. C++ 基本数据类型 的 字节数
  9. 洛谷P2312解方程题解
  10. 返回固定页面的web服务器
  11. php框架 路由_PHP框架开发之Route路由简单实现
  12. 系统与服务器断开了连接不上,win7系统电脑玩跑跑卡丁车出现与服务器断开连接的解决方法...
  13. Excel在行上面一键定位可见单元格!
  14. Arduino--土壤湿度传感器使用(电阻式)
  15. 解答篇:金蝶K3wise总账凭证页面查询不到科目分录核算项目
  16. 人工智能的未来--神经科学启发的类脑计算综述
  17. D-Link DCS系列监控账号密码信息泄露
  18. 电脑快捷操作方式大全
  19. PPT文档翻译软件怎么用?如何翻译整篇PPT文档
  20. 网站关键词排名优化中常见的问题及解决方法

热门文章

  1. dotnet OpenXML 读取 PPT 内嵌 ole 格式 Excel 表格的信息
  2. 研究Javascript 中的 AST
  3. 多传感器融合--MATLAB跟踪器介绍
  4. sync-player:使用websocket实现异地同步播放视频
  5. 2位数码管显示00-99的89c51单片机电子秒表设计c语言,2位数码管显示00-99的89c51单片机电子秒表设计 的程序和电路图...
  6. 写了个能用的战国传承 3 连击脚本
  7. 备忘录怎么显示在电脑桌面上 可以将备忘内容显示到桌面的便签
  8. 英特尔的VT-d技术是什么?
  9. 用友软件输出U6文件如何恢复
  10. R语言微博数据处理(2)