首页 > 其他分享 >unity的批处理

unity的批处理

时间:2024-05-17 19:57:54浏览次数:16  
标签:批处理 DrawCall CPU buffer unity 材质 物体

1. 批处理

将多个 drawCall 操作合并为一个,减少cpu和gpu之间的通信

static batch

概念

  • static object : 非移动的对象 --- 这些对象可以利用预计算信息减少资源的消耗
  • 只有相同材质的的物体才会被合并到一起进行渲染

具体操作:

  • 将静态物体合并为一个(或多个)大网格,这个(或这些)大网格以vertex buffers和index buffers的形式存储在GPU上;
  • Unity按顺序绘制场景中的物体时[1],如果两个物体的数据属于同一块buffer,且在vertex buffer和index buffer上连续,那么这两个物体仅产生1次DrawCall;
  • 如果它们不连续,那么将产生2次DrawCall(specify different regions of this buffer);但是由于它们属于同一块buffer,因此这2次DrawCall之间的GPU状态不发生改变,它们构成1次StaticBatch;虽然没有降低DrawCall次数,但是避免了重复的"buffer binding"——我对"buffer binding"的理解是:在shader开始执行前告诉shader这个是vertex buffer、这个是index buffer……
  • 静态批处理不一定减少DrawCall,但是会让CPU在“设置渲染状态-提交Draw Call”上更高效;

dynamic batch

动态批处理,是为过去的低端设备设计的,只有当动态批处理产生的CPU开销小于DrawCall的开销,动态批处理才具有优化性能的效果。而在如今的电子设备上,动态批处理产生的CPU开销反而有可能大于DrawCall的开销,影响性能。因此你需要profile你的应用以确定是否需要动态批处理。

https://zhuanlan.zhihu.com/p/432223843

SRP Batcher

URP 默认开启

原本,CPU每次提交DrawCall前都要【Set up Cbuffer - Upload Cbuffer】,但是在SRP Batcher里,所有材质球在显存里占有固定的CBuffer,如果材质球的内容不发生改变,CPU就不需要【SetUp-Upload】,从而降低了CPU渲染时间。——SRP batcher不会减少DrawCall,而是在DrawCall与DrawCall之间减少CPU的工作量。

适用场景 :场景中有很多物体,很多不同的材质球(比如它们的颜色、贴图不同),但是这些材质球使用的是同一个shader(确切地说是Shader Variant)。

https://zhuanlan.zhihu.com/p/432223843

GPU instancing

适用于大量重复的物体 --- 同一Mesh和同一Material 比如建筑物/树/草等重复出现的物体。

https://zhuanlan.zhihu.com/p/432223843

标签:批处理,DrawCall,CPU,buffer,unity,材质,物体
From: https://www.cnblogs.com/bigsharker/p/18198530

相关文章

  • unity transform and gameobj
    两者都可以直接创建gameobj两者之间不能相互转换两者可以通过属性得到对方transform.gameobjgameobj.transformInsatance实例化的时候,两者返回对应的属性如果经常改变transformer,就用transformer,如果常用setActivate这些方法则使用gameobj进行实例化......
  • CommunityToolkit从入门到精通(详细版)
    MVVM基础 Model:负责存储数据,以及对数据的处理。View:负责展示数据,以及与用户的交互。ViewModel:负责将Model的数据在View中显示出来,同时也负责将View中的事件传递给Model。可以说,ViewModel是Model和View之间的桥梁。组件模型(ComponentModel)ObservableObject......
  • Community Mvvm Toolkit常用组件的基本使用(第一版)
    一、组件ObservableObjectObservableObject实现了INotifyPropertyChanged和INotifyPropertyChanging,并触发PropertyChanged和PropertyChanging事件1publicclassUser:ObservableObject2{3privatestringname;45publicstringName6{7......
  • bat-4-批处理的执行与调用
    批处理执行的两种方式第一种方式:直接右键以管理员身份运行,批处理的当前路径默认为C:\windows\system32第二种方式:在管理员身份的cmd窗口中.\xxx.bat执行,批处理的当前路径默认为当前目录在批处理中使用相对路径时,是相对于当前路径去寻找文件的如果在批处理所在目录下存......
  • UnityShader数学基础篇
    MathfMathf和Math1、Math是C#中封装好的用于数学计算的工具类,位于System命名空间中。2、Mathf是Unity中封装好的用于数学计算的工具结构体,位于UnityEngine命名空间中。Mathf中的常用方法1.π-PIprint(Mathf.PI);2.取绝对值-Absprint(Mathf.Abs(-10.5f));//10.5p......
  • 如何优化Unity发布iOS编译出来的Framework文件过大问题
    1)如何优化Unity发布iOS编译出来的Framework文件过大问题2)ScriptableBuildPipeline打包ScritptableObject报错3)APK在OPPO上报编译错误4)如何在Sequence中模拟我的蓝图这是第385篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全......
  • IDEA社区版(IDEA Community Edition)创建Springboot父子项目
    1.因为社区办不支持使用springSpringInitializr的方式创建项目,但是我们可以考虑使用别的方式达到效果:创建方式有3种:第一种:使用https://start.spring.io/官方URL创建项目,再导入到IDEACommunityEdition(后面简称:ideaC)。具体使用自行百度。缺点:没办法自定义springboot的......
  • Windows下git配合Unity要设置autocrlf=false
    Unity的.asset文件的换行符一定是Unix(LF)格式的,哪怕在设置里选了用Windows(CRLF)也没用。这个选项貌似只对创建的C#Script有效。这些Unix换行文件提交上去没问题,但如果你想revert或者checkout,就会变成Windows换行,然后如果在Unity里面修改了,哪怕最后实际数值没有变化,也会给你......
  • 'sh' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
    我们在windows系统中执行:shnacos-config.sh-h127.0.0.1命令是报错的。报错:'sh'不是内部或外部命令,也不是可运行的程序或批处理文件。但是作为一名软件开发人员,我们的电脑上一般都是安装有git的。这个时候,我们可以使用git执行上面的命令就可以了,因为git是安装有sh命令的。......
  • nvm下载pnpm报‘pnpm‘ 不是内部或外部命令,也不是可运行的程序 或批处理文件
    使用nvm下载安装pnpm进行测试的时候发现下载未报错但是使用pnpm-v此时在自己设置的nvm安装的node目录中查询nvm再次执行指令pnpm-v......