Вставьте проход рендеринга с Scriptable Renderer Feature в URP
Используйте ScriptableRenderFeature API для вставки Scriptable Render Pass в цикл рендеринга кадра Universal Render Pipeline (URP).
Выполните следующие действия:
Создайте новый скрипт C#.
-
Замените код классом, который наследуется от
ScriptableRendererFeatureclass.using UnityEngine; using UnityEngine.Rendering.Universal; public class MyRendererFeature : ScriptableRendererFeature { } -
В этом классе переопределите
Createметод. Например:public override void Create() { }URP вызывает методы
Createпри следующих событиях:- При первой загрузке компонента Scriptable Renderer Feature.
- При включении или отключении компонента «Скриптовый рендерер».
- Когда вы изменяете свойство в окне Inspector Функции Рендерера.
-
В методе
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для инициализации любых других ресурсов, необходимых для Скриптового Рендерера, таких как материалы. -
Переопределение метода
AddRenderPasses.public override void AddRenderPasses(ScriptableRenderer renderer, ref RenderingData renderingData) { }URP вызывает метод
AddRenderPassesкаждый кадр, один раз для каждой камеры. Не создавайте и не инстанцируйте ресурсы в этом методе. -
Используйте
EnqueuePassAPI для введения 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 с настраиваемым проходом рендеринга, использующим материал для блита, выполните следующие действия:
- Импорт примеров графа отображения URP. Дополнительные сведения см. в Импорт примера пакета в URP.
- В окне Project перейдите в Образцы > Universal Render Pipeline > <ваша версия> > URP RenderGraph Образцы > BlitWithMaterial.