Мы пытаемся оптимизировать освещение по скорости заполнения. Интегрированные графические чипы очень медленно обращаются к памяти.
Есть два Light Buffers: один для Diffuse и один для Specular. Оба используют формат R11G11B10F. Есть ли способ упаковать два буфера в один? Например, используя цветовую модель Y'CbCr:
shader
color
optimisation
skif_engineer
источник
источник
Ответы:
Возможно, вы захотите взглянуть на Компактный кадровый буфер YCoCg . Он использует 2-канальный буфер для хранения яркости для каждого пикселя и двух компонентов цветности по половине пикселей каждый, образуя шахматную доску. Он также использует фильтр повышающей дискретизации с распознаванием краев в конце кадра, чтобы восстановить отсутствующие компоненты цветности и преобразовать их обратно в RGB.
Вы можете расширить его до одного 3-канального буфера, чтобы хранить диффузную яркость, зеркальную яркость и насыщенную цветность (с учетом диаграммы в вашем вопросе, что достаточно сохранить только одну пару значений цветности).
Вы также можете использовать формат R10G10B10A2, если вам не нужен диапазон формата с плавающей запятой. Это та же самая полоса пропускания, но она даст вам гораздо большую точность (R11G11B10F дает только 5–6 бит мантиссы на компонент). Кроме того, вы можете использовать 2 бита альфа для хранения пары флагов, таких как ваш диффузный / зеркальный флаг.
источник
Если у вас все в порядке с зеркальным отображением только белого цвета, вы можете поместить диффузный и зеркальный в RGBA.
Похоже, именно это и делает единство для отложенного рендеринга.
Кто-то обнаружил эту проблему: http://forum.unity3d.com/threads/specular-color-based-on-light-color.134412/
Документы, упоминающие это: https://docs.unity3d.com/Manual/RenderTech-DeferredLighting.html
источник