【Unity笔记】Unity 模型渲染优化:从 Batching 到 GI 设置的完整指南

本篇为笔记存档,仅供备忘。

Unity 模型渲染优化:从 Batching 到 GI 设置的完整指南

在 Unity 开发中,如果复制了大量模型,往往会遇到 Batching 数过高阴影开销大全局光照计算复杂 等问题,导致帧率下降,尤其是在移动端和 VR 场景中。本文梳理 Unity 中几个关键渲染相关选项的原理与优化方法,备忘一下。


优化前统计信息:

优化后统计信息:


文章目录

  • [Unity 模型渲染优化:从 Batching 到 GI 设置的完整指南](#Unity 模型渲染优化:从 Batching 到 GI 设置的完整指南)
    • [一、Batching 问题与优化策略](#一、Batching 问题与优化策略)
      • [1.1 Static/Dynamic Batching](#1.1 Static/Dynamic Batching)
      • [1.2 GPU Instancing](#1.2 GPU Instancing)
      • [1.3 SRP Batcher](#1.3 SRP Batcher)
      • [1.4 Mesh 合并与骨骼优化](#1.4 Mesh 合并与骨骼优化)
    • [二、Cast Shadows(投射阴影)设置](#二、Cast Shadows(投射阴影)设置)
      • [2.1 四种模式](#2.1 四种模式)
      • [2.2 优化建议](#2.2 优化建议)
    • [三、Contribute Global Illumination(参与全局光照)](#三、Contribute Global Illumination(参与全局光照))
      • [3.1 启用时](#3.1 启用时)
      • [3.2 禁用时](#3.2 禁用时)
      • [3.3 优化建议](#3.3 优化建议)
    • 四、整体优化流程建议
    • 五、总结

一、Batching 问题与优化策略

1.1 Static/Dynamic Batching

  • 静态 Batching:适合完全不移动的物体(建筑、环境),通过合并网格减少 Draw Call。人物模型会移动,因此不适用。
  • 动态 Batching:适合顶点数小于 300 的动态物体,且材质一致。大部分 SkinnedMeshRenderer 的人物模型顶点数过高,无法生效。

结论:人物模型的 Batching 不能依赖 Unity 内置机制,而应选择 GPU Instancing 或 SRP Batcher。

1.2 GPU Instancing

  • 在材质中勾选 Enable GPU Instancing,让相同 Mesh+材质的多个实例共享一次 Draw Call。
  • 使用 MaterialPropertyBlock 修改颜色/参数,不必复制材质。
  • 适合静态网格,但 SkinnedMeshRenderer 不支持直接 Instancing

1.3 SRP Batcher

  • URP/HDRP 提供的 CPU 优化方案,减少 Draw Call 提交开销。
  • 注意:不会降低 Batches 数量,而是降低 CPU 渲染指令的消耗。
  • Shader 必须兼容 CBUFFER_START(UnityPerMaterial),否则无效。
  • 可在 Render Pipeline Asset → Advanced → SRP Batcher 中开启。

1.4 Mesh 合并与骨骼优化

  • 将人物的身体和装备尽可能合并为一个 SkinnedMeshRenderer。
  • 使用 GPU Skinning 或第三方插件(如 MeshAnimator)优化大规模骨骼计算。
  • 对远处角色使用 LOD 或 Billboard 替代高模。

二、Cast Shadows(投射阴影)设置

MeshRenderer → Lighting → Cast Shadows 决定物体的阴影渲染方式。

2.1 四种模式

  • On:物体可见且投射阴影(默认,性能开销大)。
  • Off:不投射阴影,性能最佳。
  • Shadows Only:物体不可见但仍会产生阴影,适合隐形遮挡物。
  • Two Sided:双面阴影,适合树叶/布料,但性能更差。

2.2 优化建议

  • 近处主角:开启阴影(On)。
  • 远处 NPC:关闭(Off)或只保留烘焙阴影。
  • 植被/草/粒子:关闭(Off)。
  • 大型静态建筑:采用 Lightmap 阴影。

三、Contribute Global Illumination(参与全局光照)

MeshRenderer → Lighting → Contribute Global Illumination 控制物体是否将自身光照信息反馈到 全局光照(GI) 系统。

3.1 启用时

  • 物体的材质颜色、亮度会进入 GI 计算。
  • 白墙能反射光线、发光材质能照亮环境。
  • 烘焙时写入 Lightmap 或 Light Probe。

3.2 禁用时

  • 物体不会贡献光照,但仍能接收光照。
  • 常用于小道具、动态角色、装饰物,减少烘焙复杂度。

3.3 优化建议

  • 墙壁、地板、天花板:启用。
  • 小物件、动态角色:禁用。
  • 自发光体(Emission):启用以参与 GI。

四、整体优化流程建议

  1. 批次数优化

    • 使用 GPU Instancing材质合并
    • 开启 SRP Batcher 优化 CPU。
    • 合并 Mesh / SkinnedMeshRenderer,减少子网格。
  2. 阴影优化

    • 控制 Cast Shadows,根据物体重要性合理关闭或改为烘焙。
    • 使用 LOD 与远处低模,降低阴影开销。
  3. 全局光照优化

    • 仅让大面积静态物体贡献 GI。
    • 动态角色只接收光照,不贡献。

五、总结

  • SRP Batcher:优化 CPU 提交效率,不减少批次数。
  • GPU Instancing:减少相同网格+材质的 Draw Call 数量。
  • Cast Shadows:合理配置阴影,避免性能浪费。
  • Contribute Global Illumination:让必要的物体贡献光照,优化烘焙和实时性能。

合理搭配这些选项,可以在大规模人物复制场景中保持更好的性能与画质平衡。

相关推荐
码农的小菜园1 小时前
gradle常用指令使用笔记
笔记
鸟电波2 小时前
硬件笔记——示波器篇
笔记
Don.TIk2 小时前
SpringCloud学习笔记
笔记·学习·spring cloud
cd11840513 小时前
AutoCAD Electrical 2020学习笔记
笔记·学习
Sarvartha4 小时前
递归、回溯与动态规划学习笔记
笔记·学习·动态规划
眼镜哥(with glasses)4 小时前
网络技术三级考试综合题笔记整理(第二题、第三题)
网络·笔记·智能路由器
半壶清水5 小时前
[软考网规考点笔记]-数据通信基础之差错控制编码技术
网络·笔记·网络协议·tcp/ip
左左右右左右摇晃5 小时前
Java List集合
笔记
OxyTheCrack5 小时前
【C++】详细拆解std::mutex的底层原理
linux·开发语言·c++·笔记
左左右右左右摇晃5 小时前
红黑树笔记整理
笔记