静态合批(Static Batching):Unity 的“免费午餐“优化

发布时间:2026/10/8 1:38:53

静态合批(Static Batching):Unity 的“免费午餐“优化 开场一个勾个框就变快的魔法小王的场景里放了 500 个石头、树木、栅栏…帧率只有 30DrawCall 高达 500老鸟走过来什么代码都没写只是把这些物体右上角的“Static”框全勾上了。“叮”DrawCall 从 500 掉到了 30帧率飙到 60小王惊呆“就勾个框这也太爽了吧”这就是静态合批—— Unity 送你的免费性能午餐 第一幕静态合批是什么一句话定义静态合批 Unity自动把不会动的物体 合并成大网格减少DrawCall 你只需要勾选Static Unity自动帮你合并和手动合并的关系还记得上一讲的手动合并网格吗 静态合批 Unity帮你自动做手动合并的事 手动合并你写代码把顶点烘焙成世界坐标 静态合批Unity自动把静态物体烘焙合并 ↓ 原理一模一样只是Unity帮你做了生动比喻自动打包手动合并 自己把100个快递打包成1箱 (费时费力写代码) 静态合批 贴个静态标签 Unity的机器人自动帮你打包 (勾个框就行) 第二幕核心前提——Static到底啥意思Static “我保证永远不动”勾选Static 你向Unity承诺 这个物体永远不会移动、旋转、缩放 ↓ Unity: 既然你不动我就放心地 把你的位置焊死、合并进大网格为什么不动是前提还记得合并的原理吗 位置被烘焙进顶点(世界坐标焊死) ↓ 一旦焊死就动不了了 ↓ 所以只有承诺不动的物体 才能被烘焙合并 ↓ 这就是为什么叫静态合批生动理解就像水泥浇筑 动态物体 活动的家具(能搬) 静态物体 浇进水泥的柱子(焊死了) 一旦浇进水泥(合并) 柱子就永远在那了不能动 ↓ 所以只浇筑确定不动的东西️ 第三幕如何开启静态合批超简单的操作第1步选中不会动的物体 (墙、地面、石头、树、建筑...) 第2步Inspector右上角 勾选 Static ✓ (或点旁边小箭头只勾Batching Static) 第3步完事 Unity自动处理运行时生效Static 的细分选项点Static旁边的小箭头有多个选项 ☑ Batching Static ← 静态合批用这个 ☐ Occluder Static (遮挡剔除) ☐ Occludee Static ☐ Navigation Static (寻路) ☐ Lightmap Static (光照贴图) ... 只要合批勾 Batching Static 即可 勾Everything也行(全都要)界面示意┌──────────────────────────────┐ │ Rock_01 Static ▼ ☑ │ ← 勾这里 ├──────────────────────────────┤ │ 点开▼ │ │ ☑ Contribute GI │ │ ☑ Occluder Static │ │ ☑ Batching Static ← 关键 │ │ ☑ Navigation Static │ │ ... │ └──────────────────────────────┘也可以开启项目级设置Edit → Project Settings → Player → Other Settings → ☑ Static Batching (确保勾选) 一般默认是开的检查一下 第四幕静态合批的底层原理Unity 在背后做了什么你勾选Static后Unity在构建/运行时 第1步找出所有Static 相同材质的物体 第2步把它们的顶点 用各自Transform烘焙成世界坐标 第3步合并成一个(或几个)大网格 第4步渲染时一次DrawCall画完关键合并的是相同材质的和手动合并一样的限制 静态物体们 用材质A的 → 合并成大网格1 用材质B的 → 合并成大网格2 ↓ 不同材质无法合进同一批图解场景里的静态物体 石头(材质A) 树(材质B) 石头(材质A) 树(材质B) 静态合批后 批次1: 所有材质A的石头 → 1次DrawCall 批次2: 所有材质B的树 → 1次DrawCall ↓ 原本4次DrawCall → 变成2次 (材质相同的合到一起) 第五幕静态合批 vs 动态合批两者核心区别【静态合批】 时机构建/加载时合并一次 对象不动的物体(Static) 代价占用额外内存(存合并网格) 性能CPU开销小(只合并一次) 【动态合批】 时机每一帧都重新合并 对象会动的小物体 代价每帧CPU计算 性能CPU开销大(帧帧都算)生动对比静态合批 提前把砖砌成墙(一劳永逸) 之后每帧直接用现成的墙 动态合批 每帧临时把砖摆成墙 用完拆掉下帧再摆 (因为砖会动位置每帧变)为什么动态的要每帧合并动态物体会动 ↓ 它的世界坐标每帧都在变 ↓ 不能提前烘焙(烘焙了就不能动了) ↓ 只能每帧临时算、临时合并 ↓ 所以动态合批开销大限制多对比表静态合批 动态合批 ───────────────────────────────── 对象 不动物体 小型动态物体 合并时机 一次(加载时) 每帧 CPU开销 低 高(逐帧) 内存开销 高(存网格) 低 顶点限制 基本没有 严格(900属性) 推荐度 ⭐⭐⭐⭐⭐ ⭐⭐(慎用)⚠️ 第六幕静态合批的坑与限制坑1内存膨胀❌ 问题 静态合批会复制网格数据 ↓ 1000个相同的石头 本来共用1份网格 合批后可能变成1000份世界坐标数据 ↓ 内存暴涨✅ 解决 - 大量完全相同的物体 用GPU Instancing更好(不复制网格) - 静态合批适合各不相同的静态物体坑2勾了Static却还能动❌ 危险操作 勾了Static又在代码里移动它 ↓ 物体位置已烘焙焊死 ↓ 视觉上不动或者错乱(穿帮)✅ 铁律 勾了Static 绝对不能动 要动的物体千万别勾Static坑3材质不同还是分批❌ 误解 我全勾Static了怎么DrawCall没降多少 原因 物体材质各不相同 ↓ 不同材质无法合到一批 ↓ 勾了也没用✅ 解决 先用贴图图集统一材质 让更多物体能合到一批坑4失去独立剔除❌ 问题 合批后是一体网格 远处看不见的部分也可能被渲染 ↓ (和手动合并一样的代价)✅ 权衡 - 小场景合批利大于弊 - 大场景配合遮挡剔除等技术 第七幕实战效果验证用 Frame Debugger 观察Window → Analysis → Frame Debugger 开启后可以看到 - 每次DrawCall画了什么 - 静态合批把哪些物体合到了一起 - 显示Static Batch批次用 Stats 面板看效果Game视图右上角 → Stats 关注 Batches: 总批次数 Saved by batching: 合批省下的DrawCall数 ↓ 勾Static前后对比这个数字 就知道效果了真实优化案例优化前 - 500个静态场景物体 - Batches: 500 - 帧率: 30 FPS 勾选Static后 - Batches: 约30(相同材质合并) - Saved by batching: 470 - 帧率: 60 FPS ✅ 一个勾选性能翻倍 第八幕什么该用静态合批✅ 适合静态合批✓ 场景建筑(墙、地板、天花板) ✓ 固定装饰(雕像、家具) ✓ 地形装饰(石头、栅栏) ✓ 任何摆好就不动的物体 ✓ 各不相同的静态物体❌ 不适合静态合批✗ 会移动的物体(角色、载具、门) ✗ 会旋转的物体(风车、齿轮) ✗ 大量完全相同的物体 → 用GPU Instancing更省内存 ✗ 需要频繁开关的物体决策流程图物体会动吗 ├─ 会动 → 别用静态合批 │ (考虑动态合批/GPU Instancing) │ └─ 不动 → 大量完全相同吗 ├─ 是 → GPU Instancing(省内存) └─ 否 → 静态合批勾Static ✓️ 第九幕进阶——提升合批效果技巧1统一材质让更多物体能合到一批 1. 用贴图图集(Atlas) 多张贴图 → 一张大图 2. 物体共用同一材质 ↓ 原本因材质不同无法合批的 现在都能合到一起技巧2合理规划Static把场景物体分类 永久不动 → 勾Static 偶尔动 → 别勾(用其他优化) 不要图省事全勾 会动的勾了会出bug技巧3注意内存监控勾大量Static后 用Profiler看内存 如果内存暴涨 ↓ 说明网格复制太多 考虑改用GPU Instancing ↓ 在DrawCall和内存间权衡技巧4结合遮挡剔除静态合批 Occlusion Culling 合批减DrawCall 遮挡剔除减少渲染看不见的 ↓ 两者配合弥补合批失去独立剔除的缺点✅ 静态合批检查清单使用前 □ 物体确定永远不动吗 □ 物体材质相同吗(能合批) □ 是否大量完全相同(该用Instancing) 设置 □ 勾选了Batching Static □ Project Settings里Static Batching开启 □ 会动的物体没误勾Static 验证 □ Stats面板Batches降了吗 □ Saved by batching有数值吗 □ Frame Debugger看到合批了吗 □ 内存是否可接受 □ 帧率提升了吗 一句话总结静态合批的核心勾选Static 向Unity承诺我永远不动Unity自动把相同材质的静态物体烘焙合并成大网格减少DrawCall。优点几乎零成本(勾个框)效果显著代价占用额外内存失去独立剔除。适合摆好就不动的场景物体会动的千万别勾大量相同的用Instancing核心口诀勾框承诺不动同材质自动合换内存减调用动的别勾会穿帮 三大合批技术全景对比特性静态合批动态合批GPU Instancing对象不动物体小动态物体大量相同物体原理烘焙合并网格每帧合并一次画多个网格复制(费内存)临时合并共用(省内存)CPU低高(逐帧)低内存高低低限制需不动顶点数限制需相同网格操作勾Static自动/勾选材质勾选推荐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐⭐ 现代Unity项目还有SRP Batcher可编程渲染管线批处理用另一种思路优化甚至能处理不同材质
延伸阅读

