GPU Instancing 跟 SRP Batcher

todo

两者好像不兼容,不能同时开启。

两者都需要在Shader里增加对应的属性块

Unity6 起好像有新方案代替 gpu instance了?

GPU Instancing 与 SRP Batcher 深度解析

1. 核心概念对比

特性GPU InstancingSRP Batcher
目标​ 减少Draw Call 减少CPU开销
工作原理​ 一次绘制多个相同网格 持久化CBuffer,减少SetPass Calls
适用对象​ 相同网格的不同实例 相同Shader的不同物体
数据变化​ 支持Per-Instance数据 支持Per-Object数据
Unity版本​ 所有版本支持 需要SRP(URP/HDRP)

 

 

 

性能优化:

Unity 的 GPU Instance(GPU 实例化)会自动进行视锥体剔除,但剔除的逻辑和时机与普通渲染有所不同,核心结论先明确:

1. 视锥体剔除的核心逻辑:按 “实例批次” 剔除,而非单个实例

GPU Instance 的本质是用一个 DrawCall 渲染多个相同 Mesh 的实例,Unity 对其视锥体剔除的规则是:
  • 首先计算该批次所有实例的 合并包围盒(Combined Bounding Box)(由所有实例的本地包围盒 + 各自的位置 / 旋转 / 缩放计算得出);
  • 仅当这个 合并包围盒完全在视锥体之外时,才会对整个批次进行视锥体剔除(不执行该 DrawCall);
  • 若合并包围盒与视锥体有交集(哪怕只有一个实例在视锥体内),则整个批次都会被提交到 GPU 渲染,不会单独剔除批次中不在视锥体内的单个实例。
简单说:GPU Instance 的视锥体剔除是 “批次级剔除”,而非 “单个实例级剔除”。
因此当相同 GPU Instance 的物体大量零散在场景里时,会造成大量的性能浪费,这时候需要手动进行优化,例如将物体通过八叉树进行空间划分管理,手动进行视锥体裁剪,将当前视锥体内的物体划分到同一个 GPU Instance 里
posted @ 2025-11-27 11:58  JeasonBoy  阅读(13)  评论(0)    收藏  举报