【性能优化】Unity 渲染优化全解析:Draw Call、Batch、SetPass 与批处理技术


Unity 渲染优化全解析:Draw Call、Batch、SetPass 与批处理技术

在 Unity 开发中,性能优化是保证游戏流畅的核心环节。尤其在移动端或 VR/AR 场景,Draw Call 过多、材质切换频繁都会严重影响帧率。

本文将从 Unity Statistics 面板参数解析入手,深入讲解 Dynamic Batching、Static Batching 与 GPU Instancing,并提供实用优化策略和排查方法,帮助开发者快速提升渲染性能。


文章目录

  • Unity 渲染优化全解析:Draw Call、Batch、SetPass 与批处理技术
    • 一、Unity Statistics 参数解析
      • 核心参数说明
      • 1.1 Dynamic Batching(动态批处理)
      • 1.2 Static Batching(静态批处理)
      • 1.3 GPU Instancing(GPU 实例化)
    • 二、Unity Draw Call 优化策略
    • 三、Unity 各批处理功能启用方法
      • 3.1 Dynamic Batching
      • 3.2 Static Batching
      • 3.3 GPU Instancing
    • 四、总结

一、Unity Statistics 参数解析

在 Unity 中,打开 Ctrl+7(Profiler) 或者 Stats 面板,可以看到场景渲染的核心指标:

在这里插入图片描述

核心参数说明

参数含义
SetPass Calls材质切换次数,每次切换都会触发 GPU 管线状态更新,CPU 开销较大
Draw Calls实际提交给 GPU 的绘制调用次数
BatchesUnity 优化后的批处理数量(经过 Dynamic/Static Batching 或 Instancing)
Triangles场景中三角形总数
Vertices顶点总数

Tips: Batches 通常小于 Draw Calls,说明 Unity 已经对部分对象进行了批处理优化。


1.1 Dynamic Batching(动态批处理)

  • 作用:将小型可移动 Mesh 合并成一个 Draw Call。

  • 要求

    • 顶点数 ≤ 300
    • 相同材质
    • 对象可移动(非 Static)
    • Shader 支持 Dynamic Batching
  • 特点

    • 小型道具、装饰物常用
    • CPU 端合并,开销较小
  • 数据示例

Batched Draw Calls: 8
Batches: 6
Triangles: 8.9k
Vertices: 15.1k

注意:如果对象同时勾选 Static,Dynamic Batching 会被禁用。


1.2 Static Batching(静态批处理)

  • 作用:将静态 Mesh 合并顶点缓冲,减少 Draw Call。

  • 要求

    • 对象必须勾选 Static → Batching Static
    • 可处理大型 Mesh
  • 特点

    • CPU 端开销较高
    • GPU Draw Call 显著减少
    • 与 GPU Instancing 冲突,启用 Static 后 Instancing 不生效
  • 数据示例

Batched Draw Calls: 996
Batches: 41
Triangles/Vertices: 显示为 0(Unity 统计方式)

使用 Static Batching 后,Statistics 面板中 Batches 数量减少Saved by Batching 数量增加,说明 Draw Call 被合并。


