位置: 编程技术 - 正文

Draw Call(drawcalls2000多)

编辑:rootadmin

推荐整理分享Draw Call(drawcalls2000多),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:drawcall是什么意思,Draw call optimizer,Draw calls2000是啥意思,draw calls是什么意思,Draw call optimizer,draw calls,draw calls是什么意思,drawcall是什么意思,内容如对您有帮助,希望把文章链接给更多的朋友!

转自: Draw Call,当然Unity也不例外。打开Game Window里的 Stats,可以看到 Draw Call 与 Batched 的数字。

但到底什么是 Draw Call?影响的效能是来自 CPU?还是 GPU?

首先,让我们定义何为 “Draw Call”:

“一个 Draw Call,等于调用一次 DrawIndexedPrimitive (DirectX) or glDrawElements (OpenGL),等于一个 Batch”。

摸过 DirectX 或 OpenGL 的人来说,对 DrawIndexedPrimitive 与 glDrawElements 这 2个API 一定不陌生。

当我们准备好资料 (通常为三角面的顶点信息), 要 GPU 画出来时,一定得调用这个函数。换句话说,如果在画面上有一张 “木" 椅子、一张 “铁" 桌子,那理论上就会有两个 Draw Call。有看到特别点出 “木" 与 “铁"吗?这代表两物件是使用不同材质球或者不同的 Shader。在 DirectX 或 OpenGL 里,对不同物件指定不同贴图或不同 Shader 的描述,就会需要调用两次Draw Call。

Procedure code如下:

SetShader("Diffuse") ;

SetTexture("铁");

DrawPrimitive(DeskVertexBuffer) ;

SetShader("Diffuse") ;

SetTexture("木") ;

DrawPrimitive (ChairVertexBuffer) ;

每次对 Shader 的更动或者贴图的更动,基本上就是对 Rendering Pipeline 的设定做修改,所以需要不同的 Draw Call 来完成物件的绘制。现在了解为什么 Unity 官方文件里,老是要你尽量使用同样材质球,以减少 Draw Call 数量了吧!

再来谈到 Batch,其实也是 Draw Call 的另一种称呼。你可以想成每一次的 Draw Call 会产生一个 Batch,而 Batch 里装的是物件顶点信息,Batch 由 CPU 透过 “驱动程式” 将顶点资料送往 GPU,GPU接手后将物件画在画面上。由此可知,越多 Draw Call,CPU 就越忙碌。这下更清楚知道 Draw Call 数量所影响的是 CPU 效能而非 GPU。

NVIDIA在GDC曾提出,K batchs/sec 会吃满 1GHz 的 CPU,的使用率。所以他们推出了一条公式,来预估游戏中大概可以 Run 多少个 Batch:

浅谈Draw Call和Batch的区别

举个例子:如果你的目标是游戏跑FPS、使用2GHz的CPU、%工作量拨给Draw Call来使用,那你每秒可以有多少Draw Call呢?

Batchs/Frame = K * 2 * (0.2/)

Draw Call(drawcalls2000多)

那既然 Batch 是个箱子,里头装着物件的顶点信息,再依据我们上面的描述,那表示同样材质或 Shader 的物件,可以合并成一个 Batch 送往 GPU,这样就是最省事的方法!

Unity在 Player Setting 里的两个功能选项 Static Batching 与 Dynamic Batching。功能描述如下:

Static Batching 是将标明为 Static 的静态物件,如果在使用相同材质球的条件下,Unity 会自动帮你把这两个物件合并成一个 Batch,送往 GPU 来处理。这功能对效能上非常的有帮助,所以是需要付费版(Pro专业版)才有的。Dynamic Batching 是在物件小于面的条件下(不论物件是否为静态或动态),在使用相同材质球下,Unity就会自动帮你合合并成一个 Batch 送往 GPU 来处理。

根据上述的说明,相信大家对降低 Draw Call 这件事有更深一层的认识吧!还有什么不清楚或者错误的地方,还请大家能够留言回复。

以上转自:《浅谈Draw Call和Batch的区别》

注:

1 原文:“一个 Draw Call,等于调用一次DrawIndexedPrimitive (DirectX) or glDrawElements(OpenGL),等于一个 Batch”。

简单的说:CPU调用一次GPU,叫做一次Draw Call 。

一个Batch,是对Draw Call的一次批量处理,或者是对Draw Call的一次合并处理。参考注2。

2 原文:每次对 Shader 的更动或者贴图的更动,基本上就是对 Rendering Pipeline 的设定做修改,所以需要不同的 Draw Call 来完成物件的绘制。

也就是说,当材质和贴图相同的时候,处理代码可以变成:

SetShader ("Diffuse") ;

SetTexture(“木和铁采用同一个贴图”) ;

DrawPrimitive("木和铁两者的顶点buffer") ;

如果可以变成这段处理流程,那么,因为只调用了一次DrawPrimitive(),所以Draw Call由2次变为了1次。

