Unity 6.3
0 онлайн 13 гостей 3 в системе
Вход

Инициализация объекта BatchRendererGroup в URP

Первым шагом для рендеринга с помощью BRG является создание экземпляра BatchRendererGroup и инициализация его с реализацией OnPerformCulling.

Обратный вызов OnPerformCulling является основной точкой входа в BRG, и Unity вызывает его каждый раз, когда он удаляет видимые объекты. Информацию о параметрах, которые он получает, см. в OnPerformCulling. Обычно есть две задачи, которые должен выполнять обратный вызов OnPerformCulling:

  • Выбор видимости для определения того, какие из его экземпляров видны на основе параметра BatchCullingContext.
  • Выдайте фактические команды отрисовки, чтобы отобразить эти экземпляры. Для этого запишите в параметры BatchCullingOutput.

В простых реализациях вы можете выполнять эти задачи непосредственно в обратном вызове OnPerformCulling, но для высокопроизводительных реализаций лучше всего выполнять большую часть этой работы в заданиях Burst. Обратный вызов OnPerformCulling должен возвращать JobHandle, который завершается после того, как задания записывают выход в параметр BatchCullingOutput. Если ваша реализация не использует задания, вы можете возвращать пустое 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 любые меши, которые он должен рисовать, и любые материалы, которые он должен использовать. Дополнительные сведения см. в следующем разделе, Регистрация мешей и материалов.