Вставьте проход рендеринга с использованием RenderPipelineManager API в URP
Чтобы вставить пользовательский проход рендеринга в цикл рендеринга в универсальном конвейере рендеринга (URP), подпишитесь на одно из событий в RenderPipelineManager API и используйте EnqueuePass API.
Например, вы можете рендировать дополнительные камеры для рендеринга текстур и использовать эти текстуры для таких эффектов, как планарные отражения или изображения камер наблюдения.
Примечание: RenderPipelineManager события активируются только если камера активна.
Если вы хотите применить проход рендеринга к нескольким камерам, сценам или всему проекту, рекомендуется использовать вместо этого функцию Scriptable Renderer Feature. Дополнительные сведения см. в Вставьте пользовательский проход рендеринга с помощью функции Scriptable Renderer Feature.
Чтобы использовать RenderPipelineManager API, выполните следующие действия:
-
Присоедините новый скрипт
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); } }Более подробную информацию о написании прохода рендеринга см. в Написание прохода рендеринга с использованием системы графов рендеринга.
-
Подписать метод на одно из событий в
RenderPipelineManagerAPI. Например:private void OnEnable() { ... // Call the InjectRenderPass method when the beginCameraRendering event is raised. RenderPipelineManager.beginCameraRendering += InjectRenderPass; } -
В подписанном методе используйте метод
EnqueuePassAPI, чтобы ввести пользовательский проход рендеринга в цикл рендеринга 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); } } -
Отписаться от события в методе
OnDisable. Например:public class InjectPass : MonoBehaviour { ... private void OnDisable() { RenderPipelineManager.beginCameraRendering -= InjectRenderPass; } }