Version: 2023.2
言語: 日本語
BatchRendererGroup でレンダラーを作成する
メッシュとマテリアルの登録

BatchRendererGroup オブジェクトの初期化

BRG を使用してレンダリングを行う最初のステップは、BatchRendererGroup のインスタンスを作成し、OnPerformCulling の実装で初期化することです。

OnPerformCulling コールバックは BRG のメインエントリーポイントで、Unity は可視オブジェクトをカリングするたびにこれを呼び出します。このコールバックが受け取るパラメーターについては、OnPerformCulling を参照してください。通常、OnPerformCulling コールバックが実行する必要があるタスクは、以下の 2 つです。

  • BatchCullingContext パラメーターに基づいて可視のインスタンスを決定する可視性カリング。
  • それらのインスタンスをレンダリングする実際の描画コマンドの出力。これを行うためには BatchCullingOutput パラメーターに書き込みをします。

単純な実装では OnPerformCulling コールバックで直接これらのタスクを実行できますが、高性能な実装ではこの作業のほとんどを Burst ジョブで実行するのが効率的です。OnPerformCulling コールバックは、ジョブが 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)
    {
        // この例はジョブを使用していないので、空の JobHandle を返します。
        // パフォーマンス負荷の高いアプリケーションの場合は、Burst ジョブを使用して
        // カリングと描画コマンドの出力を実装することが推奨されます。その場合、この関数は
        // Burst ジョブの終了時に完了するハンドルをここに返します。
        return new JobHandle();
    }
}

OnPerformCulling を使用して描画コマンドを作成する前に、描画したいメッシュと使用したいマテリアルをすべて BatchRendererGroup オブジェクトに提供する必要があります。詳細は次のトピック メッシュとマテリアルの登録 を参照してください。

BatchRendererGroup でレンダラーを作成する
メッシュとマテリアルの登録