Universal Render Pipeline (URP) – это конвейер рендеринга по умолчанию в Unity 6. В этом руководстве мы объясним, почему мы делаем URP по умолчанию, расскажем о ключевых особенностях и преимуществах этого Scriptable Render Pipeline (SRP), поделимся примерами студий, которые перевели свои проекты на URP, и объясним шаг за шагом, как Вы можете сделать то же самое со своими проектами.

Для более глубокого погружения в URP ознакомьтесь с полной электронной книгой ” Введение в URP для продвинутых создателей”.

Эволюция рендеринга: От встроенных конвейеров рендеринга к конвейерам рендеринга со сценарием

Охват платформы – одна из самых сильных сторон Unity. Идеальный вариант для почти всех игровых студий – создать игру один раз и эффективно развернуть ее на любом диапазоне платформ, который они выберут, от высокопроизводительных ПК до низкопроизводительных мобильных.

Встроенный конвейер рендеринга был разработан как готовое решение для всех платформ, поддерживаемых Unity. Он предлагает набор графических функций и удобен для использования с прямыми и отложенными путями рендеринга.

Однако, поскольку Unity продолжает добавлять поддержку большего количества платформ, мы столкнулись со следующими ограничениями во встроенном конвейере рендеринга:

  • Большая часть кода написана на C++ и не может быть изменена, что делает ее системой “черного ящика”.
  • Поток рендеринга и передачи рендеринга предварительно структурированы.
  • Алгоритм рендеринга жестко закодирован.
  • Неограниченная настройка затрудняет достижение хорошей производительности на всех платформах.
  • Он открывает обратные вызовы в коде рендеринга, которые запускают точки синхронизации в конвейере. Эти обратные вызовы предотвращают оптимизацию многопоточного рендеринга, позволяя изменять состояние в любой точке кадра динамически, обращаясь к C#.
  • Трудно кэшировать данные, чтобы управлять состоянием персистентности для пользовательских инъекций.

Решение: Конвейеры рендеринга со сценариями

Конвейер рендеринга высокой четкости (HDRP) и URP – это конвейеры рендеринга со сценариями (SRP). ПСП Unity были разработаны для поддержки эффективного многоплатформенного рабочего процесса, обеспечивая:

  • Интеллектуальное и надежное масштабирование для максимального количества аппаратных платформ, от высоко- до низкоуровневых устройств
  • Возможность настраивать процессы рендеринга с помощью C#, а не C++, что означает, что не нужно компилировать новый исполняемый файл для каждого изменения
  • Гибкость для поддержки эволюции архитектуры
  • Способность создавать четкую графику, которая работает на многих платформах

На изображении ниже показано, как работают SRP. Они используют C# для управления и настройки проходов рендеринга и управления рендерингом, а также HLSL-шейдеры, которые можно создавать с помощью удобных для художника инструментов, таких как Shader Graph. Шейдеры дают Вам доступ даже к API нижнего уровня и абстракциям машинного уровня.

Опытный разработчик может создать новый SRP с нуля или модифицировать URP или HDRP. Графический стек имеет открытый исходный код и доступен для использования на GitHub.

Хотя оба SRP обладают уникальными преимуществами, URP разработан для максимального охвата платформы, чтобы Вы могли принести великолепно выглядящую графику куда угодно. Давайте посмотрим подробнее.

