GPU Resident Drawer 会自动的使用BatchRendererGroupAPI进行GPU实例化渲染,来减少渲染中draw calls的数量和CPU的处理时间。更进一步的信息,可以参考How BatchRendererGroup works。在小游戏平台下的变化,参考小游戏 GPU Resident Drawer。
当前GPU Resident Drawer适用的条件有以下几个方面:
否则,引擎将不使用GPU实例化来绘制游戏对象。
如果开启了GPU Resident Drawer的功能,那么会有以下限制:
BatchRendererGroup的着色器变体,同时编译产物也会更大。MotionVectors,例如TAA等利用到MotionVectors的功能暂时无法支持。请按照以下步骤操作:
一. 在Edit > Project Settings > Quality, 双击Render Pipeline Asset的属性值,在Inspector中配置URP资产管线。
二. 在Rendering部分,将GPU Resident Darwer的值设为Instanced Drawing。
三. 在Project Settings > Graphics的Shader Stripping部分,将BatchRendererGroup Variants值设为Keep All
四. 在Rendering部分,启用SRP Batcher。如果看不到该属性,打开菜单Edit > Preferences, 在Core Render Pipeline中将Visibility设置为All Visible。
五. 在Rendering部分,双击Renderer List中的renderer,将Rendering Path值设为Forward+或Forward。
六. 参数调节
GRD Data Storage表示GPU Resident Drawer的数据存储方式,Texture 和 SSBO。Texture对平台的兼容性最好,对所有平台都支持;而SSBO在支持的平台上的数据频繁更新的开销更小,但不支持OpenGL、OpenGL ES、WebGL。
BRG Shader Variant Strip表示对应变体的剔除逻辑,可以减小打包后的包体大小。Keep SSBO or Uniform为保留使用SSBO或者Uniform的BRG的变体,剔除掉使用Texture的Shader变体;Keep Texture为保留使用Texture的BRG变体,剔除掉使用SSBO或者Uniform的变体;而Keep All则同时保留两类变体;注意这里的选项需与上面的GRD Data Storage选项对应
如果每帧更改或创建物体,GPU Resident Drawer也会跟随这些变化进行更新操作。 要包含或排除使用 GPU Resident Drawer 的游戏对象,参考:GameObject兼容GPU Resident Drawer。
为了分析GPU Resident Drawer的结果,可以参考如下方式:
GPU Resident Drawer能为渲染加速多少取决于场景的情况。在以下条件下,GPU Resident Drawer能更有效率:
在场景界面或者游戏界面,渲染通常提升的不如在播放时或者最终生成的项目那么多。
下面的设置或许能帮助进一步加速GPU Resident Drawer:
GPU Resident Drawer部分限制: