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

Вставьте проход рендеринга с использованием RenderPipelineManager API в URP

Чтобы вставить пользовательский проход рендеринга в цикл рендеринга в универсальном конвейере рендеринга (URP), подпишитесь на одно из событий в RenderPipelineManager API и используйте EnqueuePass API.

Например, вы можете рендировать дополнительные камеры для рендеринга текстур и использовать эти текстуры для таких эффектов, как планарные отражения или изображения камер наблюдения.

Примечание: RenderPipelineManager события активируются только если камера активна.

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

Чтобы использовать RenderPipelineManager API, выполните следующие действия:

  1. Присоедините новый скрипт MonoBehaviour к GameObject, а затем создайте экземпляр пользовательского прохода рендеринга. Например:

    public class InjectPass : MonoBehaviour
    {
        // Declare a custom render pass
        private ExampleRenderPass exampleRenderPass;
    
        private void OnEnable()
        {
            // Create the custom render pass
            exampleRenderPass = new ExampleRenderPass(settings);
        }
    }
    

    Более подробную информацию о написании прохода рендеринга см. в Написание прохода рендеринга с использованием системы графов рендеринга.

  2. Подписать метод на одно из событий в RenderPipelineManager API. Например:

        private void OnEnable()
        {
            ...
            // Call the InjectRenderPass method when the beginCameraRendering event is raised.
            RenderPipelineManager.beginCameraRendering += InjectRenderPass;            
        }
    
  3. В подписанном методе используйте метод EnqueuePass API, чтобы ввести пользовательский проход рендеринга в цикл рендеринга URP.

    public class InjectPass : MonoBehaviour
    {
        ...
    
        // Add the method that Unity calls after the beginCameraRendering event is raised.
        // The method must accept the ScriptableRenderContext and Camera parameters the event delegate defines.
        private void InjectRenderPass(ScriptableRenderContext context, Camera cam)
        {
            ...
            // Use the EnqueuePass API to inject the custom render pass.
            cam.GetUniversalAdditionalCameraData().scriptableRenderer.EnqueuePass(exampleRenderPass);
        }
    }
    
  4. Отписаться от события в методе OnDisable. Например:

    public class InjectPass : MonoBehaviour
    {
        ...
    
        private void OnDisable()
        {
            RenderPipelineManager.beginCameraRendering -= InjectRenderPass;
        }
    }
    

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