16-битные полуфлотные линейные HDR-изображения как (диффузные / альбедо) текстуры?

10

Поэтому я долго думал об этом и пытался найти ответ, но безуспешно.

Если все ваши текстуры являются 8-битными изображениями LDR, такими как JPEG, это не может привести к конфликтам с контролем экспозиции / тональным отображением при рендеринге. То есть, если вы настраиваете экспозицию вашего изображения при рендеринге, это должно показать детали в текстурах, которых на самом деле нет, так как они были ограничены низким динамическим диапазоном. Так что не имеет ли смысла также иметь текстуры в виде изображений HDR, сохраненные как .exr, в линейном цветовом пространстве с 16-битным полуплавающим, чтобы получить хорошее представление цвета (32-битное «полное» плавание может быть излишним?). Я полагаю, что более подробные и правильные значения цвета также могут повлиять на GI и как рассчитывается цветовая потеря?

Или это просто не нужно, поскольку конечный результат рендеринга, который мы хотим, вероятно, будет похож на уровень экспозиции текстуры, когда она была сфотографирована каким-либо образом? А поскольку камера в основном снимает в 12-14 битах, вам придется сделать несколько снимков текстуры и выполнить всю эту дополнительную работу, чтобы соединить их все вместе в один HDRI.

Изменить: чтобы уточнить, меня больше всего интересует это с точки зрения фотореалистичного рендеринга, с рендерами трассировки лучей (например, Mental Ray, V-Ray, Арнольд и т. Д.) С имитацией полного освещения и глобального освещения, а не для игровые движки в реальном времени.

Кристоффер Хеландер
источник

Ответы:

8

В кинопроизводстве мы почти никогда не используем 8-битные текстуры для цвета / альбедо, из-за полос и т. Д. (JPEG особенно проблематичен, так как по спецификации это sRGB, а не линейные значения.) Мы используем либо «половину» (16-битное с плавающей точкой) ) или 16-битные целочисленные значения без знака для текстур цвета / альбедо.

Ларри Гриц
источник
1
Вау, спасибо @LarryGritz! Учитывая, что вы работаете в Sony Pictures Imageworks, я буду считать вас очень надежным источником! :) Но как вы захватываете эти текстуры? Большинство камер снимают только в 14-битных RAW-файлах. У вас есть специальные камеры с 16-битными линейными датчиками? Или вы берете несколько экспозиций для текстур, точно так же, как и для освещения на основе HDRI? Или вы просто снимаете с помощью 14-битной камеры RAW и сохраняете ее как «16-битную»? Ой, а какой формат файла вы используете: .tiff (.tx, .tex) или .exr? Еще раз спасибо за ваш вклад!! :)
Кристоффер Хеландер
1
@KristofferHelander: преобразование из 14-битного захвата в 16-битное представление диапазона 0-1 легко достигается путем умножения. Но большинство наших текстур нарисованы, а не сфотографированы - иногда они рисуются непосредственно в 16-битном формате, иногда они окрашиваются в sRGB, а затем преобразуются в 16-битные при «линеаризации» для использования в качестве текстуры. Нет необходимости в HDR для текстур альбедо.
Ларри Гриц,
1
@KristofferHelander: Для текстур альбедо мы склонны использовать TIFF с 16-битными целочисленными данными (то, что мы называем .tx, это просто формат TIFF, но мозаичный и с многоразрешением MIP-карты, хранящимся в виде нескольких субизображений в файле TIFF). Для реальных данных HDR, таких как захват среды, мы используем OpenEXR. Выход рендерера также имеет тенденцию быть OpenEXR.
Ларри Гриц,
8

Да, в некоторых крайних случаях для освещения и тонального отображения 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.
v.oddou
Спасибо за ваш вклад. Но, чтобы уточнить, меня больше всего интересует это с точки зрения фотореалистичного рендеринга с рендерами трассировки лучей (например, Mental Ray, V-Ray, Арнольд и т. Д.) С имитацией полного освещения и глобального освещения, а не для реального игровые движки
Кристофер Хеландер
@KristofferHelander Полезно знать, но я думаю, что то, что я написал, вероятно, применимо и к офлайновому рендерингу. Но я признаю, что у меня нет большого прямого опыта в этой области.
Натан Рид
@NathanReed Да, вы наверняка высказали несколько действительно хороших
Кристоффер Хеландер
5

Я хотел бы пригласить читателей, чтобы прочитать эту статью о технологии растеризации движка Quake 2, подробно объяснил , если у них есть время.

Если TLDR, пожалуйста, обратите внимание на это изображение: введите описание изображения здесь

То, что мы видим, это канал Альбедо , это то, что вы хотите кодировать в 16 битах, если я правильно понимаю ваш вопрос.
Я не собираюсь говорить: « Если это могло быть закодировано в 256 цветах для игр в прошлом, зачем нам в новых играх 281474976710656 (это 281 триллион)? », Даже если я хочу, но это звучит как сварливый парень Pixar из Up. Более конструктивно, если вы отметили на этом изображении, все на том же уровне освещения . Более конкретно, максимально возможная интенсивность, которая сохраняет желаемую насыщенность. (имеется ввиду в пространстве HSV, V максимально)

Акцент является ключевым, нам едва нужны биты, потому что у альбедо нет глубины для кодирования в любом случае. Динамика происходит от затенения, имеет смысл работать с f32каждым компонентом в шейдерах и выводить для f16рендеринга целей. Но хранение текстур альбедо в f16этом не только излишне, это серьезное неоправданное снижение производительности для нашей драгоценной полосы пропускания.

v.oddou
источник
Спасибо за ваш вклад. Но, чтобы уточнить, меня больше всего интересует это с точки зрения фотореалистичного рендеринга с рендерами трассировки лучей (например, Mental Ray, V-Ray, Арнольд и т. Д.) С имитацией полного освещения и глобального освещения, а не для реального игровые движки Я обновил свой оригинальный пост.
Кристофер Хеландер