6 причин перенести свой проект Unity на URP

  1. URP доступен для широкого спектра уровней мастерства.

    URP может быть настроен как художниками, так и техническими исполнителями, что обеспечивает большую гибкость при создании прототипов и отработке методов рендеринга для полноценного игрового производства.
  2. URP является расширяемым и настраиваемым.

    URP позволяет Вам изменять существующие возможности и расширять конвейер новыми, что делает его надежным выбором для опытных пользователей, включая создателей пакетов Asset Store и сторонних производителей, опытных разработчиков и профессиональные команды.

    Хотя низкоуровневый API рендеринга написан на C++ для повышения производительности, разработчик URP может написать простой скрипт на C#, который будет вызываться во время конвейера рендеринга, что позволяет выполнить высокоуровневую настройку без ущерба для производительности.
  3. URP предлагает несколько вариантов рендеринга.

    URP предоставляет универсальный рендерер, поддерживающий пути рендеринга Forward, Forward+ и Deferred, а также 2D-рендерер.

    Вы можете расширить эти рендеры дополнительными функциями и скриптовыми передачами рендеринга.

    Функция Render Objects (Рендеринг объектов) может использоваться для рендеринга объектов из заданной маски слоя на разных этапах конвейера рендеринга. Он также позволяет переопределять состояние материала и другие состояния рендеринга при визуализации этих объектов, что позволяет настраивать рендеринг без кода.

    URP может быть расширен пользовательскими рендерами для удовлетворения специфических потребностей. Unity 6 представляет Render Graph– это инструмент, который позволяет Вам получать доступ к различным буферам, используемым для рендеринга кадра, и манипулировать ими. Используя рабочий процесс рендеринга, его можно добавить на любом этапе конвейера рендеринга.
  4. URP улучшает разработку 2D игр.

    URP обеспечивает оптимизированную производительность и гибкость, что делает его идеальным для мобильных и высокопроизводительных платформ. Он поддерживает передовые эффекты освещения, теней и постобработки, повышая визуальное качество 2D-игр без ущерба для производительности.

    Кроме того, настраиваемые параметры рендеринга и шейдерные возможности URP позволяют Вам точно настроить внешний вид Ваших игр, чтобы они выглядели отполированными и профессиональными. Это делает URP ценным инструментом для создания визуально привлекательных, плавно работающих 2D игр.
  5. URP совместим с новейшими технологиями для художников.

    URP поддерживает новейшие инструменты для художников, такие как Shader GraphVFX Graph и Rendering Debugger.
  6. Вы можете добиться лучшей производительности с помощью URP.

    URP создан с учетом производительности и имеет множество инструментов, позволяющих найти баланс между точностью и частотой кадров на широком спектре устройств.

    – URP очень эффективно оценивает освещение в реальном времени. При рендеринге Forward все освещение оценивается за один проход. Forward+ улучшает стандартный рендеринг Forward, отбирая свет пространственно, а не по объекту. Это увеличивает общее количество ламп, которые можно использовать для визуализации кадра. При отложенном рендеринге он поддерживает Native RenderPass API, позволяя объединить проходы G-буфера и освещения в один проход рендеринга.

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

    – URP поставляется с интегрированным стеком постобработки, который обеспечивает более высокую производительность по сравнению со встроенным конвейером рендеринга. Используя фреймворк Volume, Вы можете создавать эффекты постобработки, зависящие от положения камеры, без написания какого-либо кода.

    – Unity 6 Preview представляет целый ряд обновлений URP, включая улучшения для CPU и GPU при рисовании сетки; SRP Batcher, который обеспечивает меньшее количество вызовов рисования и улучшает обработку глубины; а также GPU Resident Drawer и GPU Occlusion Culling, которые могут значительно уменьшить количество вызовов рисования для некоторых сцен.

    Хотя большинство проектов Unity теперь строятся на URP или HDRP, встроенный конвейер рендеринга по-прежнему доступен в Unity 6.

Как добавить URP в существующий проект Built-in Render Pipeline

В этом разделе мы покажем Вам, как преобразовать существующий проект, использующий встроенный конвейер рендеринга, в URP.

Важно: Перед выполнением шагов в этом разделе обязательно сделайте резервную копию проекта с помощью системы контроля исходного кода. Этот процесс преобразует активы, и Unity не предоставляет возможности отмены. Если Вы используете контроль исходного кода, Вы сможете при необходимости вернуться к предыдущим версиям активов.

Если Вы обновляете существующий проект Built-in Render Pipeline, Вам необходимо добавить пакет URP в свой проект.

Перейдите в Window > Package Manager и нажмите на выпадающий список Packages , чтобы добавить URP в свой проект. Убедитесь, что выбрали Unity Registry, а затем Universal RP. Нажмите Загрузить в правом нижнем углу окна, если пакет URP еще не установлен на Вашем компьютере для разработки. После загрузки нажмите Установить.

Чтобы создать ассет URP, щелкните правой кнопкой мыши в окне проекта и выберите Create > Rendering > URP Asset (с Universal Renderer). Назовите актив.

Помните: Если Вы создаете новый проект с использованием шаблонов Universal Render Pipeline или 3D (URP), эти активы URP уже доступны в проекте. Вместо того, чтобы создавать один актив URP, URP использует два файла, каждый из которых имеет расширение Asset.

Один из них называется UniversalRP_Renderer,- это актив данных рендерера, который Вы можете использовать для фильтрации слоев, с которыми работает рендерер, и перехвата конвейера рендеринга, чтобы настроить рендеринг сцены. Таким образом, Вы сможете облегчить создание высококачественных эффектов.

Кроме того, UniversalRP_Renderer управляет высокоуровневой логикой рендеринга и передает данные для URP. Он поддерживает прямые и отложенные пути, а также 2D-рендерер, который позволяет использовать такие функции, как 2D Lights2D Shadows и Light Blend Styles. Вы даже можете расширить URP, чтобы создать свои собственные рендеры.

Другой ассет URP служит для управления настройками Quality, Lighting, Shadows и Post-processing. Вы можете использовать различные активы URP для управления настройками качества.

Этот ассет настроек связан с ассетом данных рендерера через список рендереров. Когда Вы создаете новый ассет URP, ассет настроек будет иметь список Renderer List, содержащий единственный элемент – ассет данных Renderer, созданный в то же время, установленный по умолчанию. Вы можете добавить в этот список альтернативные активы данных рендерера.

Рендерер по умолчанию используется для всех камер, включая вид сцены. Камера может переопределить рендерер по умолчанию, выбрав другой рендерер из списка рендереров. При необходимости это можно сделать с помощью скрипта.