但是木和铁本身是不同的贴图和顶点,怎么能够一起处理呢?

答案是合并。通过合并纹理(Texture),和合并网&#;(Mesh)。将木和铁的贴图放在一张做成图集,然后开启Unity的批量处理,Unity3D就会自动合并网&#;。

或者借助一款强大的工具可以实现纹理和网&#;的合并,从而减少DrawCall:Mesh Baker工具。

合并后,注1中的Batch数就会跟着增加。

或许有人有疑惑:即便通过合并可以减少Draw Call次数,但是CPU传送给GPU的数据变多,GPU需要绘制的数据也变多,这些不会增加处理时间吗?

这个目前我还没有理论上的证明,但是根据网上的一些资料,GPU绘制一个面的物体,和绘制个1个面的物体,处理上是没有区别的。

Unity3D拖拉组件 //接口////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////////

格斗游戏角色控制之U3D状态机的编写 先简单介绍下状态机机的大概工作流程转载自

Unity3D 进度条组件 接口publicstaticGameObjectcreateSprite(GameObjectparent,stringname,UIAtlasatlas,stringspriteInAtlas,Vector3size,Vector3pos){intdepth=NGUITools.CalculateNextDepth(parent);UISpritesprite=NGUITools.Add

标签: drawcalls2000多

本文链接地址:https://www.jiuchutong.com/biancheng/369281.html 转载请保留说明!

上一篇:Unity3D C# 代码形式加载资源 Demo代码(c#+unity3d)

下一篇:Unity3D拖拉组件(unity拖进模型什么也看不到)

  • 开诊所会计如何做账
  • 集团内部资产无偿划转是否纳税增值税
  • 农药增值税减免政策
  • 房产租金收入是什么科目
  • 国外租赁行业都包括哪些
  • 财政部颁布的具体准则
  • 应纳税所得额数学
  • 公司把贷款的钱转给个人
  • 所得税汇算清缴调整项目
  • 房产税逾期有滞纳金吗
  • 航天金税服务费怎么做账
  • 印花税计提比例是多少
  • 个人房补申请书怎么办
  • 初级会计职称考试时间
  • 企业汇算清缴弥补以前年度亏损后还需退税
  • 现金短缺或溢余的账务处理业务题
  • 建筑企业存款账户
  • 期间损益结转怎么结转
  • 公司绿化购买的苗木如何进行账务处理?
  • 季度盈利要交所税吗
  • 第三方软件测评费的取费标准
  • 驾校如何用完工百分比法确认收入?
  • 预付卡发给员工如何入账
  • 开办费 工资
  • 债权人和债务人是什么意思
  • 机票行程单可以报销用吗
  • 支付劳保用品会计怎么做
  • 货物运输业增值税专用发票可以抵扣吗
  • 无法ping通ip地址
  • 运输合同印花税税率
  • 奥林匹克森林公园奥海
  • 停车费过路费和汽油费可以一起报销吗
  • rmt命令 远端磁带传输协议模块
  • linux rdp客户端
  • 怎么做应收应付账款分录
  • 税务自查报告范文自查报告怎么写
  • 企业注销时实收资本清算时要作资产处置收益交所得税吗
  • 应收的货款
  • 长期待摊费用属于调整账户吗
  • 跨月红字发票开错了可以撤销吗
  • sql2000数据库怎么删除数据
  • 公司向个人借款合法吗
  • 收到法人投资款需要什么手续
  • 电子产品对外加工
  • 小规模销售免税产品需要交税吗
  • 应收账款多记账怎么做调整分录
  • 红冲去年的管理费用
  • 铁路运费印花税怎么算
  • 调试机器要注意事项
  • 红字的记账凭证怎么记账
  • 一般纳税人外购货物发生非正常损失,不包括
  • 个人取得的劳务报酬需要交增值税吗
  • 会计的凭证怎么做账
  • 临时工工资怎么入账合法吗
  • mysql优化的几种方法
  • 编写sql需要注意什么
  • sqlserver存储过程在哪
  • mysql常用关键字及其用法
  • ami 2.17.1254bios设置图解教程
  • linux系统详解
  • win8 系统设置
  • scchost.exe - scchost是什么进程 有什么用
  • grep命令用法
  • win7电脑开机蓝屏无法进入系统怎么办
  • windows10无法识别
  • 安卓应用程序数据
  • android使用教程
  • python生成矩阵的方法
  • 深入理解计算机系统
  • js输出表格
  • jquery控制样式
  • mysql数据类型大全
  • python列表组成字符串
  • python冒泡排序流程图
  • js的调用函数
  • 怎么查看keytab文件
  • 海南省地方税务局关于土地增值税清算有关问题的通知
  • 新疆捡陨石地方叫什么
  • 济宁高新区税务局办税大厅电话
  • 江苏城市规划
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设