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

Путь отложенного рендеринга во Встроенном Render Pipeline

На этой странице подробно описан путь рендеринга Deferred Shading во встроенном конвейере рендеринга Unity. Вводный технический обзор отложенного затенения см. в статье Википедия: отложенное затенение.

Обзор

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

Отложенное затенение имеет преимущество в том, что обработка освещения пропорциональна количеству пикселей, на которые свет падает. Это определяется размером объема света в Scene независимо от того, сколько GameObjects оно освещает. Поэтому производительность можно улучшить, сохраняя свет небольшим. Отложенное затенение также имеет очень последовательное и предсказуемое поведение. Эффект каждого света рассчитывается по пикселям, так что нет расчетов освещения, которые разбиваются на большие треугольники.

С другой стороны, отсроченное затенение не имеет реальной поддержки для выравнивания и не может работать с полупрозрачными GameObjects (они рендируются с помощью вперед rendering). Также не поддерживается флаг Mesh Renderer’s Receive Shadows, а маски выделения поддерживаются только ограниченным образом. Вы можете использовать только до четырех маск выделения. То есть, ваша маска слоя выделения должна содержать по крайней мере все слои минус четыре произвольных слоя, так что 28 из 32 слоев должны быть установлены. В противном случае вы получите графические артефакты.

Потребности в ресурсах

Для этого требуется видеокарта с поддержкой Multiple Render Targets (MRT), Shader Model 3.0 (или более поздней) и поддержкой Depth render textures. Большинство PC видеокарт, выпущенных после 2006 года, поддерживают отсроченное шейдинг, начиная с GeForce 8xxx, Radeon X2400, Intel G45.

На мобильных устройствах отсроченное затенение поддерживается на всех устройствах, работающих как минимум под управлением OpenGL ES 3.0.

Примечание: Отложенное отображение не поддерживается при использовании Ортографической проекции. Если Camera’s режим проекции устанавливается на Ортографический, Camera возвращается к рендерингу вперед.

Примечание: Отложенное рендеринг не поддерживает однопроходный стерео инстанционирование в Built-in Render Pipeline..

Соображения, касающиеся эффективности

Затраты на рендеринг реально-временных огней в отложенном затенении пропорциональны количеству пикселей, освещенных светом, и не зависит от сложности Scene. Таким образом, небольшие точечные огни или светодиоды очень дешевы в рендеринге, и если они полностью или частично закрыты Scene GameObjects, то они еще дешевле.

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

Детали осуществления

Объекты с шейдерами, не поддерживающими отложенное затенение, отображаются после завершения отложенного затенения с использованием Форвардное представление путь.

Расположение по умолчанию целей рендеринга (RT0 — RT4) в G-буфере перечислено ниже. Типы данных размещаются в различных каналах каждого целевого объекта рендеринга. Используемые каналы показаны в скобках.

  • Формат RT0, ARGB32: диффузный цвет (RGB), окклюзия (A).
  • RT1, ARGB32 формат: зеркальный цвет (RGB), гладкость (A).
  • Формат RT2, ARGB2101010: Всемирное космическое пространство нормальное (RGB), неиспользуемое (A).
  • Формат RT3, ARGB2101010 (не являющийся HDR) или ARGBHalf (HDR): выбросы + освещение + карты освещения + буфер зондов отражения.
  • Глубина + буфер шаблона.

Таким образом, расположение G-буфера по умолчанию составляет 160 бит/пиксель (неHDR) или 192 бит/пиксель (HDR).

При использовании Теневая маска или в режиме дистанционной маскировки теней для смешанного освещения, используется пятая цель:

  • Формат RT4, ARGB32: Значения светового затемнения (RGBA).

Таким образом, расположение G-буфера составляет 192 бита/пиксель (non-HDR) или 224 бита/пиксель (HDR).

Если аппаратное обеспечение не поддерживает пять одновременных целей рендеринга, то объекты, использующие маскировку теней, будут возвращаться к пути рендеринга вперед. Буфер эмиссии+освещения (RT3) логарифмически кодируется, чтобы обеспечить больший динамический диапазон, чем обычно возможно с текстурой ARGB32, когда Camera не использует HDR.

Обратите внимание, что когда Camera использует рендеринг HDR, для буфера Emission+lighting (RT3) не создаётся отдельной цели рендеринга; вместо этого цель рендеринга, в которую Camera рендеринг (то есть, та, которая передается эффектам изображения), используется как RT3.

Пропуск G-буфера

Пропуск G-буфера рендирует каждый GameObject один раз, в текстуры, которые хранят диффузные и зеркальные цвета, гладкость поверхности, нормы пространства мира, и эмиссию, окружающую среду, отражения и карты освещения. Unity устанавливает текстуры G-буфера как глобальные свойства шейдера для последующего доступа шейдерами. Имя свойств от _CameraGBufferTexture0 до _CameraGBufferTexture3.

Пропуск освещения

Пропуск освещения рассчитывает освещение на основе G-буфера и глубины. Освещение рассчитывается в экранном пространстве, так что время обработки не зависит от сложности Scene. Освещение добавляется в эмиссионный буфер.

Точечные огни и светильники, которые не пересекают ближнюю плоскость Camera, отображаются как формы 3D, с включенным тестом Z-буфера против Scene. Это делает частично или полностью закрытые точечные огни и светильники очень дешёвыми для отображения. Направленные огни и точечные или светильники, которые пересекают ближнюю плоскость, отображаются как полноэкранные квады.

Если свет имеет тени включены, то они также рендируются и применяются в этом проходе. Обратите внимание, что тени не приходят "бесплатно"; тени кастера должны быть рендируются и более сложный свет шейдер должен быть применен.

Единственной доступной моделью освещения является Стандартная. Если вам нужна другая модель освещения, вы можете создать настраиваемую версию файла отложенного шейдера по умолчанию. Выполните следующие действия:

  1. Скачать исходный код для встроенных Render Pipeline шейдеров.
  2. Найдите файл Internal-DeferredShading.shader в папке DefaultResourcesExtra.
  3. Отредактируйте файл, чтобы изменить модель освещения.
  4. В течение Project окно, добавить файл к вашему Активы папка, в папке с названием Ресурсы.
  5. В главном меню выберите Изменить > Project Настройки > Графика.
  6. В разделе Встроенные настройки шейдера установите Отложенный на Пользовательский шейдер, затем выберите файл шейдера.