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

news/2024/5/19 4:02:42

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

文章目录

  • 前言
  • 一、静态批处理是什么?
  • 二、使用步骤
    • 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.mrgr.cn/p/50543733

相关文章

(二十一)springboot实战——Spring AI劲爆来袭

前言 本节内容是关于Spring生态新发布的Spring AI的介绍,Spring AI 是一个面向人工智能工程的应用框架。其目标是将 Spring 生态系统的设计原则,如可移植性和模块化设计,应用到人工智能领域,并推广使用普通的Java对象&#xff08…

[转帖]流量一样但为什么CPU使用率差别很大

https://plantegg.github.io/2024/04/26/%E6%B5%81%E9%87%8F%E4%B8%80%E6%A0%B7%E4%BD%86%E4%B8%BA%E4%BB%80%E4%B9%88CPU%E4%BD%BF%E7%94%A8%E7%8E%87%E5%B7%AE%E5%88%AB%E5%BE%88%E5%A4%A7/ 这是我翻到2013年的一篇文章,当时惊动所有公司高人,最后分析得知原因后所有人都跪…

【c++算法篇】双指针(上)

🔥个人主页:Quitecoder 🔥专栏:算法笔记仓 朋友们大家好啊,本篇文章我们来到算法的双指针部分 目录 1.移动零2.复写零3.快乐数4.盛水最多的容器 1.移动零 题目链接:283.移动零 题目描述: 算法…

用python画一个正八边形

1 问题 使用turtle库的turtle.fd()函数和turtle.seth()函数绘制一个边长100的正八边形。 2 方法 1、利用for循环解决如何画出图形中相同的八条边的问题。 2、再利用turtle.fd()函数和turtle.seth()函数画出完整的图形。 代码清单 1 import turtleturtle.pensize(2)d0for i in r…

读天才与算法:人脑与AI的数学思维笔记19_深度数学

深度数学1. 深度数学 1.1. 组合与选择,是发明新事物的两个不可或缺的条件 1.1.1. 保尔瓦雷里(Paul Valry) 1.2. 利用以往的数学定理证明过程训练算法,以发现新的定理 1.3. 谷歌设在伦敦的总部整体有一种现代牛津大学的感觉,提供了有助于员工们集中注意力、进行深度思考的最…

[转帖]十年后数据库还是不敢拥抱NUMA-续篇

https://plantegg.github.io/2024/05/03/%E5%8D%81%E5%B9%B4%E5%90%8E%E6%95%B0%E6%8D%AE%E5%BA%93%E8%BF%98%E6%98%AF%E4%B8%8D%E6%95%A2%E6%8B%A5%E6%8A%B1NUMA-%E7%BB%AD%E7%AF%87/ 十年后数据库还是不敢拥抱NUMA-续篇 背景 十年后数据库还是不敢拥抱NUMA, 这篇经典的纠正大…

闲来装个虚拟机Ubuntu24.04和硬盘分区及挂载

简述 最近ubuntu出新版本了,ubuntu24.04, 俗称高贵食蚁兽。5年前进行Android或者linux开发基本是在windows下的虚拟机中进行。目前,虽然物质基础提高了,功能有独立进行编译、代码管理的服务器了。可以通过ssh登录,但是…

[转帖]长连接黑洞重现和分析

https://plantegg.github.io/2024/05/05/%E9%95%BF%E8%BF%9E%E6%8E%A5%E9%BB%91%E6%B4%9E%E9%87%8D%E7%8E%B0%E5%92%8C%E5%88%86%E6%9E%90/ 长连接黑洞重现和分析 这是一个存在多年,遍及各个不同的业务又反反复复地在集团内部出现的一个问题,本文先通过重现展示这个问题,然后…

Git系列:config 配置

💝💝💝欢迎莅临我的博客,很高兴能够在这里和您见面!希望您在这里可以感受到一份轻松愉快的氛围,不仅可以获得有趣的内容和知识,也可以畅所欲言、分享您的想法和见解。 推荐:「stormsha的主页」…

Rust 实战thiserror+自定义错误消息体

导航 一、背景二、实践1、导入thiserror2、自定义错误消息体(1)创建ErrMsg.rs和创建自定义结构体(2)lib.rs添加ErrMsg(3)main函数(4)完整代码 一、背景 开发中遇到需要通用、能够满…

