Version: 2023.2
Creating a renderer with BatchRendererGroup
Registering meshes and materials

Initializing a BatchRendererGroup object

The first step to render using BRG is to create an instance of BatchRendererGroup and initialize it with an implementation of OnPerformCulling.

The OnPerformCulling callback is the main entry point of BRG and Unity calls it whenever it culls visible objects. For information on the parameters it receives, see OnPerformCulling. Typically, there are two tasks that the OnPerformCulling callback needs to perform:

  • Visibility culling to determine which of its instances are visible based on the BatchCullingContext parameter.
  • Output the actual draw commands to render those instances. To do this you write to the BatchCullingOutput parameter.

In simple implementations, you can do these tasks directly in the OnPerformCulling callback, but for high-performance implementations, it’s best practice to do most of this work in Burst jobs. The OnPerformCulling callback should return a JobHandle that completes after the jobs write the output into the BatchCullingOutput parameter. If your implementation doesn’t use jobs, you can return an empty JobHandle.

See the following code sample for an example of how to create a BatchRendererGroup object and initialize it with the most minimum OnPerformCulling callback that compiles.

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();
    }
}

Before you use OnPerformCulling to create draw commands, you need to provide your BatchRendererGroup object any meshes you want it to draw, and any materials you want it to use. For more information, see the next topic, Registering meshes and materials.

Creating a renderer with BatchRendererGroup
Registering meshes and materials
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961