更多相关文章

2026/10/7 1:53:29

C# 实现 FPS 战斗服:从零到实战

聊“战斗服务器”听着很高大上, 一说“C# 实现 FPS 战斗服”,不少人脑子里立刻浮现: 高并发 多线程 Actor 模型 ECS 架构 网络协议、序列化、性能优化…… 然后心里默念一句: “这活是不是得 3A 大厂 5 年经验以上的后端才能搞?” 别慌,这篇文章想做的事很简单: 用大白…

2026/10/8 1:37:24

电子保险丝+MCU:构建可管理可恢复的电源路径保护方案

1. 电源路径保护为什么是嵌入式设计的隐形门槛1.1 “保险丝够用就行”的代价我实验室的废板堆里躺着一块让人心疼的控制板:输入是24V开关电源,后端是DC-DC,前级只装了一颗自恢复保险丝。听起来很常规,直到现场反馈“上电就冒烟”。…

2026/10/8 1:37:24

题解:洛谷 P4090 [USACO17DEC] Greedy Gift Takers P

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

2026/10/8 1:37:24

题解:洛谷 P1597 语句解析

本文分享的必刷题目是从蓝桥云课、洛谷、AcWing等知名刷题平台精心挑选而来,并结合各平台提供的算法标签和难度等级进行了系统分类。题目涵盖了从基础到进阶的多种算法和数据结构,旨在为不同阶段的编程学习者提供一条清晰、平稳的学习提升路径。 欢迎大家订阅我的专栏:算法…

