Static Batching、Dynamic Batching 、GPU Instancing的对比

  1. 什么是 GPU Instancing?
    GPU Instancing(GPU 实例化)是一种现代图形渲染技术,允许你用一次 Draw Call在 GPU 上同时渲染大量相同 Mesh 和材质但变换(位置、旋转、缩放)不同的物体。

典型应用:大面积草地、森林、士兵、金币、粒子等。

  1. 原理简述
    传统渲染:每个物体一个 Draw Call,CPU 需要多次提交渲染指令,效率低。
    Instancing:CPU 只发一次 Draw Call,告诉 GPU:“这是同一个模型和材质,但有 N 个实例,每个实例有不同的变换矩阵(和可选参数)。”
    GPU 在渲染时自动为每个实例应用不同的变换和属性。
  2. Unity 中的 GPU Instancing
    开启方式:在材质面板勾选“Enable GPU Instancing”即可。
    代码方式:使用 Graphics.DrawMeshInstanced、DrawMeshInstancedIndirect 等 API。
    Shader 支持:Shader 里要支持 instancing(Unity 标准 Shader 已支持)。
  3. 优点
    极大减少 Draw Call 数量,大幅提升渲染效率。
    CPU 负担小,适合大量重复物体。
    支持每个实例不同的变换、颜色等属性(通过 instanced properties)。
  4. 局限与注意事项
    所有实例必须用同一个 Mesh 和材质(但可以通过 instanced properties 传递不同参数)。
    不支持完全不同的模型或材质。
    Shader 必须支持 Instancing。
    每次 Draw Call 的实例数量有上限(通常 500~1000,受平台和 API 限制)。