首页 > 其他分享 >合批

合批

时间:2024-10-18 10:26:04浏览次数:2  
标签:合批 渲染 静态 网格 Unity 使用

静态合批

一般合批的对象是场景中不能动的物体,静态物体,并且在inspector界面勾选上static选项;Unity预先组合静态GameObjects的网格,然后将组合的数据发送到GPU,但单独渲染组合中的每个网格,静态合批不会减小drawcall,只是减少了渲染状态的改变次数。Unity仍然可以单独筛选网格,但每次绘制调用都不会占用大量资源,因为数据的状态永远不会改变。在Unity开启Static Batching,依次点击 Edit > Project Settings > Playe->Other Settings->enable Static Batching。对于Unity使用静态合批的具体要求可以参照官方文档

支持静态合批的Unity渲染管线:默认渲染管线、URP(通用渲染管线)、HDRP、SRP。

在运行时,通过脚本使用静态合批:Unity提供了运行时,通过脚本使用静态合批口:StaticBatchingUtility.Combine,这是一个静态方法,通过这种方式调用静态合批,就不需要在编辑器的inspector界面勾选上Static选项。

static Batching缺点与限制:使用静态合批会增加内存!,因为使用静态合批,需要在内存中存储合成的几何体数据;如果多个GameObject使用了相同的网格数据,Unity会为每一个GameObject创建一个网格副本,这就意味着相同的几个数据有可能会出现多次!所以如果内存过大,就尽量避免使用静态合批。对于每一次静态合批,顶点数的限制时64000,如果超过这个值,Unity就会再次创建另外一个批次(Batch)。

动态合批

动态合并在满足以下条件时时自动完成:

  1. 模型总顶点属性数小于 900。例如,材质的shader使用了位置、法线、UV坐标,那么顶点数就是900 / 3 = 300,如果使用了vertex position, vertex normal, UV0, UV1, 和 vertex tangent,那么顶点数量的限制就是 900 / 5 = 180;
  2. 不包含镜像 transform 改变。 不改变 Scale。
  3. 如果使用动态 lightmap 需要指定正确。
  4. 不使用多 Pass 的 Shader。
  5. 不修改材质球
    由于需要在合并时通过 CPU 计算转为世界坐标,这项技术只在 CPU 消耗比 DrawCall 消耗“便宜”时才值得。这个衡量标准会根据平台产生差异,例如苹果平台上 DrawCAll的消耗便宜,就不应该使用这项技术。这个功能可以在 Editor–> Project Setting –>Player 中进行设置打开与关闭。

标签:合批,渲染,静态,网格,Unity,使用
From: https://www.cnblogs.com/comradexiao/p/18473715

相关文章

  • 静态合批和动态合批
    动态合批与静态合批其本质是对将多次绘制请求,在允许的条件下进行合并处理,减少cpu对gpu绘制请求的次数,达到提高性能的目的。两者是否开启都可以在ProjectSettings->Player->OtherSettings下的StaticBatching和DynamicBatching1.静态合批是将静态(不移动)GameObjects组......
  • 关于Unity四种合批技术详解
    文章目录一.静态合批(StaticBatching)1.启用静态合批2.举例说明3.静态合批的限制4.静态合批的优点缺点5.动态指定物品合批二.动态合批(DynamicBatching)1.启用动态合批2.合批规则3.举例说明4.使用限制三.GPUInstancing1.启用GPUInstancing2.启用限制3.举例说明......
  • WorldSpace下的合批策略与ScreenSpace有什么区别
    1)WorldSpace下的合批策略与ScreenSpace有什么区别2)在iOS上用Metal取代OpenGL的多么3)在动画蓝图中将两个或多个动画同时融合到同一个网格4)Mipmap如何限定层级这是第387篇UWA技术知识分享的推送,精选了UWA社区的热门话题,涵盖了UWA问答、社区帖子等技术知识点,助力大家更全面地掌握和......
  • Unity性能优化——合批(Batching)的限制与失败原因汇总
    Unity中Batching大致可以分为StaticBatching,DynamicBatching,SRPBatching与GPUInstancing四大类,但在使用时我们经常会遇到合批失败的情况,这里汇总了四大类的合批使用限制与合批失败的关键错误信息.StaticBatching的限制额外的内存开销64000个顶点限制影响......
  • 最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数
    最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小兵在战斗......
  • Unity GPU Instancing合批_如何基于单个的实体修改材质参数
    前言最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小兵......
  • DOTS Instancing合批:如何针对单个渲染实体修改材质参数
    DOTSInstancing合批:如何针对单个渲染实体修改材质参数   最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去......
  • 最新Unity DOTS Instancing合批:如何针对单个渲染实体修改材质参数
    最近在做DOTS的教程,由于DOTS(版本1.0.16)目前不支持角色的骨骼动画,我们是将角色的所有动画数据Baker到一个纹理里面,通过修改材质中的参数AnimBegin,AnimEnd来决定动画播放的起点和终点,材质参数AnimTime记录当前过去的动画时间。但是在做大规模战斗控制的时候,有10000+的小兵在战斗......
  • CocosCreator3.x 应用在UI(Sprite) 上的 shader(.effect) 的合批,通过自定义顶点参数(一
    前言为啥要合批减少DC什么是自定义顶点参数通过几何体实例化特性(GPUInstancing)可使GPU批量绘制模型相同且材质相同的渲染对象。如果我们想在不打破这一特性的情况下单独修改某个对象的显示效果,就需要通过自定义几何体实例化属性。参考文档UI(Sprite)怎么你了?按照文......
  • CocosCreator3.x 应用在UI(Sprite) 上的 shader(.effect) 的合批,通过自定义顶点参数(二
    具体操作步骤接下来以一个制造旋转效果的shader为例子,提供了这些参数的设置:旋转速度float旋转中心位置vec2逆时针/顺时针bool扭曲度float并在使用的贴图一致的前提下并且参数不同的值都能够合批。最终项目可以从GITHUB获取。CCC版本:3.8.0深入了解可以阅读后续......