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

Вставьте проход рендеринга с Scriptable Renderer Feature в URP

Используйте ScriptableRenderFeature API для вставки Scriptable Render Pass в цикл рендеринга кадра Universal Render Pipeline (URP).

Выполните следующие действия:

  1. Создайте новый скрипт C#.

  2. Замените код классом, который наследуется от ScriptableRendererFeature class.

    using UnityEngine;
    using UnityEngine.Rendering.Universal;
    
    public class MyRendererFeature : ScriptableRendererFeature
    {
    }
    
  3. В этом классе переопределите Create метод. Например:

    public override void Create()
    {
    }
    

    URP вызывает методы Create при следующих событиях:

    • При первой загрузке компонента Scriptable Renderer Feature.
    • При включении или отключении компонента «Скриптовый рендерер».
    • Когда вы изменяете свойство в окне Inspector Функции Рендерера.
  4. В методе Create создайте экземпляр вашего Scriptable Render Pass и введите его в рендерер.

    Например, если у вас есть Scriptable Render Pass, называемый RedTintRenderPass:

    // Define an instance of the Scriptable Render Pass
    private RedTintRenderPass redTintRenderPass;
    
    public override void Create()
    {
        // Create an instance of the Scriptable Render Pass
        redTintRenderPass = new RedTintRenderPass();
    
        // Inject the render pass after rendering the skybox
        redTintRenderPass.renderPassEvent = RenderPassEvent.AfterRenderingSkybox;
    }
    

    Вы также можете использовать метод Create для инициализации любых других ресурсов, необходимых для Скриптового Рендерера, таких как материалы.

  5. Переопределение метода AddRenderPasses.

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
    }
    

    URP вызывает метод AddRenderPasses каждый кадр, один раз для каждой камеры. Не создавайте и не инстанцируйте ресурсы в этом методе.

  6. Используйте EnqueuePass API для введения Scriptable Render Pass в цикл рендеринга кадра.

    public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData)
    {
        renderer.EnqueuePass(redTintRenderPass);
    }
    

    Чтобы добавить проход рендеринга только для определенной камеры, используйте инструкцию if для проверки типа камеры. Например:

    if (renderingData.cameraData.cameraType == CameraType.Game)
    {
        renderer.EnqueuePass(redTintRenderPass);
    }
    

Теперь вы можете добавить компонент Scriptable Renderer к активному ресурсу URP. Дополнительные сведения см. в Как добавить компонент Renderer к Renderer.

Чтобы освободить какие-либо ресурсы, переопределите Dispose метод.

Пример

Для полного примера функции Scriptable Renderer с настраиваемым проходом рендеринга, использующим материал для блита, выполните следующие действия:

  1. Импорт примеров графа отображения URP. Дополнительные сведения см. в Импорт примера пакета в URP.
  2. В окне Project перейдите в Образцы > Universal Render Pipeline > <ваша версия> > URP RenderGraph Образцы > BlitWithMaterial.

Дополнительные ресурсы