版本:Unity 6(6000.0)
语言:英语
在 URP 中通过 BatchRendererGroup API 创建渲染器
在 URP 中使用 BatchRendererGroup API 注册网格和材质

在 URP 中初始化 BatchRendererGroup 对象

使用 BRG 进行渲染的第一步是创建一个 BatchRendererGroup 实例,并使用 OnPerformCulling 的实现对其进行初始化。

OnPerformCulling 回调是 BRG 的主要入口点,Unity 只要执行可见对象剔除,就会调用它。有关接收的参数的信息,请参见 OnPerformCulling。一般来说,OnPerformCulling 回调需要执行两项任务。

  • 根据 BatchCullingContext 参数确定哪些实例是可见的,以便进行可见性剔除。
  • 输出实际绘制命令以渲染这些实例。为此,需要写入 BatchCullingOutput 参数。

在简单的实现中,可以在 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 对象提供想要绘制的所有网格以及想要使用的所有材质。有关更多信息,请参见下一个主题 注册网格和材质

在 URP 中通过 BatchRendererGroup API 创建渲染器
在 URP 中使用 BatchRendererGroup API 注册网格和材质