Как получить линейный градиент в цветовом пространстве sRGB в композиторе Blender

Для того чтобы в композиторе Blender заполнить готовый рандер равномерным черно-белым градиентом, например, по всей ширине изображения, можно воспользоваться нодом “Gradient Texture”, или же реализовать градиент силами нескольких нод математики.

Пусть для примера у нас есть рендер изображения шириной 1024 пиксела. Нам нужно заполнить его линейным черно-белым градиентом слева направо по всей ширине.

Сделаем рендер, переключимся в рабочую область Compositing, отметим галочку “Use Nodes” и добавим в нодовое дерево несколько математических нод для создания линейного градиента.

Здесь мы использовали нод Image Coordinates, чтобы получить размеры изображения в пикселах с его выхода “Pixel”. При помощи нода Separate XYZ выделяем из размера изображения его ширину – координату по оси X. И, чтобы в каждой точке изображения от 0 до 1024 получить линейный градиент, мы делим текущую координату по оси X на ширину изображения – 1024. Так мы получили нужную нам заливку градиентом по ширине изображения.

Цвет изменяется от значения 0.0 в нулевой координате по ширине изображения (левый край изображения), до значения 1.0 в координате 1024 пиксела (правый край изображения).

Мы можем проверить, что наш градиент действительно линейный и равномерный. Откроем рабочую область Image Editor, переключимся на отображение Viewer Node и зажав левую кнопку мышки передвинем курсор так, чтобы он находился ровно в середине изображения, на координате 512 пиксела. В строке состояния внизу экрана мы можем проконтролировать значение цвета в текущей точке и убедиться, что оно равно 0.5, Т.е. в середине изображения мы имеем ровно половину значения цвета, равное 0.5.

Казалось бы, наша задача решена.

Однако, давайте сначала сохраним полученное изображение с градиентом в файл. Нажмем комбинацию клавиш Alt + s и укажем месторасположение и имя для сохраняемого файла.

Теперь откроем сохраненный файл в графическом редакторе, например, в Gimp.

Откроем окно настройки цвета, переключимся на инструмент “Пипетка” и зажав левую клавишу мышки поместим курсор, как мы это делали раньше, точно в середину изображения, на отметку 512 пиксела.

И, как мы видим, происходит что-то непонятное. Значение цвета в этой точке почему-то равно 188.

Понятно, что при сохранении изображения Blender перевел все цвета из внутреннего формата Blender в общепринятый формат RGB, чтобы его могли понимать все остальные графические редакторы. Поэтому теперь у нас все цвета изменяются в диапазоне от 0 до 255. То есть, в левой части изображения (нулевая координата по оси X), там где у нас был 0, у нас 0 так и остался. А в правой части изображения (координата 1024 по оси X) у нас вместо значения 1.0 теперь значение 255.

Но тогда почему же у нас в середине изображения, в координате 512 по оси X, там где было значение 0.5 (половина от максимально возможной единицы), теперь стоит значение 188, которое совсем не равно половине от максимального значения в 255?

А происходит это из-за того, что кроме простого перевода значений из диапазона 0.0 – 1.0 в диапазон 0 – 255, Blender еще и учел, что цвета, чтобы они корректно отображались на мониторах и в других графических редакторах, изображения должны лежать в цветовом пространстве sRGB. А цветовое пространство sRGB не линейно! То есть при сохранении он не просто домножил все на 255, а применил более сложную формулу для сохранения цветов изображения. И если бы он этого не сделал, мы бы увидели визуальную разницу между картинкой, открытой в Blender и той же самой картинкой, открытой в Gimp.

Что же получается в итоге, наш линейный градиент остается линейным только до момента сохранения в файл. А как же быть, если нам нужен линейный градиент именно в финальном файле с изображением?

Чтобы обеспечить линейность градиента после сохранения файла, нам нужно применить к его цветам то же самое преобразование, которое Blender применяет при сохранении файла, однако сделать это “наоборот”.

Применив к цветам градиента обратное преобразование из линейного цветового диапазона в цветовой диапазон sRGB мы получим нелинейный градиент на экране в Blender, который однако же станет линейным, когда Blender применит к нему преобразование в sRBG при сохранении в файл.

Другими словами – давайте считать, что, линейный градиент, который мы видим сейчас на экране в Blender уже лежит в цветовом пространстве sRGB, а мы преобразуем его в линейное цветовое пространство. Получим нелинейный градиент. При сохранении в файл Blender применит к нему преобразование из линейного пространства в sRGB и мы в итоге получим как раз нужный нам линейный градиент в цветовом пространстве sRGB.

Проще всего это сделать при помощи нода Convert Colorspace, указав в его параметре “From” исходное цветовое пространство “sRGB”, а в параметре “To” значение “Linear”.

Или же мы можем воспроизвести формулы преобразования для цветового пространства из sRGB в линейное при помощи математических нод.

Как мы видим, отображение градиента в Blender изменилось.

Снова сохраним полученное изображение в файл и откроем его в Gimp.

Теперь, включив инструмент “Пипетка” и поместив курсор в середину по ширине изображения, мы увидим ожидаемое значение, равное 127, т.е. половине от максимально возможного значения в 255.

Поводив мышкой по картинке можно убедиться, что цвет градиента по ширине изображения изменяется линейно.

Таким образом мы получили на выходе композитора Blender линейный градиент в цветовом пространстве sRGB.

0 0 голоса
Article Rating
Подписаться
Уведомить о
guest

0 Комментарий
Новые
Старые Популярные
Межтекстовые Отзывы
Посмотреть все комментарии