首页 > 其他分享 >Unity性能优化——合批(Batching)的限制与失败原因汇总

Unity性能优化——合批(Batching)的限制与失败原因汇总

时间:2024-05-07 15:55:57浏览次数:22  
标签:different 合批 不同 物体 SRP Unity Objects Batching


Unity中Batching大致可以分为StaticBatching,DynamicBatching,SRPBatching与GPUInstancing四大类,但在使用时我们经常会遇到合批失败的情况,这里汇总了四大类的合批使用限制与合批失败的关键错误信息. Static Batching的限制

  • 额外的内存开销
  • 64000个顶点限制
  • 影响Culling剔除
Dynamic Batching的限制
  • 合批不超过900个顶点属性,(注意不是900个顶点)
  • 除了渲染阴影对象外,相同材质,不同材质实例也不能合并
  • 具有光照贴图的游戏对象如果有附加渲染器参数时,如果需要动态合批这些对象,他们必须指向相同的光照贴图位置。
  • 有多Shader Pass的游戏对象无法做动态合批
  • 受多个光照影响的游戏对象,满足动态合批条件合批后,只会受一个光源的影响
  • 延迟渲染下不支持动态合批
  • CPU开销可能会增大,需要测试开启使用
GPU Instancing的限制
  • 图形API版本要求
  • 与SRPBatcher不兼容
  • 不同绘制API的参数与绘制个数不同
  • 渲染顶点数较少的网格时,效率可能会较差。(测试使用)
  • SRP Batching的限制 图形API版本要求
  • 必须是SRP渲染管线
  • 粒子对象不能合批
  • 使用MaterialPropertyBlocks的游戏对象不能合批
  • Shader必须是compatible的
Batching 失败信息与原因汇总  
  1. “An object is affected by multiple forward lights.” 此物体受到多个前向灯光的影
  2. “Objects have different materials.” 此物体有不同的材质
  3. “An object is using a multi-pass shader.” 此物体使用了多pass着色器
  4. “An object has odd negative scaling.” 此物体Trasform的Scale使用了负数
  5. “Either objects have different \”Receive Shadows\“ settings, or some objects are within the shadow distance, while some other objects are not.” 此物体接收阴影的设置不同,或者物体有不同的的阴影距离设置
  6. “Objects are affected by different forward lights.” 此物体受到不同的前向灯光影响
  7. “Objects are on different lighting layers.” 物体在不同的Lighting Layer上
  8. “Objects have different \”Cast Shadows\“ settings.” 此物体有不同的投影体设置
  9. “Objects either have different shadow caster shaders, or have different shader properties / keywords that affect the output of the shadow caster pass.” 此物体有不同的投影着色器设置或者有不同的着色器属性或者关键字影响Shadow Caster Pass的输出
  10. “The shader explicitly disables batching with the \”DisableBatching\“ tag.” 着色器中显式设置了DisableBatching的标记
  11. “Objects have different MaterialPropertyBlock set.” 此物体有不同的MaterialPropertyBlock的属性集
  12. “Non-instanced properties set for instanced shader.” Instanced的着色器有非instanced属性集
  13. “Objects are lightmapped.” 物体使用了不同的LightMap或者虽然使用相同的LightMap但使用的UV不同
  14. “Objects are affected by different light probes.” 此物体受到不同的光照探针影响
  15. “Objects are shadowed by baked occlusions and have different occlusion factors.” 此物体烘焙了遮挡,并且设置了不同的遮挡因子
  16. “Objects are affected by different reflection probes.” 此物体受到不同的反射探针影响
  17. “Rendering different meshes or submeshes with GPU instancing.” 使用GPU实例化渲染不同的网格或子网格
  18. “Objects have different batching-static settings.” 此物体有不同的静态合批设置
  19. “Objects belong to different static batches.” 此物体归属不同的Static Batches
  20. "Dynamic Batching is turned off in the Player Settings or is disabled temporarily in the current context to avoid z-fighting.” 在Player Settings中关闭了动态合批,或者在当前的环境中为了避免深度冲突而临时关闭了合批
  21. “There are too many indices (more than 32k) in a dynamic batch.” 动态合批中有太多的索引(大于32k)
  22. “A mesh renderer has additional vertex streams. Dynamic batching doesn‘t support such mesh renderers.” Mesh Renderer具有其他顶点流。动态批处理不支持此类网格渲染器。
  23. “A submesh we are trying to dynamic-batch has more than 300 vertices.” 动态合批超过300个顶点
  24. “A submesh we are trying to dynamic-batch has more than 900 vertex attributes.” 动态合批超过900个顶点属性
  25. “This is the first draw call of a new shadow cascade.” 新阴影级联的第一次绘制调用
  26. “The material doesn‘t have GPU instancing enabled.” 材质未启用GPU Instancing功能
  27. “Objects are rendered using different rendering functions. This can happen if the type of renderer is different (eg Mesh/Skinned Mesh) or when using different settings within the same renderer, such as Sprite Masking.” 使用不同的渲染。如果渲染器的类型不同(例如网格/蒙皮网格),或者在同一渲染器中使用不同的设置(例如精灵遮罩),则可能会发生这种情况。
  28. “Objects have different batching keys. This is usually caused by using different vertex streams on Particle Systems, or by mixing Lines and Trails, or by mixing lit and unlit geometry.” 此对象具有不同的Batching Keys。 这通常是由于在粒子系统上使用不同的顶点流,或混合线和轨迹,或混合Lit和Unlit的几何体造成的。"
  29. “Mesh uses 32 bit index buffer.” Mesh使用了32位的索引缓冲
  30. “Submesh has non-zero base vertex.” 子网格对象有非0的基础顶点, submesh.BaseVertexLocation != 0
  31. “The previous instanced draw call has reached its maximum instance count.” 先前的InstanceDrawCall已经达到了Instance的最大数量
  32. “Motion Vector rendering doesn‘t support batching.” Motion Vector的渲染不支持Batching
  33. “When using late latching, children of an XR late latched GameObject do not use batching.” 使用late latching时,XR late latched GameObject的子级不能合批
  34. “Objects have different bounds and bounds instancing is disabled.” 对象具有不同的包裹体,那么包裹体实例化被禁用
  35. “SRP: Node have different shaders.” 节点具有不同的着色器
  36. “SRP: Node use multi-pass shader” 节点使用了多Pass着色器
  37. “SRP: Node use different shader keywords” 节点使用了不同的着色器关键字
  38. “SRP: End of the batch flush” Batch Flush结束
  39. “SRP: Node is not compatible with SRP batcher” 节点与SRP Batcher不兼容
  40. “SRP: Node material requires device state change” 节点材质需要改变渲染设备状态
  41. “SRP: First call from ScriptableRenderLoopJob” ScriptableRenderLoopJob第一次调用
  42. “SRP: This material has custom buffer override” 材质有自定义重写的Buffer
 