2026/10/5 6:32:56

Jev+Agent接管浏览器:browser-use实战与jev-ultrafast性能优化

1. 从“Jev”说起:为什么我要把Agent接进浏览器“Jev”这个词最近在圈子里出现的频率越来越高,很多人第一次听到会以为是某个新模型的名字,其实它更像是一种思路——把Jev模型的能力当作底座,通过Agent的方式去接管浏览器&#xf…

2026/10/7 8:18:33

多智能体集群实战:DeepAgents编排、MCP与A2A协议及Skills体系

1. 从"单兵作战"到"集群协同":多智能体编排到底在解决什么问题如果你最近在折腾 Agent 相关的东西,大概率会有一种感觉:单个 Agent 能做的事情,其实很快就摸到天花板了。你给它一个提示词,挂几个工…

2026/10/6 17:46:51

无源低通滤波器设计实战:从RC到LC,手把手教你避开那些坑

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/8 0:02:17

自然数立方等于连续奇数之和:从证明到编程验证

十几年来我一直游走在数学科普和编程教学这两块内容之间,对“看起来像魔法、拆开全是数学”的结论总是格外敏感。最近翻资料时又撞见一句话:任何一个自然数 m 的立方,都可以写成 m 个连续奇数之和。2 的立方等于 3 加 5,3 的立方等…

2026/10/8 0:02:17

C#上位机SSH连接实战:用SSH.NET补齐超时、批量与密钥认证

简介:这是一份基于 C# 开发的 SSH 连接功能半成品工程,原本作为另一个主项目的子功能模块,现独立打包分享。工程采用 WinForms 界面,包含源码、解决方案、安装部署工程、NuGet 依赖包及说明文档,适合正在做远程连接、网…

2026/10/8 0:02:17

Java SpringBoot一体化智能售后系统设计与实现全解析

毕业设计年年做,Java Web 方向的题目翻来覆去就那么几个,但“一体化智能售后系统”这个题,每次看到我都觉得值得认真聊一聊。它不是一个简单 curd 堆出来的管理系统,而是把客户、工单、派单、处理、回访、统计整条链路串起来的一套…

还想了解更多?直接咨询顾问

免费诊断 + 免费方案 + 透明报价。

全国咨询热线400-8866-253
免费获取方案
☎咨询二维码 ☎ ↑