使用 BRG 进行渲染的第一步是创建一个 BatchRendererGroup 实例,并使用 OnPerformCulling 的实现对其进行初始化。
OnPerformCulling 回调是 BRG 的主要入口点,Unity 只要执行可见对象剔除,就会调用它。有关接收的参数的信息,请参见 OnPerformCulling。一般来说,OnPerformCulling 回调需要执行两项任务。
在简单的实现中,可以在 OnPerformCulling 回调中直接执行这些任务,但是,对于高性能实现,最好在 Burst 作业中执行大部分工作。OnPerformCulling 回调应返回一个 JobHandle,在作业将输出写入 BatchCullingOutput 参数后,该 JobHandle 完成。如果实现未使用作业,则可以返回一个空的 JobHandle。
请参见以下代码示例,了解如何创建 BatchRendererGroup 对象并使用可编译的最简 OnPerformCulling 回调对其进行初始化。
using System;
using Unity.Collections;
using Unity.Collections.LowLevel.Unsafe;
using Unity.Jobs;
using UnityEngine;
using UnityEngine.Rendering;
public class SimpleBRGExample : MonoBehaviour
{
private BatchRendererGroup m_BRG;
private void Start()
{
m_BRG = new BatchRendererGroup(this.OnPerformCulling, IntPtr.Zero);
}
private void OnDisable()
{
m_BRG.Dispose();
}
public unsafe JobHandle OnPerformCulling(
BatchRendererGroup rendererGroup,
BatchCullingContext cullingContext,
BatchCullingOutput cullingOutput,
IntPtr userContext)
{
// This example doesn't use jobs, so it can return an empty JobHandle.
// Performance-sensitive applications should use Burst jobs to implement
// culling and draw command output. In this case, this function would return a
// handle here that completes when the Burst jobs finish.
return new JobHandle();
}
}
在使用 OnPerformCulling 来创建绘制命令之前,需要向 BatchRendererGroup 对象提供想要绘制的所有网格以及想要使用的所有材质。有关更多信息,请参见下一个主题 注册网格和材质。