Поэтому я долго думал об этом и пытался найти ответ, но безуспешно.
Если все ваши текстуры являются 8-битными изображениями LDR, такими как JPEG, это не может привести к конфликтам с контролем экспозиции / тональным отображением при рендеринге. То есть, если вы настраиваете экспозицию вашего изображения при рендеринге, это должно показать детали в текстурах, которых на самом деле нет, так как они были ограничены низким динамическим диапазоном. Так что не имеет ли смысла также иметь текстуры в виде изображений HDR, сохраненные как .exr, в линейном цветовом пространстве с 16-битным полуплавающим, чтобы получить хорошее представление цвета (32-битное «полное» плавание может быть излишним?). Я полагаю, что более подробные и правильные значения цвета также могут повлиять на GI и как рассчитывается цветовая потеря?
Или это просто не нужно, поскольку конечный результат рендеринга, который мы хотим, вероятно, будет похож на уровень экспозиции текстуры, когда она была сфотографирована каким-либо образом? А поскольку камера в основном снимает в 12-14 битах, вам придется сделать несколько снимков текстуры и выполнить всю эту дополнительную работу, чтобы соединить их все вместе в один HDRI.
Изменить: чтобы уточнить, меня больше всего интересует это с точки зрения фотореалистичного рендеринга, с рендерами трассировки лучей (например, Mental Ray, V-Ray, Арнольд и т. Д.) С имитацией полного освещения и глобального освещения, а не для игровые движки в реальном времени.
источник
Да, в некоторых крайних случаях для освещения и тонального отображения HDR можно выявить проблемы с полосами в цветных текстурах. В этих случаях может быть полезно иметь более высокую битовую глубину для текстур. Однако, по моему опыту, большинство материалов и обычных ситуаций освещения не имеют этой проблемы, и большинство текстур в типичной игре хороши в 8-битной (или даже меньше - в играх часто используется сжатие BC1, что снижает их до 5- 6-5-бит).
Люди используют мишени HDR для рендеринга, потому что одна сцена может содержать очень разные величины яркости, например, темная комната, в которой вы можете видеть через окно на освещенную солнцем внешнюю поверхность, в 10–100 раз ярче, чем комната. Тем не менее, цветные текстуры не имеют такого широкого диапазона величин. Они представляют коэффициенты отражения, которые по своей природе находятся в диапазоне [0, 1], и на практике лишь немногие повседневные материалы имеют коэффициент отражения ниже примерно 2–5%. Таким образом, 8-битное изображение (с гамма-кодированием) обычно может представлять рассеянные и зеркальные цвета с достаточной точностью.
Это правда, что сочетание довольно темной текстуры с очень ярким освещением или чрезвычайно переэкспонированной настройкой камеры может показать полосы в конечном кадре, но это будет более необычный случай.
Случай, когда вам, вероятно , понадобится HDR-текстура, это излучающие материалы, особенно для неоновых вывесок и аналогичных источников света. Текстура будет отображаться с усилением ее значения, чтобы она появлялась в игре как яркий источник света, поэтому в этом случае 8-битное изображение может легко отображать полосы.
Наконец, все еще может быть полезно работать с более высокой точностью (например, 16-битной точностью), если это возможно, при захвате и создании текстур просто потому, что это дает вам больше возможностей для обработки изображения без проблем с точностью. Например, если вам нужно настроить уровни или цветовой баланс, вы потеряете немного точности; это может привести к полосатости (особенно если вы делаете это несколько раз) при запуске с 8-битного исходного изображения. 16-битный источник был бы более устойчивым к таким проблемам. Тем не менее, окончательная текстура, используемая в игре, вероятно, будет сжата до 8-битной.
источник
combination of a quite dark texture with very bright lighting or an extremely overexposed camera setting can show banding in the final frame
очень хорошее понимание Но мы можем заметить, что гамма-кодирование здесь именно для того, чтобы смягчить эту проблему. Если у него есть проблема, почему бы не попробовать превосходный показатель гаммы? это будет препятствовать использованию аппаратных сэмплеров sRGB.Я хотел бы пригласить читателей, чтобы прочитать эту статью о технологии растеризации движка Quake 2, подробно объяснил , если у них есть время.
Если TLDR, пожалуйста, обратите внимание на это изображение:
То, что мы видим, это канал Альбедо , это то, что вы хотите кодировать в 16 битах, если я правильно понимаю ваш вопрос.
Я не собираюсь говорить: « Если это могло быть закодировано в 256 цветах для игр в прошлом, зачем нам в новых играх 281474976710656 (это 281 триллион)? », Даже если я хочу, но это звучит как сварливый парень Pixar из Up. Более конструктивно, если вы отметили на этом изображении, все на том же уровне освещения . Более конкретно, максимально возможная интенсивность, которая сохраняет желаемую насыщенность. (имеется ввиду в пространстве HSV, V максимально)
Акцент является ключевым, нам едва нужны биты, потому что у альбедо нет глубины для кодирования в любом случае. Динамика происходит от затенения, имеет смысл работать с
f32
каждым компонентом в шейдерах и выводить дляf16
рендеринга целей. Но хранение текстур альбедо вf16
этом не только излишне, это серьезное неоправданное снижение производительности для нашей драгоценной полосы пропускания.источник