Unity 性能优化之静态批处理(三)

embedded/2024/11/24 20:26:15/

提示:仅供参考,有误之处,麻烦大佬指出,不胜感激!

文章目录

  • 前言
  • 一、静态批处理是什么?
  • 二、使用步骤
    • 1.勾选Static Batching
    • 2.测试静态合批效果
  • 三、静态合批得限制
      • 1、游戏对象处于激活状态。
      • 2、游戏对象有一个Mesh Filter组件,并且该组件已启用。
      • 3、Mesh Filter组件具有对网格的引用。
      • 4、网格已启用Read/Write功能。
      • 5、网格的顶点计数大于0。
      • 6、该网格尚未与另一个网格组合。
      • 7、游戏对象有一个Mesh Renderer组件,并且该组件已启用。
      • 8、网格渲染器组件不将任何材质与DisableBatching标记设置为true的着色器一起使用。
      • 9、要批处理在一起的网格使用相同的顶点属性。例如, Unity可以将使用顶点位置、顶点法线和一个UV的网格与另一个UV进行批处理,但不能将使用顶点定位、顶点法线、UVO、UV1和顶点切线的网格进行批处理。
  • 四、如何看是否成功
      • 1.可以只管得看到合批次数降低
      • 2.可以在Profiler窗口看到合批信息,是否发生变化,如下图
  • 五、静态合批弊端
  • 六、使用代码来静态合批
  • 总结


前言

动态批处理是常用优化技术之一。
不论是动态合批还是静态合批,因为都是牺牲内存来降低Draw Cal,也就是提高CPU。所有要根据项目情况分析来使用这些技术。

一、静态批处理是什么?

静态合批也叫静态批处理,是Unity的一种优化技术。
对于始终静止不动的物体使用静态合批后, CPU会把它们合并为一个批次发送给GPU处理,这样可以减少DrawCall带来的性能消耗,从而提升游戏性能。

二、使用步骤

1.勾选Static Batching

要使用静态合批,必须确保Edit-Project Settings-Player-Other Settings-Static Batching是勾选的。
在这里插入图片描述

2.测试静态合批效果

1.首先创建一个场景,在场景中创建3个cube,显示合批次数5,如下图
在这里插入图片描述
2.使用静态合批
选中该物体,点击在Inspector窗口右上角的Static右方的下拉菜单,选择Batching Static,点击运行
在这里插入图片描述

很明显降低了合批次数,如下图
在这里插入图片描述

三、静态合批得限制

使用静态合批虽然可以提升游戏性能,但是设置为静态的物体在整个游戏中就不能再运动了,强行使它们运动会出问题。而且即使按照以上步骤进行了静态合批,也不一定保证会成功,必须满足以下全部条件,静态合批才会成功:

1、游戏对象处于激活状态。

2、游戏对象有一个Mesh Filter组件,并且该组件已启用。

3、Mesh Filter组件具有对网格的引用。

4、网格已启用Read/Write功能。

5、网格的顶点计数大于0。

6、该网格尚未与另一个网格组合。

7、游戏对象有一个Mesh Renderer组件,并且该组件已启用。

8、网格渲染器组件不将任何材质与DisableBatching标记设置为true的着色器一起使用。

9、要批处理在一起的网格使用相同的顶点属性。例如, Unity可以将使用顶点位置、顶点法线和一个UV的网格与另一个UV进行批处理,但不能将使用顶点定位、顶点法线、UVO、UV1和顶点切线的网格进行批处理。

四、如何看是否成功

1.可以只管得看到合批次数降低

2.可以在Profiler窗口看到合批信息,是否发生变化,如下图

在这里插入图片描述

五、静态合批弊端

所有得优化技术都是有利有弊得,比如:静态合批就是牺牲了某些特性来得到降低Draw Call。
1.静态合批得物体不能移动、旋转等
2.增大内存开销:合批后的网格会常驻内存,在有些场景下可能并不适用。比如森林中的每一棵树的网格都相同,如果对它采用静态合批策略,合批后的网格基本等同于:单颗树网格 x 树的数量,这对内存的消耗可能就十分巨大了。因此场景加载后,由于场景内有静态合批数据,会使内存变大。

六、使用代码来静态合批

前提条件:必须满足合批条件,才会生效,和手动在编辑器里选择一样。

StaticBatchingUtility.Combine(GameObject 根物体)
StaticBatchingUtility.Combine(GameObject[] 要进行静态合批的游戏对象,GameObject 根物体)

总结

好记性不如烂笔头
上一章:链接: Unity 性能优化之Profiler窗口(二)怎么看懂这个分析器
下一章:链接: Unity 性能优化之动态批处理(四


http://www.ppmy.cn/embedded/34192.html

相关文章

自动驾驶融合定位:kalman 滤波器基本原理

自动驾驶融合定位:kalman 滤波器基本原理 一、概述 kalman滤波是一个重要的融合手段,虽然最近几年,随着基于优化的方法不断推广,基于滤波的方法逐渐式微,但是,由于二者各有优缺点,滤波方法现在…

2025考研政治徐涛核心考案基础+强化班视频课程,百度网盘PDF资源

大家好,今天给大家带来的是徐涛强化课笔记。 25徐涛课程:徐涛2025网盘资源课 使用建议: ①看课的时候辅助使用。不用在看课时点暂停做笔记,只需要简单的补充一点在书上即可,后期也可以当知识手册背诵。 ②二战的同…

Spring Boot应用部署 - Tomcat容器替换为Jetty容器

Jetty和Tomcat容器对比 Tomcat和Jetty都是一种Servlet引擎,他们都支持标准的servlet规范和JavaEE的规范。 Jetty更轻量级。这是相对Tomcat而言的。 Jetty更灵活。 Jetty更满足公有云的分布式环境的需求,而Tomcat更符合企业级环境。 Tomcat容器替换为…

ansible报错解决:Failed to import the required Python library (netaddr)

ansible报错解决:Failed to import the required Python library (netaddr) 问题情况 今天我在做实验的时候出现了一个问题,以下是我的playbook,这个playbook是验证变量ip_address是否是一个合法的IP地址,并打印相应的信息的一个…

libmodbus使用

安装可以看这个博客&#xff1a; https://blog.csdn.net/hanhui22/article/details/105786762 它的安装可以&#xff0c;但是编译测试看不太懂&#xff0c;我没跟着它的编译&#xff0c;完了后把/lib下的 放到开发板的/usr/lib下 编写代码: #include <stdio.h> #inclu…

Grafana:云原生时代的数据可视化与监控王者

&#x1f407;明明跟你说过&#xff1a;个人主页 &#x1f3c5;个人专栏&#xff1a;《Grafana&#xff1a;让数据说话的魔术师》 &#x1f3c5; &#x1f516;行路有良友&#xff0c;便是天堂&#x1f516; 目录 一、引言 1、Grafana简介 2、Grafana的重要性与影响力 …

android native开发

framwork 一些重要的流程都是要放到native中做的 原因也很简单&#xff0c;效率&#xff0c;尤其是针对性能优化方面的&#xff0c;更离不开native开发 目前针对native开发也回顾下&#xff0c;总结下经验 1 jni开发有两种&#xff0c;app端一般是静态模式&#xff0c;要有jav…

主成分分析在R语言中的简单应用:使用mvstats包

在数据科学领域&#xff0c;主成分分析&#xff08;PCA&#xff09;是一种广泛使用的技术&#xff0c;主要用于数据降维和探索性数据分析。PCA可以帮助我们发现数据中的模式&#xff0c;减少数据集的复杂性&#xff0c;同时保持数据中最重要的特征。本文将介绍如何在R语言中使用…