了解的近义词_draw calls

了解的近义词_draw calls一、什么是DrawCallDrawCall的含义就是CPU调用图像编程接口,以命令GPU进行渲染的操作。CPU和GPU通过使用一个命令缓冲区实现并行工作。命令缓冲区包含一个命令队列,CPU向其中添加命令,GPU从中读取命令,添加和读取是相互独立的,因此使得CPU和GPU可以独立工作。命令缓冲区中的命令有很多种类,DrawCall就是其中一种。二、为什么Dr…

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

一、什么是DrawCall  

    DrawCall的含义就是CPU调用图像编程接口,以命令GPU进行渲染的操作。

    CPU和GPU通过使用一个命令缓冲区实现并行工作。命令缓冲区包含一个命令队列,CPU向其中添加命令,GPU从中读取命令,添加和读取是相互独立的,因此使得CPU和GPU可以独立工作。命令缓冲区中的命令有很多种类,DrawCall就是其中一种。

二、为什么DrawCall多了会影响帧率

    DrawCall中真正造成性能问题的元凶是CPU。

    在每次调用DrawCall之前,CPU需要向GPU发送很多内容,包括数据、状态和命令等。在这一阶段,CPU需要完成很多工作,例如检查渲染状态等。而一旦CPU完成了这些准备工作,GPU就可以开始本次渲染。GPU的渲染能力很强,渲染速度往往快于CPU提交命令的速度。如果DrawCall的数量太多,CPU就会把大量时间花费在提交DrawCall上,造成CPU的过载。

三、DrawCall优化

    优化有一下几个解决方案:

        1、使用Draw Call Batching,也就是批处理。Unity在运行时可以将一些物体进行合并,从而用一个DrawCall来渲染他们。具体下面会介绍。

        2、通过把纹理打包成图集来尽量减少材质的使用。

        3、尽量少的使用反光,阴影之类的,因为那会使物体多次渲染。

    Draw Call Batching技术

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

    Draw Call Batching技术存在缺陷,当它需要把一个Batch中的所有物体组合到一起,相当于创建了一个与这些物体加起来一样大的物体。这就需要分配相应大小的内存,也需要消耗CPU时间。特别是对于移动的物体,每一帧都得重新进行组合。但对于静止不动的物体,只需要进行一次组合。

    Unity提供了Dynamic Batching和Static Batching两种方式。

    Dynamic Batching

    Dynamic Batching是完全自动进行的,不需要也无法进行任何干预。

    动态批处理的约束:

        1、批处理动态物体需要在每个顶点上进行一定的开销,所以动态批处理仅支持小于900顶点的网格物体。

        2、如果着色器使用顶点位置,法线和UV值三种属性,那么只能批处理300顶点以下的物体;如果着色器需要使用顶点位置,法线,UV0,UV1和切向量,那么只能批处理180顶点以下的物体。

        3、不要使用缩放,分别拥有缩放大小(1,1,1)和(2,2,2)的两个物体将不会进行批处理。

        4、统一缩放的物体不会和非统一缩放的物体进行批处理。

        5、使用缩放尺度(1,1,1)和(1,2,1)的两个物体将不会进行批处理,但是使用缩放尺度(1,2,1)和(1,3,1)的两个物体将可以进行批处理。

        6、使用不同材质的实例化物体将会导致批处理失败。

        7、拥有lightmap的物体含有额外(隐藏)的材质属性,比如:lightmap的偏移和缩放系数等。所以,拥有lightmap的物体将不会进行批处理(除非他们指向lightmap的同一部分)。

         8、多通道的shader会妨碍批处理操作。比如,几乎unity中所有的着色器在前向渲染中都支持多个光源,并为它们有效地开辟多个通道。

         9、预设体的实例会自动地使用相同的网格模型和材质。  

    Static Batching

    Static Batching需要把静止的物体标记为Static,然后无论大小,都会组成Batch。

    如何对动态加载的静态物体进行静态合批操作:
    GameObject go = (GameObject)Instantiate(…);
    go.isStatic = true;//将实例化的物体设置为静态
    go.transform.parent = root.transform;
    gosList.Add(go);
    gos = gosList.ToArray(); 
    StaticBatchingUtility.Combine(gos, root);静态合并

    高效利用Draw Call Batching

    1. 首先是尽量减少场景中使用的材质数量,即尽量共享材质,对于仅纹理不同的材质可以把纹理组合到一张更大的纹理中。

    2. 然后是把不会移动的物体标记为Static。此外还可以通过CombineChildren脚本(StandardAssets/Scripts/UnityScripts/

CombineChildren)手动把物体组合在一起,但这个脚本会影响可见性测试,因为组合在一起的物体始终会被看作一个物体,从而会增加GPU要处理的几何体数量,因此要小心使用。

    3. 对于复杂的静态场景,还可以考虑自行设计遮挡剔除算法,减少可见的物体数量同时也可以减少Draw Call。

 

    NVIDIA 在 GDC 曾提出,25K batchs/sec 会吃满 1GHz 的 CPU,100的使用率。所以他们推出了一条公式,来预估游戏中大概可以 Run 多少个 Batch:
    了解的近义词_draw calls 
    举个例子:如果你的目标是游戏跑30FPS、使用2GHz的CPU、20%的工作量拨给Draw Call来使用,那你每帧可以有多少Draw Call呢?
