Расположение G-буфера в путях отображения Deferred и Deferred+ в URP
На следующей иллюстрации показана структура данных для каждого пикселя целей рендеринга, которые Unity использует в G-буфере в пути рендеринга Deferred и Deferred+.
Unity использует передний проход рендеринга для рендеринга следующих шейдеров по умолчанию:
- Complex Lit: модель освещения слишком сложна, чтобы поместиться в G-буфер.
- Baked Lit или Lit: Нет освещения в реальном времени, поэтому Unity рендирует данные в поле Emissive/GI/Lighting G-буфера. Это быстрее, чем использование отложенного прохода рендеринга.
Альбедо (sRGB)
Это поле содержит цвет альбедо в 24-битном формате sRGB.
MaterialFlags
Это поле является битовым полем, которое содержит флаги материалов:
- Бит 0, ReceiveShadowsOff: если установлен, пиксель не получает динамических теней.
- Бит 1, SpecularHighlightsOff: если установлен, пиксель не получает зеркальных подсветок.
- Бит 2, SubtractiveMixedLighting: если установлен, пиксель использует режим субтрактивного освещения.
- Бит 3, SpecularSetup: если установлен, материал использует зеркальный рабочий процесс.
Биты 4-7 зарезервированы для будущего использования.
Зеркало
Это поле содержит следующие 24-битные значения:
- Простой материал: RGB зеркальный цвет, хранящийся в 24 битах.
- Освещенный материал с металлическим рабочим процессом: Отражаемость хранится в 8 битах. Остальные 16 бит не используются.
- Освещенный материал с зеркальным рабочим процессом: RGB зеркальный цвет, хранящийся в 24 битах.
Окклюзия
Это поле содержит значение печеного окклюзии от печеного освещения. Для освещения в реальном времени, Unity рассчитывает значение окклюзии окружающего пространства, объединяя значение печеного окклюзии с окклюзией окружающего пространства экрана (SSAO).
Нормальная
Это поле содержит нормы мирового пространства, закодированные в 24 бита. Дополнительную информацию см. в Включить точные нормы G-буфера в Путь отложенного отображения.
Гладкость
В этом поле хранится значение гладкости для материалов Simple Lit и Lit.
Излучающий/GI/Осветление
Эта цель рендеринга содержит вывод эмиссии материала и освещение печенья. Unity заполняет это поле во время рендеринга G-буфера. Во время отложенного рендеринга Unity хранит результаты освещения в этой цели рендеринга.
Формат по умолчанию — B10G11R11_UFloatPack32.
Unity использует R16G6B16A16_SFloat, если выполнено одно из следующих условий:
- В активе URP, Настройки качества > HDR включены, но платформа сборки не поддерживает HDR.
- В окне настроек Игрок, PreserveFramebufferAlpha включены.
Если Unity не может использовать B10G11R11_UFloatPack32 или R16G6B16A16_SFloat, он использует формат по умолчанию HDR.
ShadowMask
Unity добавляет эту цель рендеринга в раскладку G-буфера, когда вы устанавливаете Режим освещения на Субтрактивный или Маска тени.
Маска слоя рендеринга
Unity добавляет эту цель отображения в раскладку G-буфера при включении Слои рендеринга.
Глубина как цвет
Unity добавляет эту цель рендеринга в раскладку G-буфера, когда вы включаете Native Render Passes, и платформа их поддерживает. Unity рендеринг глубины в качестве цвета в этой цели рендеринга. Эта цель рендеринга имеет следующую цель:
- Улучшает производительность на Vulkan устройствах.
- Позволяет Unity получить буфер глубины на платформах, которые используют графику Metal API, которая не позволяет получить глубину из буфера DepthStencil в одном и том же проходе рендеринга.
Формат этой цели отображения — GraphicsFormat.R32_SFloat.
DepthStencil
Unity резервирует четыре самых высоких бита этой цели рендеринга для типа материала. Дополнительную информацию см. в Теги Pass в ShaderLab для URP.
Формат этой цели отображения D32F_S8 или D24S8, в зависимости от платформы.