1.3 GPU Instancing(GPU 实例化)

  • 作用:一次 Draw Call 绘制大量相同 Mesh 的实例,适合重复物体(树、草、箱子)。

  • 生效条件

    1. 所有实例使用同一个材质 Asset,并勾选 Enable GPU Instancing
    2. Shader 支持 Instancing(带 #pragma multi_compile_instancing
    3. Mesh 必须一致
    4. 对象在场景中被渲染(Active + Renderer enabled)
    5. ShadowCaster、LightProbe 等特殊效果可能干扰
  • 特点

    • CPU 开销低,GPU 端直接绘制实例
    • Draw Call 显著减少,但 Batches 统计不一定立即变化
  • 常见问题

    • 启用 Instancing 后 Statistics 未变化

      • 材质不完全共享
      • Shader 不支持 Instancing
      • Shadow/LightProbe 干扰
      • Stats 面板刷新滞后
  • 排查方法

    1. Frame Debugger:查看 Instanced Mesh 是否合批
    2. 确认材质和 Shader 设置
    3. 暂时关闭 Shadow、LightProbe 测试

示例:154 个相同材质的 Mesh,如果 Instancing 没生效,Statistics 面板 Batches 数量不会减少。


二、Unity Draw Call 优化策略

特性Dynamic BatchingStatic BatchingGPU Instancing
对象状态可移动静态可移动或静态
顶点限制≤ 300无限制无限制
材质要求相同材质可不同相同材质
Shader 要求支持 Dynamic任意支持 Instancing
Draw Call 优化CPU 合并小 MeshCPU 合并静态 MeshGPU 同时绘制实例
适用场景小道具、装饰大场景静态建筑、地形大量重复物体(树、草)
性能开销CPU 较小CPU 较高CPU 较低,GPU 优化

实用策略

  1. 小型道具 → Dynamic Batching
  2. 大型静态场景 → Static Batching
  3. 大量重复物体 → GPU Instancing
  4. 组合策略 → 根据对象类型选择不同方法,避免冲突

三、Unity 各批处理功能启用方法

3.1 Dynamic Batching

  1. 全局开关

    • Edit → Project Settings → Player → Other Settings → Rendering → 勾选 Dynamic Batching

参考文档:
https://docs.unity.cn/6000.2/Documentation/Manual/dynamic-batching-enable.html

  1. 对象要求

    • 顶点数 ≤ 300
    • 可移动
    • 相同材质
    • Shader 支持 Dynamic Batching
  2. 检查生效

    • Profiler → Dynamic Batching → Batched Draw Calls > 0 表示已生效

3.2 Static Batching

  1. 勾选 Static → Batching Static
  2. 注意与 GPU Instancing 冲突

在这里插入图片描述
启用后 Batches 数量减少,Saved by Batching 增加

在这里插入图片描述

3.3 GPU Instancing

  1. 材质 Inspector → 勾选 Enable GPU Instancing
  2. 确认 Shader 支持 Instancing
  3. Frame Debugger 查看实例化是否生效
  4. 避免与 Static Batching 冲突

四、总结

  • SetPass Calls / Draw Calls / Batches 是衡量渲染性能的核心指标:

    • Draw Call → GPU 调用次数
    • SetPass Call → 材质切换次数(CPU 开销)
    • Batches → 批处理优化后 Draw Call 数
  • Dynamic Batching:小物体移动时自动优化

  • Static Batching:静态物体优化 Draw Call,但会禁用 Instancing

  • GPU Instancing:大量重复物体首选,CPU 开销低,GPU 实例化绘制

  • 优化策略:小物体用 Dynamic、静态大物体用 Static、重复物体用 Instancing,组合使用效果最佳

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。
如若转载,请注明出处:http://www.pswp.cn/news/920512.shtml
繁体地址,请注明出处:http://hk.pswp.cn/news/920512.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

基于Spring Boot的短信平台平滑切换设计方案

基于Spring Boot的短信平台平滑切换设计方案 案例背景 在电商系统中,短信服务是用户注册、登录验证、订单通知等环节的关键基础设施。由于业务需求或成本优化,企业可能需要在不同短信平台(如阿里云、腾讯云、云片等)之间进行切换。…

信息技术发展

信息技术是研究如何获取信息、处理信息、传输信息和使用信息的技术。计算机硬件控制器、运算器、存储器、输入设备、输出设备。计算机软件系统软件、应用软件、中间件。通信系统包括源系统、传输系统、目的系统。网络基础 个人局域网、局域网、城域网、广域网、公用网、专用网。…

2023年12月GESP5级C++真题解析,包括选择判断和编程

一、选择题(每道题2分,共30分) 1、下面C代码用于求斐波那契数列,该数列第1 、2项为1,以后各项均是 前两项之和。下面有关说法错误的是( ) A. fiboA( ) ⽤递归⽅式,fiboB() 循环⽅式 B. fiboA( ) 更加符合…

C++ 面试高频考点 力扣 704.二分查找 基础二分查找 题解 每日一题

文章目录二分查找:从基础原理到代码实现二分查找的特点算法重点题目描述:LeetCode 704. 二分查找为什么可以用二分查找?暴力算法解法二分查找解法核心逻辑:三种情况的处理二分查找什么时候结束?为什么二分查找一定是对…

《UE5_C++多人TPS完整教程》学习笔记45 ——《P46 待机与跳跃动画(Idle And Jumps)》

本文为B站系列教学视频 《UE5_C多人TPS完整教程》 —— 《P46 待机与跳跃动画(Idle And Jumps)》 的学习笔记,该系列教学视频为计算机工程师、程序员、游戏开发者、作家(Engineer, Programmer, Game Developer, Author&#xff09…

2025年03月 Scratch 图形化(一级)真题解析#中国电子学会#全国青少年软件编程等级考试

Scratch图形化等级考试(1~4级)全部真题・点这里 一、单选题(共25题,共50分) 第1题 气球初始位置如下图所示,运行下列程序,气球会朝哪个方向移动?( ) A:水平向右 B:垂直向下 C:水平向左 D:垂直向上 答案:A 气球水平向右移动 第2题 使用下列哪个选项可以将…

android 不同分辨图片放错对应文件夹会怎样?

多年前有人问过我这个问题,当时没太了解这个东西,觉得是无所谓的东西,不过没答上来这个问题还是让我记了很久。今天又看到有人发文章讨论这个问题,我也就特意再研究下。1,了解一下Android分辨率是什么。2,同…

48.【.NET8 实战--孢子记账--从单体到微服务--转向微服务】--扩展功能--集成网关--解决Refit接口调用未授权的访问问题

我们在项目中集成了Refit,但是在调用接口时,出现了问题,提示未授权的访问。这个问题是怎么导致的呢?我们该怎么处理呢?在这篇文章中我们一起来解决吧。 一、为什么会出现这个问题 让我们来深入分析一下是哪里返回的未授…

nacos登录认证

先看一个现象bootstrap.yml配置如下:spring:application:name: myservicecloud:nacos:discovery:server-addr: 127.0.0.1:8848username: nacospassword: nacosconfig:prefix: testfile-extension: ymlusername: nacos123password: nacos注意:配置中nacos…

论文阅读:arixv 2025 WideSearch: Benchmarking Agentic Broad Info-Seeking

WideSearch:大规模信息检索基准测试 https://arxiv.org/pdf/2508.07999 字节:Agent大规模信息获取基准WideSearch WideSearch:揭示 AI 智能体缺失的「广度」能力 Project Page: https://widesearch-seed.github.io/ get the data&#x…

【Docker基础】Docker-compose进阶配置:资源限制与高可用部署

目录 引言 1 Docker资源限制基础概念 1.1 为什么需要资源限制 1.2 Docker资源限制的类型 2 CPU与内存资源限制配置 2.1 传统资源限制方式(version 2) 2.2 现代资源限制方式(version 3 deploy.resources) 关键参数解释&…

SQL优化--OR

优化 SQL 中的 OR 条件是一个非常常见的性能调优问题。OR 操作符经常会导致性能下降,因为它使得数据库优化器难以高效地使用索引。下面我将从浅入深地为你讲解优化 OR 的多种策略,并附上示例。为什么 OR 性能往往较差?在简单的 WHERE 子句中&…

Java试题-选择题(21)

Java试题-选择题(21) 题目 有关线程的叙述正确的是 ? A:可以获得对任何对象的互斥锁定 B:通过继承Thread类或实现Runnable接口,可以获得对类中方法的互斥锁定 C:线程通过使用synchronized关键字可获得对象的互斥锁定 D:线程调度算法是平台独立的 下面有关forward和re…

预测模型及超参数:3.集成学习:[1]LightGBM

想象你是一位乐队指挥,你的任务是协调乐队中的每位音乐家,以演奏出一场完美的音乐会。每位音乐家(即决策树)擅长不同的乐器或乐章。在指挥过程中,你通过调节各位音乐家演奏的强度(模型参数)&…

Jetson进行旋转目标检测推理实现大疆无人机飞行控制

源码结构 大疆PSDK源码地址: https://github.com/dji-sdk/Payload-SDK其目录结构如下: Payload-SDK-master ├── CMakeLists.txt ├── doc │ ├── dji_sdk_code_style │ └── simple_model ├── EULA.txt ├── LICENSE.txt ├── psd…

阿里云百炼智能体连接云数据库实践(DMS MCP)

这篇文章主要是通过使用阿里云的百炼智能体与阿里云的serverless来实现数据库的操作 欢迎一起交流!! 首先,当然是选择自己需要的数据库啦 在阿里云控制台选择产品 - > 数据库 - > 数据管理DMS进来的界面如下所示 第一次进来的时候是…

某商店JS混淆补环境与纯算逆向分析

文章目录1. 写在前面2. 接口分析3. 补环境分析4. 纯算法还原【🏠作者主页】:吴秋霖 【💼作者介绍】:擅长爬虫与JS加密逆向分析!Python领域优质创作者、CSDN博客专家、阿里云博客专家、华为云享专家。一路走来长期坚守并…

如何安装 mysql-installer-community-8.0.21.0.tar.gz(Linux 详细教程附安装包下载)​

这是一个 ​Linux 下 MySQL 8.0.21 的压缩安装包,虽然名字里有 installer,但它其实就是一个压缩好的二进制安装包,不是 Windows 那种图形化安装程序。 一、准备工作 确保你已经有: Linux 系统(比如 Ubuntu、CentOS、…

IDEA-琴澳研究中心及学术联盟启动,产研协同赋能区域发展

8月30日,IDEA-琴澳中心主导研发的Smaray渲染引擎将发布可免费下载的Tech Preview(技术预览版)。本次发布标志着粤港澳大湾区在政产研协同创新实现成果落地,也是产业“人工智能”的探索迈进。Smaray是国内首个公开服务的、AI驱动的…

如何备份 TECNO 手机上的短信

许多 TECNO 用户都在寻找方法,以防止因手机损坏、被盗或恢复出厂设置而导致重要对话意外丢失,确保在需要时能够访问他们的数据。还有些人希望在释放设备存储空间的同时,仍然保留旧消息的副本以供日后参考。如果你一直在寻找“备份 TECNO 短信…