【性能優化】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
英文地址,請注明出處:http://en.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 短信…