Latex 编辑论文的一些坑

如何插入图片首先,要使用pdf作为图片的保存格式,这样图片可以以原始分辨率插入。但要实现高清图片,需要几个条件,请一定按照我说的步骤来1. 在ppt里编辑你想要的图片样子、排布、文字(真正标准的做法是在latex中用input写入文字)等2.将有效图片区域移动到ppt整个画布的左…

基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。

演示视频: 基于Springboot的旅游管理系统(有报告)。Javaee项目,springboot项目。 项目介绍: 采用M(model)V(view)C(controller)三层体系结构&…

【华为】路由综合实验(OSPF+BGP基础)

【华为】路由综合实验 实验需求拓扑配置AR1AR2AR3AR4AR5PC1PC2 查看通信OSPF邻居OSPF路由表 BGPBGP邻居BGP 路由表 配置文档 实验需求 ① 自行规划IP地址 ② 在区域1里面 启用OSPF ③ 在区域1和区域2 启用BGP,使AR4和AR3成为eBGP,AR4和AR5成为iBGP对等体…

ARM64_Ubuntu_Chrome_Python 镜像搭建最终版

ARM64_Ubuntu_Chrome_Python 镜像搭建最终版dockerfile FROM ubuntu:24.04 RUN apt-get update && apt-get install gnupg -y && apt-get clean RUN sh <<EOF cat > /etc/apt/sources.list <<EOS deb http://ftp.de.debian.org/debian sid mai…

[转帖]Linux内核版本升级,性能到底提升多少?

https://plantegg.github.io/2019/12/24/Linux%E5%86%85%E6%A0%B8%E7%89%88%E6%9C%AC%E5%8D%87%E7%BA%A7%EF%BC%8C%E6%80%A7%E8%83%BD%E5%88%B0%E5%BA%95%E6%8F%90%E5%8D%87%E5%A4%9A%E5%B0%91%EF%BC%9F%E6%8B%BF%E6%95%B0%E6%8D%AE%E8%AF%B4%E8%AF%9D/ 背景 X 产品在公有云售…

初识webpack项目

新建一个空的工程 -> % mkdir webpack-project 为了方便追踪执行每一个命令&#xff0c;最终产生了哪些变更&#xff0c;将这个空工程初始化成git项目 -> % cd webpack-project/-> % git init Initialized empty Git repository in /Users/lixiang/frontworkspace/…

WPF应用程序XAML

当WPF应用程序创建好后&#xff0c;系统会自动添加一个Grid控件到窗体上&#xff0c;通过Grid控件能够方便地对界面进行布局.下面代码中为Grid控件添加了两行两列&#xff0c;分别用RowDefinitions属性ColumnDefinitions属性表示行的集合和列的集合&#xff0c;集合中有RowDefi…

Blazor/Hybird 触屏下单程序调优笔记

环境 Blazor Net8.0 + FreeSql + Bootstrap Blazor 组件 以下都是自己瞎琢磨的和官网资料搬运,肯定有不少错漏和不合理的地方,非常希望各位大佬评论区给我建议和意见. 1. 组件化需要提升渲染性能的组件,例如触摸屏显示每个商品下单数量的商品列表 避免不必要地呈现组件子树, 执…

基于Springboot的房屋租赁管理系统(有报告)。Javaee项目,springboot项目。

演示视频&#xff1a; 基于Springboot的房屋租赁管理系统&#xff08;有报告&#xff09;。Javaee项目&#xff0c;springboot项目。 项目介绍&#xff1a; 采用M&#xff08;model&#xff09;V&#xff08;view&#xff09;C&#xff08;controller&#xff09;三层体系结构…

域控安全 ----> Ntds.dit文件抓取

大家还记得内网渗透的初衷吗&#xff1f;&#xff1f;&#xff1f; 找到域馆&#xff0c;拿下域控&#xff01;&#xff01; 拿下了域控就是拿下了整个域&#xff01;&#xff01; 但是大家知道拿下域环境之后应该怎么操作吗(灵魂拷问)&#xff1f;&#xff1f;&#xff1f; …