Для того чтобы в композиторе 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.

.blend file on Patreon




