什么是DrawCall

drawcall是CPU对底层图形绘制接口的调用命令GPU执行渲染操作,渲染流程采用流水线实现,CPU和GPU并行工作,它们之间通过命令缓冲区连接,CPU向其中发送渲染命令,GPU接收并执行对应的渲染命令。

DrawCall为什么会影响效率

如果DrawCall数量过多就会导致CPU进行大量计算,进而导致CPU的过载,影响游戏运行效率。

DrawCall的优化

图集、层级

所以并不是好多人的认知是只要同一个图集就会占用同一个DrawCall,通过上图分析发现不光是要使用同一个图集,还要使用同样的材质在同一个panel下才可以,否则就会重新进行调用一次DrawCall。另外需要注意的是,如果使用同一个图集、材质,但是中间夹杂了其他的渲染状态,也会导致重新调用一次DrawCall。

批处理

批处理从字面意思就是一块处理多个物体的意思,但是是什么样的都可以进行批处理吗?答案就是使用同一个材质的物体才可以。unity中有个两种批处理方式,动态批处理和静态批处理。对于动态批处理来说,好处就是一切都是自动处理的,并且物体是可以移动的。
动态批处理限制:

  • 顶点属性最大限制900,
  • 使用lightmap的物体不行进行批处理
  • 使用MultiplePass的shader也不会进行批处理
  • 接受实时阴影的物体也不会进行批处理
    对于静态批处理来说,好处就是自由度很高,限制条件少,但是它会占用更多的内存,并且经过批处理的物体不可以在进行移动。下面说下静态批处理, 静态批处理前提当然也是使用了同一个材质,然后就是讲对应的对象设置为static:
    这时你会发现DrallCall变为1了,这就是静态批处理的作用,但是这时候你会发现VBO Total比刚才大了,这就是静态批处理坏处,通过内存来换取性能,下面我们看下官方的解释:

如果在静态批处理前有一些物体共享了相同的网格(例如这里的两个箱子),那么每一个物体都会有一个该网格的复制品,即一个网格会变成多个网格被发送给GPU。在上面的例子看来,就是VBO的大小明显增大了。如果这类使用同一网格的对象很多,那么这就是一个问题了,这种时候我们可能需要避免使用静态批处理,这意味着牺牲一定的渲染性能。例如,如果在一个使用了1000个重复树模型的森林中使用静态批处理,那么结果就会产生1000倍的内存,这会造成严重的内存影响。

参考

https://blog.csdn.net/yu1368072332/article/details/85676537

Unity Drawcall、渲染顺序、打包图集、特效清理、代码优化相关推荐

  1. Unity 中渲染顺序的理解以及一些坑点 以及2.5D游戏中的渲染排序解决方案

    1.ZTest & ZWrite ZTest:深度测试,开启后测试结果决定片元是否被舍弃,可配置  ZWrite:深度写入,开启后决定片元的深度值是否写入深度缓冲,可配置 ZTest可设置的测 ...

  2. Unity 工具 之 图集根据切割为一张张单张图片的简单封装(Unity 自带 SpritePackage 打包图集的性能优化)

    Unity 工具 之 图集根据切割为一张张单张图片的简单封装(Unity 自带 SpritePackage 打包图集的性能优化) 目录 一.简单介绍 二.实现原理 三.注意事项 四.实现步骤 五.关键 ...

  3. Unity中的物体渲染顺序

    big seven 文章目录 前言 一.摄像机渲染 二.划分渲染队列 三.不透明物体的渲染 四.透明物体的渲染 五.UGUI元素的渲染 总结 前言 Unity中物体的渲染顺序 提示:以下是本篇文章正文 ...

  4. Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要)

    Unity半透明特效原理讲解(为什么半透明设置渲染顺序和深度写入这么重要 写在前面 实验场景 实验1:红(不透明)+蓝(不透明)+默认渲染顺序(先渲染蓝Cube) 实验2:红(不透明+优先渲染)+蓝( ...

  5. 【Unity组件知识】如何在Unity2020以后版本中打包图集

    文章目录 前言 一.打包图集步骤 1.导入2D Sprite包 2.开启图集打包的功能 3.创建Sprite Atlas文件 4.添加要打包的图片或者文件夹 二.图集的使用 三.关于SpritePac ...

  6. Unity渲染顺序解析

    Unity渲染顺序 Unity引擎中影响渲染顺序的因素有: Camera Depth 透明.不透明物体分隔 同一个相机下 Sorting Layer Order In Layer RenderQueu ...

  7. Unity 打包图集

    Unity打包图集 public class MyTexturePak {private const string intPutPath = "/Emoji/Input/";pri ...

  8. Unity 渲染顺序

    Unity中的渲染顺序自上而下大致分为三层 渲染优先级 Camera depth > Sorting Layer > Order in Layer > RenderQueue Cam ...

  9. Unity UI层元素渲染顺序

    今天做项目,做了一个UI界面,但是效果感觉很怪,本来作为背景图的iamge,结果蒙在了其他控件的上面. 百思不得解,问了同事才知道,Unity的UI元素有渲染顺序的差异,后渲染的元素自然就会覆盖在上面 ...

  10. Unity渲染顺序(2)

    Camera 除了Screen Space - Overlay(屏幕空间覆盖模式)下的Canvas,场景中的其他物体需要渲染到屏幕中,都需要在指定的相机的绘制下.场景中可以创建多个相机,每个相机所拍摄 ...

最新文章

  1. a标签是什么意思 怎么使用?
  2. JAVA大一新生要用电脑吗,大一新生有没有必要买电脑?辅导员:倘若不是这三点原因尽量别买...
  3. POJ 3449 Geometric Shapes
  4. (原创)无废话C#设计模式之十二:Bridge
  5. centos 6.5网卡固定IP重启出错
  6. 开源一个ShellCode生成框架
  7. 吉林省计算机等级二级,吉林省2019年9月计算机等级二级考试教程:二级MSOffice高级应用上机指导...
  8. matlab将struct和cell转换成matrices
  9. redis通过expire设置存活期注意问题
  10. 2018最新java基础学习路线
  11. python画条形图-python使用Matplotlib画条形图
  12. 【android】AIDL传递自定义类型参数
  13. Underscore骨骼
  14. 练习1,从文件到数据库
  15. 正态分布假设检验相关知识
  16. 今有物不知其数,三三数只剩其二,五五数只剩其三,七七数只剩其二
  17. 用计算机发送电子邮件,用英语解释一下发送电子邮件的过程 用计算机语言来说一下,大概400到500个英文单词...
  18. Regression 中的 R方
  19. C语言 | 计算某日是该年的第几天
  20. 从titles表获取按照title进行分组,每组个数大于等于2,给出title以及对应的数目t

热门文章

  1. 【学习笔记:计算几何基础3】 Convex Hull
  2. WPF中,输入完密码回车提交 ,回车触发按钮点击事件
  3. C - Copying Books (POJ - 1505)
  4. 【入门二】格式化输入/输出
  5. Codeforces Round #358 (Div. 2) Alyona and Strings
  6. IE调试网页之二:F12 开发人员工具入门 (Windows)
  7. 拓端tecdat|R语言文本挖掘NASA数据网络分析,tf-idf和主题建模
  8. 《SpringBoot实战》笔记3
  9. spring教程笔记6
  10. jupyterlab中使用conda虚拟环境