Несмотря на выполнение этих шагов по созданию URP Asset, открытая сцена в представлении Scene или Game все равно будет использовать встроенный конвейер рендеринга. Вам необходимо выполнить последний шаг, чтобы перейти на URP: Перейдите в меню Редактирование > Настройки проекта и откройте панель Графика. Нажмите на маленькую точку рядом с None (Render Pipeline Asset). На открытой панели выберите UniversalRP.

Появится предупреждение о необходимости переключения, но Вы можете просто нажать кнопку Continue. Поскольку в Вашем проекте еще нет контента, изменение конвейера рендеринга произойдет практически мгновенно. Теперь Вы готовы к использованию URP.

Преобразование сцен существующего проекта

Выполнив описанные выше действия, Вы обнаружите, что Ваши прекрасные сцены вдруг окрасились в пурпурный цвет. Это происходит потому, что шейдеры, используемые материалами в проекте Built-in Render Pipeline, не поддерживаются в URP. К счастью, существует метод, позволяющий вернуть Вашим сценам их первоначальное качество.

Перейдите в меню Window > Rendering > Render Pipeline Converter. Выберите Преобразовать встроенный в 2D (URP) для 2D проекта или Встроенный в URP для 3D проекта. Предполагая, что Ваш проект 3D, Вам нужно будет выбрать соответствующие конвертеры:

  • Настройки рендеринга: Выберите эту опцию, чтобы создать несколько активов настроек конвейера рендеринга, которые будут максимально соответствовать встроенным настройкам качества конвейера рендеринга. Это позволит Вам более эффективно тестировать различные уровни качества.
  • Обновление материала: Используйте эту функцию для преобразования материалов из встроенного конвейера рендеринга в URP.
  • Конвертер анимационных клипов: Это позволяет конвертировать анимационные ролики. Он запускается после завершения работы конвертера Material Upgrade.
  • Только для чтения Преобразователь материалов: Это преобразует предварительно собранные, доступные только для чтения Материалы, включенные в проект Unity. Он индексирует проект и создает временный файл .index. Обратите внимание, что это может занять значительное время.

Преобразование пользовательских шейдеров

Пользовательские шейдеры не преобразуются с помощью конвертера Material Upgrade. Использование Shader Graph часто является самым быстрым способом обновления пользовательского шейдера до URP.

Существует несколько различных шейдеров URP, включая:

  • Универсальный трубопровод для рендеринга/Lit: Этот шейдер физического рендеринга (PBR), похожий на встроенный стандартный шейдер, может использоваться для представления большинства реальных материалов. Он поддерживает все функции стандартных шейдеров с металлическим и спекулярным рабочим процессом.
  • Universal Render Pipeline/Simple Lit: Эта модель использует модель Блинна-Фонга и подходит для мобильных устройств низкого класса или игр, в которых не используются рабочие процессы PBR.
  • Universal Render Pipeline/Baked Lit: Используйте этот шейдер для стилизованных игр или приложений, в которых требуется только запеченное освещение с помощью лайтмаповсветовых зондов и адаптивных зондовых объемов Unity 6. Этот шейдер не использует Physically Based Shading и не имеет освещения в реальном времени, поэтому все ключевые слова и варианты шейдера, относящиеся к реальному времени, удалены из кода шейдера, что ускоряет его вычисление.
  • Универсальный трубопровод/комплекс Lit: Complex Lit Shader содержит все функции Lit Shader и добавляет расширенные возможности материала. Некоторые функции этого шейдера могут быть значительно более ресурсоемкими и требовать оборудования Unity Shader Model 4.5.
  • Универсальный трубопровод/неосвещенный: Это GPU-производительный шейдер, который не использует уравнения освещения.
  • Универсальный рендер Трубопровод/Рельеф/Свет: Он подходит для использования с пакетом Terrain Tools.
  • Универсальный конвейер рендеринга/Частицы/Лит: Этот шейдер частиц использует модель освещения PBR.
  • Универсальный конвейер рендеринга/частицы/неосвещенность: Этот шейдер частиц без подсветки является легким для GPU.

Хотя Simple Lit заменяет многие устаревшие или мобильные шейдеры, производительность не такая же. Устаревшие/мобильные шейдеры оценивают освещение лишь частично, в то время как Simple Lit учитывает все освещение, как определено в URP Asset.

Обратитесь к этой таблице в нашей документации по URP, чтобы увидеть, как каждый шейдер URP соотносится с его эквивалентом в Встроенном Конвейере Рендеринга.

Выбрав один или несколько конвертеров, нажмите Инициализировать конвертеры или Инициализировать и конвертировать. Какой бы вариант Вы ни выбрали, проект будет отсканирован, и те активы, которые нуждаются в преобразовании, будут добавлены на каждую из панелей конвертера.

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

Если Вы выберете Initialize And Convert, преобразование начнется автоматически после инициализации конвертеров. После завершения работы Вам может быть предложено снова открыть сцену, активную в Редакторе.

Залишити відповідь

Ваша e-mail адреса не оприлюднюватиметься. Обов’язкові поля позначені *