熊熊出没 发表于 2025-4-9 16:28:00

Unity中的动态合批使用整理

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

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

Unity 始终对动态几何体(如 Particle Systems)使用动态批处理。
手动开启:在Edit > Project Settings > PlayerOther Settings (其他设置) 中,将Dynamic Batching (动态批处理)勾选上即可。
https://i-blog.csdnimg.cn/direct/bf7cf5093c93432ca7aac2fa154a50b9.png
兼容性:

功能内置渲染管线通用渲染管线 (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 手册

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页: [1]
查看完整版本: Unity中的动态合批使用整理