当前位置: 首页 > news >正文

Unity中的动态合批使用整理

Unity 动态批处理(Dynamic Batching)是 Unity 引擎提供的一种优化渲染性能的技术,可对移动的游戏对象进行批处理,从而减少 GPU 的渲染调用次数,提高渲染效率。

原理:

动态批处理的原理就是将多个具有相同材质(Material)且满足一定条件的网格合并为一个大的网格,然后只进行一次渲染调用,这样就可以显著减少渲染调用次数,提升性能。

开启批处理:

Unity 始终对动态几何体(如 Particle Systems)使用动态批处理。
手动开启:在Edit > Project Settings > PlayerOther Settings (其他设置) 中,将Dynamic Batching (动态批处理)勾选上即可。

兼容性:

功能内置渲染管线通用渲染管线 (URP)高清渲染管线 (HDRP)自定义可编程渲染管线 (SRP)
动态批处理

合批条件:

1.Unity 无法对包含超过 900 个顶点属性300 个顶点的网格应用动态批处理。这是因为网格的动态批处理每个顶点都有开销。
例如,如果着色器使用顶点位置、顶点法线和单个 UV,则 Unity 最多可以批处理 300 个顶点。但是,如果着色器使用顶点位置、顶点法线、UV0、UV1 和顶点切线,则 Unity 只能批处理 180 个顶点
2.如果游戏对象使用不同的材质实例,则无法批处理,即使它们本质上相同。唯一的例外阴影投射物渲染
3.具有光照贴图的游戏对象具有额外的渲染器参数。这意味着,如果要对光照贴图游戏对象进行批处理,它们必须指向相同的光照贴图位置
4.Unity 无法将动态批处理完全应用于使用多通道着色器的游戏对象
几乎所有 Unity 着色器都支持前向渲染,为了实现这一点,他们为每个光源处理一个额外的渲染通道。Unity 仅对第一个渲染通道进行批处理。它无法对其他每像素光源的绘制调用进行批处理。
Legacy Deferred(旧版延迟) 渲染路径不支持动态批处理,因为它在两个渲染通道中绘制游戏对象。第一个通道是轻量级预通道,第二个通道渲染游戏对象。
5.避免镜像缩放:动态批处理不支持非统一缩放(如负值缩放)。

合批时机:

1.帧开始时检查:在每一帧渲染开始之前,Unity 会检查场景中所有的游戏对象,判断它们是否满足动态批处理的条件。如果满足条件,就会尝试将它们合并。
2.对象状态改变时:当游戏对象的状态发生改变(如位置、旋转、缩放等)时,Unity 会重新评估该对象是否可以参与动态批处理。如果状态改变后仍然满足条件,就会将其纳入合批范围;如果不满足条件,则会将其从批处理中移除。
3.材质属性更新时:如果游戏对象的材质属性(如颜色、纹理等)发生了更新,Unity 会检查更新后的材质是否与其他对象的材质一致,以及是否满足动态批处理的其他条件。如果满足,就会尝试重新进行合批。

动态生成的几何图形的动态批处理

以下渲染器会动态生成几何图形,例如粒子和线条:
内置粒子系统线渲染器轨迹渲染器

动态生成的几何体的动态批处理(与网格不同):
1.对于每个渲染器,Unity 会将所有动态可批处理的内容构建到一个大型顶点缓冲区中。
2.渲染器设置批处理的材质状态。
3.然后,Unity 将顶点缓冲区绑定到 GPU
4.对于批处理中的每个 Renderer,Unity 会更新顶点缓冲区中的偏移量并提交新的绘制调用

未完待续。。。

参考链接:

Unity - 手动:动态批处理 (unity3d.com)

动态批处理 - Unity 手册

http://www.dtcms.com/a/109166.html

相关文章:

  • Vue中虚拟DOM创建到挂载的过程
  • Milvus 向量数据库详解:从核心概念到 Docker 部署实践
  • redis 安装
  • windows批处理命令,执行一个python文件,将命令保存为xxxx.bat文件
  • angular+form实现2048小游戏
  • 41. 评论日记
  • 2025高频面试算法总结篇【二叉树】
  • GLTF(GL Transmission Format)详细介绍
  • 多线程基础
  • 多线程交替打印ABC方法整理
  • 前端入门之CSS
  • rknn_convert的使用方法
  • WebRTC源码解析:Android如何渲染画面
  • Redis是什么?架构是怎么样的?
  • MySQL客户端工具-图形化工具-DataGrip 安装与使用
  • 《AI大模型应知应会100篇》加餐篇:LlamaIndex 与 LangChain 的无缝集成
  • 3.9/Q2,Charls最新文章解读
  • 合并两个有序数组(Java实现)
  • Vue2 过滤器 Filters
  • Blender运行python脚本?
  • 42.评论日记
  • 2874. 有序三元组中的最大值 II
  • 全星 研发项目管理APQP 软件:驱动汽车及制造业研发升级的数字化引擎
  • 【笔记】如何使得docker desktop下载至D盘而不是C盘?
  • django REST framework(DRF)教程
  • 一文读懂数据仓库:从概念到技术落地
  • 蓝桥杯Java B组省赛真题题型近6年统计分类
  • 7-5 表格输出
  • 高速电路 PCB 设计要点一
  • 2010-2020年 省级、城市数字经济创新创业-分项指数得分与排名 -社科数据