333 Batchs/Frame = 25K * 2 * (0.2/30)

 

 

参考资料:https://blog.csdn.net/zhongdong00/article/details/80590396

 

转载于:https://www.cnblogs.com/chia-liblog/p/11007124.html

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。

发布者:全栈程序员-用户IM,转载请注明出处:https://javaforall.cn/191828.html原文链接:https://javaforall.cn

【正版授权,激活自己账号】: Jetbrains全家桶Ide使用,1年售后保障,每天仅需1毛

【官方授权 正版激活】: 官方授权 正版激活 支持Jetbrains家族下所有IDE 使用个人JB账号...

(0)
blank

相关推荐

  • 服务器监控系统应有哪些功能,公安视频监控系统需要具备哪些功能「建议收藏」

    服务器监控系统应有哪些功能,公安视频监控系统需要具备哪些功能「建议收藏」现在视频监控系统已经开始与公安管理联动起来,有效保护公共安全,对于公安这样重要的执法部门来说,高清化、无线化、远程、实时的监控是行业监控安全运作必备的前提条件。除此以外,公安视频监控系统还需要具备哪些功能?1、应急指挥调度功能①实现紧急情况的收集、显示、上报功能。即在指挥中心内能通过网络传输和其他通信方式实时接收、显示、上报紧急情况的现场文字、图片、语音信息,并能通过终端服务器和显示屏随时调阅紧急…

  • mysql的text与tinytext,MySQL中的VARCHAR(255)和TINYTEXT字符串类型有什么区别?

    mysql的text与tinytext,MySQL中的VARCHAR(255)和TINYTEXT字符串类型有什么区别?What’sthedifferencebetweenVARCHAR(255)andTINYTEXTstringtypesinMySQL?Eachofthemallowstostorestringswithamaximumlengthof255characters.Storagerequirementsarealsothesame.When…

  • 精准绝杀一波(皮筋穿透魔术教学)

    自从去年8月份币安推出BNB之后,各家交易所也纷纷向交易者售卖自家生产的平台币,并允诺出让部分红利给到买家。而其中,Fcoin以其创新的“交易挖矿”机制,圈得韭菜无数。领跑数字货币市场的平台币进入2017年熊市以来,数字货币市场上的领跑者无疑是各大交易所推出的平台币。自从去年8月份币安推出BNB之后,各家交易所也纷纷向交易者售卖自家生产的平台币,并允诺出让部分红利给到买家。常见的平台币让利策略可以…

  • js判断对象是否为空对象的几种方法

    js判断对象是否为空对象的几种方法1.将json对象转化为json字符串,再判断该字符串是否为”{}”vardata={};varb=(JSON.stringify(data)==”{}”);alert(b);//true2.forin循环判断varobj={};varb=function(){for(varkeyinobj){returnfals

  • MMC卡SPI模式「建议收藏」

    MMC卡SPI模式「建议收藏」MMC/SD卡简单SPI模式驱动1. SPI模式下CRC检验无效的。 2. 命令格式是6个字节,采用大端法进行数据传输。3. 第一个是(命令号|0x40)。4. 第2-5个是有些命令需要地址,用来设置地址的,而其他的可以任意填充。5. 最后一个字节是CRC校验位,除了CMD0为95H外,其他可以任意填充。6.命令发送函数。1).片选拉低

  • Quartz异常-Error creating bean with name ‘org.springframework.scheduling.quartz.SchedulerFactoryBean「建议收藏」

    Quartz异常-Error creating bean with name ‘org.springframework.scheduling.quartz.SchedulerFactoryBean「建议收藏」目录一、问题描述二、问题分析三、问题解决四、工程源码4.1maven配置4.2 web.xml4.3spring配置文件4.4 Quartz配置文件4.5定时任务类4.6工程总体结构一、问题描述  今天使用Quartz+Spring测试定时任务时,发现报异常:Errorcreatingbeanwithname’org.spring…

发表回复

您的电子邮箱地址不会被公开。

关注全栈程序员社区公众号