Инициализация объекта 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 любые меши, которые он должен рисовать, и любые материалы, которые он должен использовать. Дополнительные сведения см. в следующем разделе, Регистрация мешей и материалов.