Unity优化批处理Static Batch,GpuInstancing,SRP

本文详细探讨了Unity中Drawcall的产生过程,重点介绍了Static Batching静态批处理,SRP Batching自定义着色器管线批处理,以及GPU Instancing GPU实例化技术。GPU Instancing通过开启Material.enableInstancing或使用DrawInstancedIndirect接口实现性能提升,特别是对于不透明物体,直接启用实例化更为推荐。同时,DrawMeshInstancedIndirect接口避免了视锥体裁剪和排序,且在相同实例数量下,其额外开销较小。

(一)一次Drawcall 的产生都经历了哪些过程:

在这里插入图片描述

(二)Static Batching

在这里插入图片描述
在这里插入图片描述
(三)SRP Batching

在这里插入图片描述
在这里插入图片描述
(四) GPU Instancing

在这里插入图片描述

在这里插入图片描述
(五)GPU Instancing的介绍

(1)直接勾选 Material.enableInstancing
由unity自动排序,裁剪

(2)用Graphic.DrawInstancedIndirect( 此接口每一帧都会调用 ,但是消耗很小)
用 CommandBuffer.DrawInstancedIndirect( 用CommandBuffer,只调用一次就够用)

请注意此接口: DrawMeshInstancedIndirect,

此接口中的mesh: 不会被视锥体裁剪, 如果是Transparent类型也不会被排序

(3)相同Instanced DrawCall数量下 , DrawMeshInstanced形式的额外开销更小
(4)对于不透明物体: 建议直接使用“打勾”

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

以上总结了 static Batch , SRP, GpuInstancing的主要使用范围
最近飘了,好好反思!!!!!!!

Unity6 中启用 GPU Instancing 功能,主要涉及材质设置和渲染管线的兼容性配置。以下是具体实现方式: ### 在材质中启用 GPU Instancing 要使用 GPU Instancing,必须确保使用的材质启用了该功能。在 Unity 编辑器中打开目标材质(Material),在 Inspector 面板中勾选 **"Enable GPU Instancing"** 选项[^1]。此操作允许该材质支持实例化绘制多个相同网格对象,从而减少 Draw Call 消耗。 ### 使用脚本进行批量绘制测试 为了验证 GPU Instancing 是否生效,可以创建一个用于测试的脚本并挂载到摄像机上。以下示例代码展示了如何通过 `Graphics.DrawMeshInstanced` 方法进行实例化绘制: ```csharp using UnityEngine; public class TestGPUInstancing : MonoBehaviour { public Mesh mesh; public Material mat; private Matrix4x4[] instanceMatrices = new Matrix4x4[100]; private void Start() { for (int i = 0; i < instanceMatrices.Length; i++) { Vector3 position = Random.insideUnitSphere * 5f; instanceMatrices[i] = Matrix4x4.TRS(position, Quaternion.identity, Vector3.one); } } private void OnRenderObject() { Graphics.DrawMeshInstanced(mesh, 0, mat, instanceMatrices); } } ``` 在场景中为该脚本分配一个网格(如 Cube)和启用了 GPU Instancing 的材质,即可测试实例化效果[^2]。 ### 确保渲染管线兼容性 Unity6 默认使用 Universal Render Pipeline (URP) 或 High Definition Render Pipeline (HDRP),这两种管线对 GPU Instancing 的支持有所不同。在 URP 中,需要确保项目启用了 **SRP Batcher** 并且材质符合 Instancing 条件;而在 HDRP 中,则需检查渲染管线资产中的相关设置是否开启 Instancing 支持。 ### 注意事项 - GPU Instancing 要求所有实例使用相同的网格和材质,否则无法合并绘制。 - 若使用了复杂的着色器或动态光照,可能会影响 Instancing 的性能优化效果。 - 不同平台对 GPU Instancing 的支持程度不同,建议在目标设备上进行实际性能测试。 ---
评论 5
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值