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

Unity中的静态合批使用整理

静态批处理是一种绘制调用批处理方法,它组合不移动的网格以减少绘制调用。它将组合的网格转换为世界空间,并为它们构建一个共享顶点和索引缓冲区。然后,对于可见网格,Unity 会执行一系列简单的绘制调用,每个调用之间几乎没有状态变化。静态批处理不会减少绘制调用的数量,而是减少它们之间的渲染状态更改的数量。静态批处理比动态批处理更高效,因为静态批处理不会转换 CPU 上的顶点。

兼容性:

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

开启批处理:

1.构建时:

在Edit > Project Settings > Player > Other Settings (其他设置) 中,勾选 Static Batching 。

将需要合批的物体在物体的 Inspector 面板中勾选Static,并选择Batching Static

注意:如果在构建时执行静态批处理,则 Unity 在运行时不会使用任何 CPU 资源来生成静态批处理的网格数据

2.运行时:

运行时使用StaticBatchingUtility 类批处理静态网格,静态 StaticBatchingUtility.Combine 方法将传入的游戏对象组合在一起,并为静态批处理做好准备。对于运行时以程序方式生成的网格有用
与构建时的静态批处理不同,运行时的批处理不需要启用 Static Batching Player Setting

合批条件:

合批时机:

1.构建时:

2.运行时:

性能影响:

使用静态批处理需要额外的 CPU 内存来存储组合的几何体。如果多个游戏对象使用相同的网格,则 Unity 会为每个游戏对象创建一个网格副本,并将每个副本插入到组合网格中。这意味着相同的几何体在组合网格中多次出现。无论您使用的是编辑器还是运行时API来准备用于静态批处理的游戏对象,Unity 都会执行此作。如果要保持较小的内存占用,可能必须牺牲渲染性能并避免对某些游戏对象进行静态批处理。例如,在茂密的森林环境中将树木标记为静态可能会对内存产生严重影响。


1.静态批处理可以包含的顶点数存在限制。每个静态批处理
最多可以包含 64000 个顶点。如果有更多,Unity 会创建另一个批次
2.一旦游戏对象被标记为静态并进行了静态批处理,在运行时就
不能再改变其位置、旋转、缩放等属性,否则会导致渲染错误。
3.静态批处理
会影响光照计算,因为合批后的对象会被视为一个整体。在使用静态批处理时,需要注意光照烘焙的设置,以确保光照效果符合预期。
4.静态批处理可以显著减少 Draw Call 数量,提高渲染性能,特别是在场景中包含大量静态对象的情况下。但对于经常移动或变化的对象,不适合使用静态批处理。

未完待续。。。

参考链接:

静态批处理 - Unity 手册

Unity - Manual: Static batching (unity3d.com)

相关文章:

  • Oracle 数据库中,并行 DML
  • XSLFO XSLT:深入解析两种强大的XML转换技术
  • leetcode0069. x 的平方根-easy
  • 从零构建大语言模型全栈开发指南:第五部分:行业应用与前沿探索-5.1.2行业落地挑战:算力成本与数据隐私解决方案
  • 操作系统(二):实时系统介绍与实例分析
  • PM2 在 Node.js 项目中的使用与部署指南
  • 【力扣hot100题】(047)路径总和Ⅲ
  • 如何在Android中使用匿名内部类?
  • 人工智能混合编程实践:C++调用封装好的DLL进行图像超分重建
  • MinIO 入门指南:高性能对象存储的安装与使用
  • 国内使用Claude 3.7 sonnet的6种方法及Cursor+Claude3.7实现从原型到app开发
  • 034-QSharedMemory
  • 人工智能在医疗领域的创新应用与挑战
  • HC32F460 - SPI+DMA+TFT
  • 蓝桥杯2024省赛PythonB组——日期问题
  • 【XTerminal】【树莓派】Linux系统下的函数调用编程
  • UE5 + Rider + VsCode 接入腾讯的 Puerts 脚本
  • XEOS 与 AutoMQ 推出联合方案,共筑云原生 Kafka 新生态
  • Pytorch深度学习框架60天进阶学习计划 - 第35天:模型解释性
  • C++学习笔记 | malloc calloc realloc的作用以及区别