BatchRendererGroup(BRG)解释
BatchRendererGroup(BRG)是一个API,专为使用可脚本渲染管线(Scriptable Render Pipeline, SRP)和SRP Batcher的项目提供高性能的自定义渲染功能。
BRG是完成以下任务的理想工具:
- 渲染DOTS实体:例如,Unity的Hybrid Renderer使用BRG来完成这一任务。
- 渲染大量环境对象:当使用单独的GameObjects会过于消耗资源时,可以使用BRG。例如,程序化放置的植物或岩石。
- 渲染自定义地形补丁:可以使用不同的网格或材料来显示不同级别的细节。
以下表格列出了本节文档中的主题并进行了描述:
主题 描述
How BatchRendererGroup works 解释BRG如何渲染到屏幕,并引入BRG特有的概念。
Getting started with BatchRendererGroup 描述BRG的要求和兼容性,并解释如何设置项目以支持BRG。
Creating a renderer with BatchRendererGroup 讲解如何使用BRG创建一个简单的自定义渲染器。
DOTS Instancing shaders 描述新的数据导向方式,通过这种方式,着色器可以加载实例数据。
BRG为开发者提供了一个强大的工具,允许他们更高效地渲染复杂的场景,同时减少资源的消耗。特别是在处理大量相似或重复的物体时,BRG可以显著提高性能。
How BatchRendererGroup works
BatchRendererGroup(BRG)是Unity中用于优化渲染性能的一个组件。当你需要在屏幕上渲染内容时,BRG会生成一种特殊的“绘制命令”(draw commands)。这些绘制命令包含了Unity为了高效创建优化后的实例化绘制调用(instanced draw calls)所需的所有信息。
以下是BatchRendererGroup如何工作的详细解释:
- 生成绘制命令:
○ 当场景中的物体需要被渲染时,BRG会生成绘制命令。这些命令包含了物体的位置、形状、材质等信息。
- 使用过滤器设置(Filter Settings)确定渲染时机:
○ BRG使用过滤器设置来确定何时渲染绘制命令中的实例。这些设置不仅控制实例本身的渲染,还控制每个实例的某些方面,如阴影和运动向量。
- 使用绘制范围(Draw Ranges)应用过滤器设置:
○ 由于相同的过滤器设置通常可以应用于大量的绘制命令,BRG使用绘制范围来将过滤器设置应用于一系列的绘制命令。绘制范围结合了连续的绘制命令和应用于它们的过滤器设置实例。如果过滤器设置确定Unity不应该渲染某个绘制命令,那么Unity可以高效地跳过该范围内所有绘制命令的渲染。
- 绘制命令的灵活性:
○ 在BRG中,对哪些实例应该包含在哪个绘制调用中并没有限制。这意味着可以使用相同的实例(具有相同的实例索引和批次ID)多次渲染,但每次使用不同的网格和材质。例如,当使用不同的子网格和材质进行渲染时,可以使用相同的实例索引来共享属性,如变换矩阵。
- 技术限制:
○ 在大多数情况下,Unity会将每个兼容的DrawRenderers调用在脚本化渲染管线中渲染为一个单一的、平台级别的实例化绘制调用。但是,当图形API的绘制调用大小限制小于绘制命令的visibleCount时,Unity会将绘制命令分割成多个实例化绘制调用。
总的来说,BatchRendererGroup是Unity中用于优化实例化渲染的一个工具,通过生成包含所需信息的绘制命令,以及使用过滤器设置和绘制范围来高效地控制渲染过程。
Getting started with BatchRendererGroup
BatchRendererGroup(BRG)是Unity中用于优化渲染性能的一个组件。它通过将多个渲染指令(draw calls)组合成批处理渲染指令来减少绘制调用次数,从而提高渲染效率。以下是BatchRendererGroup的工作原理的详细解释:
渲染指令(Draw Commands)
为了将内容渲染到屏幕上,BatchRendererGroup会生成渲染指令。这些渲染指令是BRG特有的概念,包含了Unity为了高效创建优化后的实例化绘制调用所需的所有信息。
过滤器设置(Filter Settings)
为了确定何时渲染渲染指令中的实例,BRG使用过滤器设置。这些设置不仅控制何时渲染实例本身,还控制何时渲染每个实例的某些方面,如阴影和运动向量。
绘制范围(Draw Ranges)
由于相同的过滤器设置通常可以应用于大量的渲染指令,因此BRG使用绘制范围来将过滤器设置应用于一系列的渲染指令。绘制范围将一系列连续的渲染指令与一个过滤器设置实例组合在一起。如果过滤器设置确定Unity不应渲染某些渲染指令,那么绘制范围特别有用,因为这使得Unity能够高效地跳过该范围内所有渲染指令的渲染。
绘制调用中的实例
在绘制调用中,哪些实例被包含在内没有限制。可以使用相同的实例(具有相同的实例索引和批次ID)多次渲染,但使用不同的网格和材质。例如,这可以用于使用不同的子网格和材质进行绘制,同时使用相同的实例索引来共享属性,如变换矩阵。
技术限制
在大多数情况下,Unity会将一个渲染指令作为单个平台级别的实例化绘制调用进行渲染,用于每个兼容的DrawRenderers调用在脚本渲染管线中。但是,当图形API的绘制调用大小限制低于渲染指令的visibleCount时,这是不可能的。在这些情况下,Unity会将渲染指令分割成多个实例化绘制调用。
总之,BatchRendererGroup通过优化渲染指令和实例化渲染,帮助Unity更有效地管理渲染过程,从而提高游戏或应用程序的性能。
开始使用BatchRendererGroup
这一页将解释什么是渲染管线,哪些平台支持BatchRendererGroup(BRG),并说明如何设置项目以支持BRG。
要求和兼容性
渲染管线兼容性
下面的表格展示了哪些渲染管线支持BRG。
功能名称 内置渲染管线 通用渲染管线 (URP) 高清渲染管线 (HDRP) 自定义 SRP
BatchRendererGroup 否 是 (1) 是 (1) 是 (1)
注意:
● 如果项目使用SRP Batcher。
平台兼容性
Unity在以下平台上支持BRG:
● 使用DirectX 11的Windows
● 使用DirectX 12的Windows
● 使用Vulkan的Windows
● 通用Windows平台
● 使用Vulkan的Linux
● 使用Metal的macOS
● iOS
● 使用Vulkan的Android
● PlayStation 4
● PlayStation 5
● Xbox One
● Xbox Series X 和 Xbox Series S
● Nintendo Switch
● Google Stadia
为BatchRendererGroup设置项目
在使用BRG之前,您的项目必须支持它。BRG要求您的项目:
● 使用SRP Batcher。要启用SRP Batcher,请参阅“使用SRP Batcher”。
● 保留BRG shader变体。为此,选择“编辑”>“项目设置”>“图形”,并将BatchRendererGroup变体设置为“保留所有”。
● 如果您的项目使用URP,则最佳实践是禁用“剥离未使用的变体全局设置”。这有助于避免Unity剥离必要的DOTS Instancing变体时出现问题。有关更多信息,请参阅“DOTS Instancing shaders”。要找到此设置,请选择“编辑”>“项目设置”>“URP全局设置”。
● 允许不安全代码。为此,启用“允许‘不安全’代码播放器设置”。
注意:BatchRendererGroup使用DOTS Instancing shaders,但它不需要任何DOTS包。名称反映了加载实例数据的新数据导向方式,并有助于与现有Hybrid Renderer兼容的shader进行向后兼容。
有关如何使用BRG创建基本渲染器的信息,请参阅“使用BatchRendererGroup创建渲染器”。