静态合批(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可编程渲染管线批处理用另一种思路优化甚至能处理不同材质

相关新闻

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

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

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

2026/10/14 12:52:48 阅读更多 →
如何使用mimotion快速实现微信支付宝步数自动同步?完整入门指南

如何使用mimotion快速实现微信支付宝步数自动同步?完整入门指南

如何使用mimotion快速实现微信支付宝步数自动同步?完整入门指南 【免费下载链接】mimotion 小米运动刷步数(微信支付宝)支持邮箱登录 项目地址: https://gitcode.com/gh_mirrors/mimo/mimotion mimotion(GitHub加速计划&am…

2026/10/14 12:53:38 阅读更多 →
Shovel命令行详解:掌握--verbose调试与--dry-run预览的实用技巧

Shovel命令行详解:掌握--verbose调试与--dry-run预览的实用技巧

Shovel命令行详解:掌握--verbose调试与--dry-run预览的实用技巧 【免费下载链接】shovel Rake, for Python 项目地址: https://gitcode.com/gh_mirrors/sho/shovel Shovel是一款类似Rake的Python任务管理工具,能将Python函数轻松转换为命令行可执…

2026/10/14 12:53:09 阅读更多 →

最新新闻

Advanced Installer 15.2汉化完全指南:版本匹配、覆盖验证与避坑

Advanced Installer 15.2汉化完全指南:版本匹配、覆盖验证与避坑

简介:Advanced Installer(高级安装程序)15.2汉化版是一款面向Windows应用开发者和系统管理员的专业打包部署工具,基于MSI技术,可快速生成符合Windows Installer标准的安装包,并支持自定义安装向导界面、编写…

2026/10/14 13:52:00 阅读更多 →
光子晶体平带与BIC仿真:COMSOL高Q偏振可控光源建模全链路

光子晶体平带与BIC仿真:COMSOL高Q偏振可控光源建模全链路

简介:本资源是面向光学仿真初学者与光子晶体研究者的COMSOL实操复现包,聚焦光子晶体中平带合并与束缚态在连续态(BIC)的核心物理现象,解决二维/三维能带计算、品质因子提取及远场偏振分析等关键建模难题。压缩包共10个…

2026/10/14 13:52:00 阅读更多 →
4G EPC到5G核心网不是升级而是架构重建

4G EPC到5G核心网不是升级而是架构重建

1. 为什么“4G EPC 到 5G 5GC”不是升级,而是重建?你刚接触移动通信网络时,大概率会听到一句很顺口的话:“5G 就是把 4G 升级一下,加点带宽、快点速度。”这话听着合理,但从业十年、亲手部署过三套商用核心…

2026/10/14 13:52:00 阅读更多 →
毕业答辩PPT模板改造指南:母版、配色与图表重绘

毕业答辩PPT模板改造指南:母版、配色与图表重绘

简介:这是一份面向高校本科毕业生的毕业论文答辩PPT模板,适用于北京石油化工学院等院校的学位论文答辩场景,也可供其他专业学生参考套用。模板整体风格精美大气,结构完整,涵盖研究背景及意义、研究思路及方法、研究目的…

2026/10/14 13:52:00 阅读更多 →
OpenMontage实战:配置驱动的自动视频拼贴流水线解析

OpenMontage实战:配置驱动的自动视频拼贴流水线解析

1. 我为什么会盯上OpenMontage:从手动剪辑到批量拼贴最近一个需求让我对“自动生成视频蒙太奇”这条路彻底改观:每周末都要给社团的活动出一条30到60秒的回顾视频,素材倒是攒了上百条,可每次打开剪辑软件,光是把有用的…

2026/10/14 13:52:00 阅读更多 →
WebGL光栅化原理与性能优化实践

WebGL光栅化原理与性能优化实践

1. 光栅化基础概念与WebGL关系光栅化(Rasterization)是计算机图形学中将矢量图形转换为像素矩阵的核心技术流程。在WebGL的渲染管线中,光栅化阶段位于顶点着色器处理之后,负责把经过变换的3D图元(通常是三角形&#xf…

2026/10/14 13:50:59 阅读更多 →

日新闻

AnyPS5通用适配层设计:兼容性与性能的工程取舍

AnyPS5通用适配层设计:兼容性与性能的工程取舍

1. 从"AnyPS5"这个名字说起:它到底想解决什么问题第一次看到"AnyPS5"这个标题,我脑子里冒出来的第一个念头是:这大概率是一个围绕"跨平台运行"或者"通用适配"做文章的项目。名字里的"Any"…

2026/10/14 0:00:41 阅读更多 →
Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

Flutter跨平台开发实战:二手交易应用与HarmonyOS适配

1. 项目概述:Flutter跨平台二手交易应用开发作为一名长期从事移动应用开发的工程师,我最近完成了一个基于Flutter框架的二手物品交易平台项目。这个项目最吸引我的地方在于它完美结合了Flutter的跨平台优势与HarmonyOS的生态特性,实现了"…

2026/10/14 0:00:41 阅读更多 →
DFS算法解决飞机降落调度问题实战

DFS算法解决飞机降落调度问题实战

1. 项目背景与核心思路飞机降落问题是一个经典的调度优化场景,也是算法竞赛和面试中的高频题目。这个题目要求我们合理安排多架飞机的降落顺序和时间,确保所有飞机都能安全着陆而不发生冲突。在实际航空管制中,这类问题直接关系到飞行安全和机…

2026/10/14 0:00:41 阅读更多 →

周新闻

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

流感时间序列预测实战:ARIMA/LSTM全流程拆解与避坑指南

简介:基于 ARIMA、LSTM、Transformer 等模型的流感时间序列预测 Python 源码,面向计算机相关专业课程设计与期末大作业学生,以及项目实战学习者。内容覆盖预处理、平稳性检验、定阶、残差分析、多模型对比预测的完整时序建模流程,…

2026/10/14 3:30:28 阅读更多 →
影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别

影刀RPA新手教程:键盘模拟输入实战——输入文本与模拟按键的区别 做影刀RPA自动化,十个新手有八个栽在"往输入框里填东西"这件事上:要么填不进去,要么填了一半,要么直接把原来内容追加在后面。这背后的根因&…

2026/10/13 16:22:04 阅读更多 →
影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容

影刀RPA新手教程:阅文起点小说数据采集实战——书籍信息与章节内容 1. 认识影刀:什么场景该用RPA采小说数据 起点中文网的页面结构相对稳定——分类榜单、书籍详情、章节内容三块独立页面,跳转链路清晰。这种场景非常适合影刀自动化&#x…

2026/10/14 3:29:58 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

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

2026/10/13 22:01:27 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

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

2026/10/13 14:57:39 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

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

2026/10/14 7:53:34 阅读更多 →