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

unity静态批处理

unity静态批处理

      • 静态批处理
      • 要求和兼容性
        • 渲染管线兼容性
      • 使用静态批处理
      • 在构建时进行静态批处理
        • 在构建时执行静态批处理的步骤:
      • 在运行时进行静态批处理
      • 性能影响

静态批处理

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

静态批处理比动态批处理更高效,因为静态批处理不会在 CPU 上变换顶点。有关静态批处理的性能影响的更多信息,请参阅性能影响。

要求和兼容性

该部分包含有关静态批处理的渲染管线兼容性的信息。

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

使用静态批处理

Unity 可以在构建时和运行时执行静态批处理。一般来说,如果 GameObjects 在构建应用程序之前就存在于场景中,建议使用编辑器在构建时批处理。如果在运行时创建 GameObjects 及其网格,则使用运行时 API。

当使用运行时 API 时,可以更改静态批次根对象的变换属性。这意味着你可以移动、旋转或缩放组成静态批次的整个网格组合,但不能更改单个网格的变换属性。

要使用静态批处理,GameObjects 必须符合静态批处理的条件。除了常见使用信息中描述的标准外,还需要确保:

  • GameObject 是活动的。
  • GameObject 具有启用的 Mesh Filter 组件。
  • Mesh Filter 组件引用一个 Mesh。
  • Mesh 启用了读/写。
  • Mesh 的顶点数大于 0。
  • Mesh 没有与其他 Mesh 组合过。
  • GameObject 具有启用的 Mesh Renderer 组件。
  • Mesh Renderer 组件未使用具有 DisableBatching 标签设置为 true 的材质。

有关静态批处理性能影响的信息,请参阅性能影响部分。

在构建时进行静态批处理

你可以在编辑器中启用构建时的静态批处理。

在构建时执行静态批处理的步骤:
  1. 转到 Edit > Project Settings > Player
  2. Other Settings 中启用 Static Batching
  3. 在场景视图或层级中选择要批处理的 GameObject,并在检视器中查看。
    • 提示:可以同时选择多个 GameObject,以便为它们全部启用静态批处理。
  4. 在 GameObject 的 Static Editor Flags 中启用 Batching Static

如果满足常见使用信息中描述的条件,Unity 将自动将指定的静态网格批处理为同一个绘制调用。
在这里插入图片描述

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

在运行时进行静态批处理

要在运行时批处理静态网格,Unity 提供了 StaticBatchingUtility 类。静态方法 StaticBatchingUtility.Combine 将传入的 GameObjects 组合并为静态批处理做准备。这对于在运行时程序生成的网格特别有用。

与构建时的静态批处理不同,运行时批处理不需要启用静态批处理玩家设置。有关如何使用此 API 的信息,请参阅 StaticBatchingUtility

性能影响

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

注意:静态批处理对顶点数量有上限。每个静态批次最多可以包含 64000 个顶点。如果超过此数量,Unity 会创建另一个批次。

http://www.lryc.cn/news/461942.html

相关文章:

  • python项目实战——下载美女图片
  • git分布式版本控制系统命令介绍、功能作用案例、子模块等知识点总结
  • 第八课:Python学习之循环
  • 设计模式——建造者模式(5)
  • java面向对象编程--高级(二)
  • 定时发送邮件
  • 基于Java的免税商品优选购物商城设计与实现代码(论文+源码)_kaic
  • 解决selenium启动慢问题
  • Springboot + zset + lua 实现滑动窗口
  • 【深度学习】transformer为什么使用多头注意力极致?为什么不使用一个头
  • 利用Excel数据合并到Word功能,官方名为“Word邮件合并”
  • 当代世界著名哲学家‌起名大师颜廷利:全球公认最厉害思想家
  • Would you like conda to send this report to the core maintainers? [y/N]:
  • 数据结构编程实践20讲(Python版)—18哈希表
  • Html 标题加图标
  • 机器学习探索性数据分析 (EDA)
  • 【K8S系列】Kubernetes pod节点Pending或CrashLoopBackOff 问题及解决方案详解【已解决】
  • 【Redis】Zset类型常用命令
  • js中map,filter,find,foreach的用法介绍
  • Linux 重置 root 密码
  • 【含开题报告+文档+PPT+源码】基于SpringBoot+Vue的停车场管理系统
  • 博睿数据首届“观测先锋 · 2024 可观测平台创新应用案例大赛”现已启动!
  • 笔记:SOME/IP-SD报文中的TTL
  • 9.存储过程安全性博客大纲(9/10)
  • android 打包成aar
  • 服务器和中转机在网络安全方面
  • 解决“无法从 System.String 强制转换或转换为 Class 对象”错误
  • Git:LF will be replaced by CRLF、pytest PermissionError以及Git应用中的一些问题解决及一些使用技巧
  • 云原生之运维监控实践-使用taosKeeper与TDinsight实现对TDengine服务的监测告警
  • 前端js,vue系统使用iframe嵌入第三方系统的父子系统的通信