Если вы создаете собственный конвейер рендеринга на основе конвейера рендеринга с возможностью сценариев (SRP), ваш проект должен содержать:
- Сценарий, который наследуется от RenderPipelineAsset и переопределяет его метод
CreatePipeline()
. Этот скрипт определяет ваш ресурс конвейера рендеринга. - Скрипт, который наследуется от RenderPipeline и переопределяет его
Render()
метод. Этот скрипт определяет ваш экземпляр конвейера рендеринга, и в нем вы пишете свой собственный рендерингпроцесс вывода графики на экран (или на текстуру рендера). По умолчанию основная камера в Unity отображает изображение на экране. Подробнее
См. в коде Словарь. - Актив конвейера рендеринга, созданный вами из скрипта RenderPipelineAsset. Этот ресурс выступает в качестве фабричного класса для вашего экземпляра конвейера рендеринга.
Поскольку эти элементы очень тесно связаны между собой, их следует создавать одновременно.
Создание базового ресурса конвейера рендеринга и экземпляра конвейера рендеринга
В следующем примере показано, как создать сценарий для базового пользовательского ресурса конвейера рендеринга, который создает экземпляр экземпляра конвейера рендеринга, сценарий, определяющий экземпляр конвейера рендеринга, и сам актив конвейера рендеринга.
Создайте сценарий C# с именем ExampleRenderPipelineAsset.cs.
-
Скопируйте и вставьте следующий код в новый скрипт:
using UnityEngine; using UnityEngine.Rendering; // The CreateAssetMenu attribute lets you create instances of this class in the Unity Editor. [CreateAssetMenu(menuName = "Rendering/ExampleRenderPipelineAsset")] public class ExampleRenderPipelineAsset : RenderPipelineAsset { // Unity calls this method before rendering the first frame. // If a setting on the Render Pipeline Asset changes, Unity destroys the current Render Pipeline Instance and calls this method again before rendering the next frame. protected override RenderPipeline CreatePipeline() { // Instantiate the Render Pipeline that this custom SRP uses for rendering. return new ExampleRenderPipelineInstance(); } }
Создайте сценарий C# с именем ExampleRenderPipelineInstance.cs.
-
Скопируйте и вставьте следующий код в новый скрипт:
using UnityEngine; using UnityEngine.Rendering; public class ExampleRenderPipelineInstance : RenderPipeline { public ExampleRenderPipelineInstance() { } protected override void Render (ScriptableRenderContext context, Camera[] cameras) { // This is where you can write custom rendering code. Customize this method to customize your SRP. } }
В представлении «Проект» либо нажмите кнопку добавления (+), либо откройте контекстное меню и перейдите к пункту Создать, а затем выберите Визуализация > Пример ресурса конвейера рендеринга. Unity создает новый ассет Render Pipeline в представлении Project.
Создание настраиваемого объекта конвейера рендеринга и экземпляра конвейера рендеринга
По умолчанию конвейер рендеринга сохраняет ресурсырастущую библиотеку бесплатных и коммерческих ресурсов, созданных Unity и членами сообщества. . Предлагает широкий спектр ресурсов, от текстур, моделей и анимации до целых примеров проектов, руководств и расширений редактора. Подробнее
См. в Словарь информацию о том, какой экземпляр Render Pipeline использовать. для рендеринга, а также материалы по умолчанию и шейдерыпрограмма, работающая на графическом процессоре. Подробнее
См. в Словарь для использования в редакторе. В сценарии RenderPipelineAsset
вы можете расширить свой ресурс конвейера рендеринга, чтобы он хранил дополнительные данные, и вы можете иметь несколько разных ресурсов конвейера рендеринга с разными конфигурациями в своем проекте. Например, вы можете использовать Render Pipeline Asset для хранения данных конфигурации для каждого отдельного уровня оборудования. Конвейер рендеринга высокого разрешения (HDRP) и универсальный конвейер рендеринга (URP) включают примеры этого.
В следующем примере показано, как создать сценарий RenderPipelineAsset
, определяющий объект Render Pipeline Asset с общедоступными данными, которые можно задать для каждого экземпляра с помощью ИнспекторОкно Unity, в котором отображается информация о текущем выбранном игровом объекте, активе или настройках проекта, что позволяет вам проверять и редактировать значения. Дополнительная информация
См. в Словарь, а также экземпляр конвейера рендеринга, который получает актив конвейера рендеринга в его конструктор и использует данные из этого ресурса конвейера рендеринга.
Создайте сценарий C# с именем ExampleRenderPipelineAsset.cs.
-
Скопируйте и вставьте следующий код в новый скрипт:
using UnityEngine; using UnityEngine.Rendering; // The CreateAssetMenu attribute lets you create instances of this class in the Unity Editor. [CreateAssetMenu(menuName = "Rendering/ExampleRenderPipelineAsset")] public class ExampleRenderPipelineAsset : RenderPipelineAsset { // This data can be defined in the Inspector for each Render Pipeline Asset public Color exampleColor; public string exampleString; // Unity calls this method before rendering the first frame. // If a setting on the Render Pipeline Asset changes, Unity destroys the current Render Pipeline Instance and calls this method again before rendering the next frame. protected override RenderPipeline CreatePipeline() { // Instantiate the Render Pipeline that this custom SRP uses for rendering, and pass a reference to this Render Pipeline Asset. // The Render Pipeline Instance can then access the configuration data defined above. return new ExampleRenderPipelineInstance(this); } }
Создайте сценарий C# с именем ExampleRenderPipelineInstance.cs.
-
Скопируйте и вставьте следующий код в новый скрипт:
using UnityEngine; using UnityEngine.Rendering; public class ExampleRenderPipelineInstance : RenderPipeline { // Use this variable to a reference to the Render Pipeline Asset that was passed to the constructor private ExampleRenderPipelineAsset renderPipelineAsset; // The constructor has an instance of the ExampleRenderPipelineAsset class as its parameter. public ExampleRenderPipelineInstance(ExampleRenderPipelineAsset asset) { renderPipelineAsset = asset; } protected override void Render(ScriptableRenderContext context, Camera[] cameras) { // This is an example of using the data from the Render Pipeline Asset. Debug.Log(renderPipelineAsset.exampleString); // This is where you can write custom rendering code. Customize this method to customize your SRP. } }
В представлении «Проект» либо нажмите кнопку добавления (+), либо откройте контекстное меню и перейдите к пункту Создать, а затем выберите Визуализация > Пример ресурса конвейера рендеринга. Unity создает новый ассет Render Pipeline в представлении Project.