> 技术文档 > 【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS


文章目录

  • 前言
    • 1、官方文档
    • 2、什么是GPU Resident Drawer (GRD)
    • 3、GPU Resident Drawer (GRD)适用情况
    • 4、注意事项
      • 4.1 GPU Resident Drawer仅适用于以下情况
      • 4.2 如果启用 GPU Resident Drawer,则会出现以下情况:
      • 4.3 选择性关闭GPU Resident Drawer
  • 一、如何开启GPU Resident Drawer (GRD)
    • 1、转到 `Project Settings > Graphics`,然后在 Shader Stripping 部分中,将 `BatchRendererGroup Variants` 设置为 Keep All。
    • 2、转到活动的 URP Asset并启用 SRP Batcher。
    • 3、转到活动的 URP Asset,将 GPU Resident Drawer 设置为 实例化绘图(Instanced Drawing)。
    • 4、双击 Renderer List 中的渲染器以打开 Universal Renderer,然后将 Rendering Path 设置为 Forward+。
    • 5、优化效果对比
    • 6、开启GPU遮挡剔除,进一步优化
  • 二、优化加快GPU Resident Drawer (GRD)的速度
    • 1、禁用 Static Batching静态合批
    • 2、修改光照贴图设置
  • 专栏推荐
  • 完结

前言

1、官方文档

https://docs.unity3d.com/6000.0/Documentation/Manual/urp/gpu-resident-drawer.html。

2、什么是GPU Resident Drawer (GRD)

将MeshRenderer数据转为BRG batch(BatchRendererGroup)数据,并使用 GPU 实例化,从而减少绘制调用次数并释放 CPU 处理时间。有关详细信息,请参阅BatchRendererGroup 的工作原理。

  • 完全绕过 CPU 提交渲染指令:
    • 传统渲染需要 CPU 提交 DrawMesh,而 GRD 允许 GPU 直接决定渲染哪些物体。
    • 适用于静态/半静态场景(如地形、建筑群)。
  • 支持动态更新:通过 Compute Shader 修改实例数据(位置、颜色等)。
  • 它在unity6正式推出,并关联dots。
  • 它优化的是CPU耗时,但也可能进而提高gpu的性能。因为需要提交给GPU的绘制调用更少。
  • 通过gpu resident drawer绘制的dc可以在framedebuger中的Hybrid Batch Group看到。
    【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

3、GPU Resident Drawer (GRD)适用情况

GPU Resident Drawer (GRD)加速渲染的程度取决于您的场景。在以下情况最有效

  • 场景很大。
  • 多个游戏对象使用相同的Mesh Renderer网格,因此 Unity 可以将它们分组到单个绘制调用中。

与播放模式或最终构建的项目相比,渲染速度在场景视图和游戏视图中通常会降低。

4、注意事项

4.1 GPU Resident Drawer仅适用于以下情况

  • Forward+渲染路径
  • 图形 API 和支持计算着色器的平台,但不包括 OpenGL ES。
  • 具有 Mesh Renderer 组件的游戏对象。

否则,Unity 将回退到在没有 GPU 实例化的情况下绘制游戏对象。

4.2 如果启用 GPU Resident Drawer,则会出现以下情况:

  • 构建时间更长,因为 Unity 会将所有 BatchRendererGroup 着色器变体编译到您的构建中。

4.3 选择性关闭GPU Resident Drawer

  • GPU Resident Drawer在LateUpdate之后但在渲染开始之前每帧发生一次。
  • 如果在渲染期间移动对象,可能数据会乱掉。
  • 可以对象添加DisallowGPUDrivenRendering组件让这些对象不采用gpu resident drawer。具体参考:使游戏对象与 URP 中的 GPU Resident Drawer 兼容

一、如何开启GPU Resident Drawer (GRD)

1、转到 Project Settings > Graphics,然后在 Shader Stripping 部分中,将 BatchRendererGroup Variants 设置为 Keep All。

【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

2、转到活动的 URP Asset并启用 SRP Batcher。

SRP Batcher 是一个渲染循环,可通过许多使用同一着色器变体的材质来加快场景中的 CPU 渲染速度。

在最新的unity中,你可能在URP Asset资源中找不到SRP Batcher选项。我们需要打开调试模式,就可看到了。
【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS
URP中Unity 默认就是启用 SRP Batcher,不建议禁用 SRP Batcher。但是,您可以暂时禁用 SRP Batcher 以进行调试。

3、转到活动的 URP Asset,将 GPU Resident Drawer 设置为 实例化绘图(Instanced Drawing)。

【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

4、双击 Renderer List 中的渲染器以打开 Universal Renderer,然后将 Rendering Path 设置为 Forward+。

【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

5、优化效果对比

可以看到绘制调用的Batches批次数量大幅减少
【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

6、开启GPU遮挡剔除,进一步优化

我们还能开启GPU遮挡剔除,来减少三角形数量,以及即将被渲染的顶点
【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

二、优化加快GPU Resident Drawer (GRD)的速度

以下操作可能会加快GPU Resident Drawer (GRD)的速度

1、禁用 Static Batching静态合批

如开启 GPU Resident Drawer 时下面提示的那样:使用GPU绘制提交摸式时,不建议使用静态批处理,如果在播放器设置中禁用静态批处理,则性能可能会提高
【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS
所以我们最好前往 Project Settings > Player,然后在 Other Settings 中禁用 Static Batching静态合批。
【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS

2、修改光照贴图设置

转到窗口 > 渲染> 光照 ,然后在光照贴图设置部分中启用 固定光照贴图大小 并禁用 使用 Mipmap 限制
【unity游戏开发——优化篇】在unity6中开启GPU Resident Drawer (GRD)一键提升URP游戏性能和FPS


专栏推荐

地址 【unity游戏开发入门到精通——C#篇】 【unity游戏开发入门到精通——unity通用篇】 【unity游戏开发入门到精通——unity3D篇】 【unity游戏开发入门到精通——unity2D篇】 【unity实战】 【制作100个Unity游戏】 【推荐100个unity插件】 【实现100个unity特效】 【unity框架/工具集开发】 【unity游戏开发——模型篇】 【unity游戏开发——InputSystem】 【unity游戏开发——Animator动画】 【unity游戏开发——UGUI】 【unity游戏开发——联网篇】 【unity游戏开发——优化篇】 【unity游戏开发——shader篇】 【unity游戏开发——编辑器扩展】 【unity游戏开发——热更新】 【unity游戏开发——网络】

完结

好了,我是向宇,博客地址:https://xiangyu.blog.csdn.net,如果学习过程中遇到任何问题,也欢迎你评论私信找我。

赠人玫瑰,手有余香!如果文章内容对你有所帮助,请不要吝啬你的点赞评论和关注,你的每一次支持都是我不断创作的最大动力。当然如果你发现了文章中存在错误或者有更好的解决方法,也欢迎评论私信告诉我哦!
在这里插入图片描述

幽默笑话