Включить точные нормы G-буфера в пути отображения Deferred и Deferred+ в URP
В путях отображения Deferred и Deferred+, Unity хранит нормали в G-буфере.
По умолчанию, Unity кодирует каждую нормальную в канале RGB нормальной текстуры, используя 8 бит для x, y и z. Значения квантизируются с потерей точности. Это повышает производительность, особенно на мобильных GPUs, но может привести к артефактам цветовых полос на гладких поверхностях.
Чтобы улучшить качество нормалей, можно включить свойство Точные нормали G-буфера в ассете Universal Renderer. Выполните следующие действия:
- В окне Project выберите ассет Universal Renderer.
- В окне Inspector перейдите в раздел Рендерер.
- Установить Точные нормали G-буфера до На.
При установке Точные нормы G-буфера до НаUnity использует октаэдральное кодирование. Значения нормальных векторов более точны, но операции кодирования и декодирования накладывают дополнительную нагрузку на GPU. Точность кодированных нормальных векторов аналогична точности выборочных значений в пути отображения Forward.
На следующей иллюстрации показана визуальная разница между двумя вариантами, когда Camera очень близко к GameObject:
Этот параметр не поддерживает следующие элементы:
- Наклейки нормального смешивания при использовании с Screen Space наклейки техники.
- Смешивание рельефа с более чем четырьмя слоями рельефа, поскольку нормы в различных слоях, кодированных с помощью октаэдрального кодирования, не могут быть смешаны из-за битовой природы кодирования (2 x 12 бит).