标签:different,合批,不同,物体,SRP,Unity,Objects,Batching
From: https://www.cnblogs.com/flamesky/p/18177518

相关文章

  • Unity热更学习toLua使用--[1]toLua的导入和默认加载执行lua脚本
    [0]toLua的导入下载toLua资源包,访问GitHub项目地址,点击下载即可。将文件导入工程目录中:导入成功之后会出现Lua菜单栏,如未成功生成文件,可以点击GenerateAll重新生成(注意很可能是路径问题导致的生成失败!)之后就可以开始编写脚本执行第一个lua程序了![1]C#调用Lua脚本编写C#......
  • Unity面试手册:2021最新Unity面试题汇总
    1、什么是协同程序?答:在主线程运行时同时开启另一段逻辑处理,来协助当前程序的执行。换句话说,开启协程就是开启一个可以与程序并行的逻辑。可以用来控制运动、序列以及对象的行为。2、Unity3D中的碰撞器和触发器的区别?碰撞器是触发器的载体,而触发器只是碰撞器身上的一个属性。......
  • unity+计时器,随时开启
    //定义定时器容器Dictionary<string,WaitForSecondsRealtime>RealtimeDict=newDictionary<string,WaitForSecondsRealtime>();//剩余时长privatefloattimeRemaining;//开始计时publicvoidStartTimer(floatduration){......
  • Unity导出场景并导入Godot
    使用FBXExporter导出场景FBX创建ExportScene.cs导出场景OBJ(目的是创建碰撞体),代码:点击查看代码/******************************************//**//*Copyright(c)2018monitor1394*//*https://github.com/monito......
  • Unity 热更--AssetBundle学习笔记 1.0【AB包资源加载工具类的实现】
    工具类封装通过上文中对AB包加载API的了解和简单使用,对AB包资源加载的几种方法进行封装,将其写入单例类中,如代码展示。确保每个AB资源包只加载一次:在LoadAssetBundleManager单例工具类中,首先提供基本的AB包及其AB包依赖包的加载方法,为保持AssetBundle只加载一次,使用DIctionary......
  • Unity 版本汇总
    直链下载国际版直链格式为:https://download.unity3d.com/download_unity/MD5码/Windows64EditorInstaller/UnitySetup64-版本名.exe替换版本名和MD5码,粘贴到浏览器(或者window+R输入)就会弹出下载框例:已知2021.3.0f1的MD5码为6eacc8284459即直链下载为:https://download.unity3......
  • Unity热更学习笔记--AB包的依赖 0.98
    AB包的依赖接上一小结。在这里我们新建一个红色材质球,赋值给Cube预制体。此时不对材质球进行AB包分类,再次进行打包。运行脚本,发现红色cube成功的从AB包中加载出来。尽管我们没有将cube所依赖的材质球进行打包分类,但是打包时候unity会自动将包中的物体相关依赖打入包中【图三所示......
  • Unity 热更--AssetBundle学习笔记 0.7
    AssetBundleAB包是什么?AssetBundle又称AB包,是Unity提供的一种用于存储资源的资源压缩包。Unity中的AssetBundle系统是对资源管理的一种扩展,通过将资源分布在不同的AB包中可以最大程度地减少运行时的内存压力,可以动态地加载和卸载AB包,继而有选择地加载内容。AB包的优势有哪些?......
  • Unity游戏框架设计之背包管理器
    Unity游戏框架设计之背包管理器简单介绍背包系统通常分为两个部分,第一个部分是背包的UI界面,第二个部分是对背包进行逻辑操作的管理器。在下述代码中,实现了对背包的基本逻辑操作,包括向背包添加物品,从背包中取出物品,移动背包中的物品和使用背包中的物品的基本操作,并将这些操作......
  • Unity游戏框架设计之存档管理器
    Unity游戏框架设计之存档管理器存档管理器的主要功能是实现游戏进度的查询、存储(存档)、读取(读档)和删除(删档)。存档主要有三种实现方案。(一)PlayerPrefs。PlayerPrefs类用于在游戏中存储、删除、修改和访问玩家的数据。存储的数据是持久化的,即使玩家关闭游戏或重新启动设备,数据也......