当前位置: 首页 > news >正文

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

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

在这里插入图片描述

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

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


优化前统计信息:
在这里插入图片描述
优化后统计信息:
在这里插入图片描述


文章目录

  • Unity 模型渲染优化:从 Batching 到 GI 设置的完整指南
    • 一、Batching 问题与优化策略
      • 1.1 Static/Dynamic Batching
      • 1.2 GPU Instancing
      • 1.3 SRP Batcher
      • 1.4 Mesh 合并与骨骼优化
    • 二、Cast Shadows(投射阴影)设置
      • 2.1 四种模式
      • 2.2 优化建议
    • 三、Contribute Global Illumination(参与全局光照)
      • 3.1 启用时
      • 3.2 禁用时
      • 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:让必要的物体贡献光照,优化烘焙和实时性能。

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

http://www.dtcms.com/a/395041.html

相关文章:

  • 【AI领域】如何写好Prompt提示词:从新手到进阶的完整指南
  • Unity 性能优化 之 内存优化
  • PCB 通孔技术全解析:结构参数、制造工艺与质量控制指南
  • 1.13-Web身份鉴权技术
  • 【完整源码+数据集+部署教程】水母图像分割系统: yolov8-seg-rtdetr
  • 《从零到精通:PyTorch (GPU 加速版) 完整安装指南
  • B站的视频资源转换为可用的MP4文件
  • 5. 数据类型转换
  • 有没有更多Java进阶项目?
  • Rada and the Chamomile Valley(Tarjan缩点+多源BFS)
  • Jfrog开源替代,推荐一款国产开源免费的制品管理工具 - Hadess
  • 《C++进阶之C++11》【列表初始化 + 右值引用】
  • 【Redis】:从应用了解Redis
  • 从零到一打造前端内存监控 SDK,并发布到 npm ——基于 TypeScript + Vite + ECharts的解决方案
  • 【星海随笔】RabbitMQ容器篇
  • OpenCV:人脸识别实战,3 种算法(LBPH/EigenFaces/FisherFaces)代码详解
  • OneSignal PHP SDK v2 版本实现指南
  • Dockerfile构建镜像以及网络
  • 鸿蒙音乐播放器基础实现
  • Vue3》》Vite》》文件路由 vite-plugin-pages、布局系统 vite-plugin-vue-layouts
  • 深入解析 MySQL MVCC:高并发背后的数据时光机
  • 汽车冷却系统的冷却水管介绍
  • 基础架构设计
  • 从分散到统一:基于Vue3的地图模块重构之路
  • JVM实际内存占用
  • Spark SQL 桶抽样(Bucket Sampling)
  • 常见的【垃圾收集算法】
  • 如何解决 pip install 安装报错 ModuleNotFoundError: No module named ‘django’ 问题
  • jvm之【垃圾回收器】
  • Tomcat基础知识