Render.ru

Гамма-коррекция

rozzza

Активный участник
Рейтинг
11
#1
Гамма-коррекция — коррекция функции яркости в зависимости от характеристик устройства вывода. Значение гаммы, равное 1, соответствует «идеальному» монитору, который имеет линейную зависимость отображения от белого к черному. Но таких мониторов не бывает — зависимость, в особенности для электронно-лучевых устройств, нелинейна. Для дисплеев компьютера значение гаммы обычно составляет значения от 1.5 до 2.2. (http://ru.wikipedia.org/wiki/Гамма-коррекция)
Если мы выводим на экран монитора картинку без гаммы-коррекции, то наблюдаем на дисплее более темную картинку с пониженной гаммой. Конечно, некоторые форматы изображений могут содержать в себе информацию о гамма-коррекции монитора, тогда при выводе ее на экран мы видим картинку без гамма-искажений.
ПО, с помощью которого мы просматриваем картинки, тоже не редко вносит свою гамма-коррекцию. При этом, мне кажется, должны существовать какие-то алгоритмы в этих программах, согласно которым не применяется гамма-коррекция к изображениям, которые содержат в своем формате гамму.
Хотелось бы узнать, что делает фьюжен с картинкой, когда мы видим ее во вьюпорте. И зачем мы используем параметр conversion gamma?
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#2
Очень хороший вопрос (и введение!).

Фьюжн не производит каких-либо скрытых операций с гаммой картинки.
Все преобразования задаются явно.

Например, когда мы импортим DPX, по умолчанию он конвертируется из логарифмического в истинно-линейный (Conversion Gamma=1 by default).
Чтобы скомпенсировать нелинейность дисплея, во Фьюжене мы можем пойти несколькими путями:

1a. Изменить Conversion Gamma прямо в лоадере. Типичное значение для большинства мониторов Conversion Gamma=2.2
1b. Оставить лоадер в покое и прицепить сразу за ним инструмент Gamut, установить в нем Output Space=sRGB
1c. Вместо Gamut прицепить Brightness/Contrast и установить Gamma=2.2

Наиболее точный из вышеперечиселнных способов - 1b. Наименее точный, хотя наиболее наглядный - 1c.
Разница в том, что BC производит простую гамма-коррекцию, в то время как Gmt учитывает стандартный прямой участок графика конверсии в самых темных областях.
В смысле гамма-компенсации, то, что делает BC (Gamma=2.2), эквивалентно Gmt (Output Space=Simplified sRGB).

Но дело в том, что остальные инструмены Фьюжн, как и большинство инструментов большинства других софтов делают вид, что они ничего не знают о гамма-компенсации.
И проблема становится очевидной, когда мы пытаемся накладывать полупрозрачные изображения (или изображения с очень размытыми краями) поверх других изображений. Переднеплановое изображение становится будто более явное, где фоновая картинка светлая и скрадывается поверх темных областей фона.
Проблема, так же, настигает нас, когда мы делаем дефокус и моушн-блюр. Мы с удивлением обнаруживаем, что в дефокусе не получается красивых четких кружочков (bokeh) на месте, где в оригинале были блики, а на моушнблюре блики не превращаются в красивые четкие линии.

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

Предлагаю несколько вариантов:
2a. включить LUT=Fusion View LUT в Display View, нажать Edit..., установить Color Gamma=2.2. Этот способ применяет Simplified sRGB, т.е. тупо извлекает корень 2.2 из значений цвета, но делает это очень быстро, т.к. использует GPU нашей (ну, или вашей) видеокарты.
2b. Взять прекрасный Gamut (Output Space=sRGB) и сохранить его как .settings в папку Fusion:\LUTs. Затем выбрать его из списка LUT в Display view. Более правильно, но медленно.
2с. Дождаться, пока кто-нибудь напишет гамма-компенсирующий view shader в качестве LUT, либо найти этот шейдер, написанный без моего ведома, либо написать самим (для скриптописателей это очень простая задача). Можно, так же, послать запрос в Eyeon, убедившись, что такого шейдера, действительно, нет и что скриптописателей нет под рукой.
2d. Смотреть свою картинку, подключая выход к специально созданной в композиции ноде Gamut (Output Space=sRGB). Это наименее удобный, но наиболее наглядный способ.

Такой воркфлоу имеет свои неудобства во Фьюжн. Особенно, это заметно при применении ColorCorrector, который ведет себя не совсем адекватно, хотя и предсказуемо.

Поэтому предлагаю третий, эксклюзивный вариант (которым сам в Чаще Всего пользуюсь):
3a. Делаем гамма-компенсацию, как в пунктах 1x. Перед применением дефокуса, моушнблюра и сложением полупрозрачных (или с мягкими краями) картинок, понижаем гамму через BC (Gamma=1/2.2), после применения - возвращаем гамму в зад через BC (Gamma=2.2).
3b. То же самое, только через Gamut (Source Space=sRGB), затем Gamut (Output Space=sRGB).
По возможности, это удаление-возвращение гамма-компенсации должно соответствовать тому, что вы сотворили с картинкой при начальной гамма-компенсации, т.е. использовать везде Gmt, либо везде BC.

Ну вот, вроде бы, и все.

Предлагаю прочитать еще эту статью с картинками: Working with Gamma.

Если остались какие-то вопросы, не стесняйтесь задавать.
 

rozzza

Активный участник
Рейтинг
11
#3
Фьюжн не производит каких-либо скрытых операций с гаммой картинки.
Например, когда мы импортим DPX, по умолчанию он конвертируется из логарифмического в истинно-линейный (Conversion Gamma=1 by default).
Разве? А как же нода CineonLog?
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#4
В CineonLog гамма-компенсация задается явно (просто в моих сеттангах умолчальное 1 заменено на 2.2). Конверсия лог-лин - отдельная тема.
 

vlk2k

Пользователь сайта
Рейтинг
2
#6
Григорий, спасибо большое за подробный и информативный ответ!!! :)
а Rozz'е, персональное спасибо за правильный вопрос :)
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#7
Для полноты картины еще стоит добавить о пользе прегрейда.

Если вам пришлось иметь дело с сильно искаженными цветами в исходнике (как это традиционно бывает со сканами, сделанными одной московской компанией), необходимо перед вкомпаживанием новых элементов выставить для исходника правильные точку белого и черного.

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

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

Проще всего сделать прегрейд так, чтоб потом можно было вернуть цвет назад, следующими двумя способами:
1. Во время конвертации лог-лин (и Loader и CineonLog умеют работать с разными параметрами для всех трех цветовых каналов). После операций композитинга нужно просто выставить те же параметры при обратной лин-лог конверсии.
2. Инструментом ColorCurves. Чтобы вернуть исходный цвет, достаточно сделать копию ноды CCv и в редакторе сплайнов сделать для нее Invert (кнопка в виде X).

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

LabEG

Знаток
Рейтинг
39
#8
Т.е. нужно работать с уже цветокорректорной картинкой?
В смысле в цветокорректирующей программе делаем ее нормальную, а потом передаем в композ? Тогда как луше передавать в композ?
 

rozzza

Активный участник
Рейтинг
11
#9
В общем, смысл всего выше и гораздо выше написанного в том, что при композитинге нужно работать с линейным изображением, у которого правильно выставлены точки черного, белого, серого и отсутствует гамма-компенсация.
Для меня смысл всего выше и гораздо выше написанного свелся к тому, что надо использовать при композе линейное изображение с гаммой 2.2, если это не операции дефокуса, моушнблюра и сложение полупрозрачных (или с мягкими краями) картинок, или ты сам себе противоречишь, или я вообще ничего не понимаю.
 

rozzza

Активный участник
Рейтинг
11
#10
2. Инструментом ColorCurves. Чтобы вернуть исходный цвет, достаточно сделать копию ноды CCv и в редакторе сплайнов сделать для нее Invert (кнопка в виде X).
Ноду CC ставить после конвертации log->lin?

...необходимо перед вкомпаживанием новых элементов выставить для исходника правильные точку белого и черного.
Как определить правильные точки белого и черного?
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#11
Ноду CC ставить после конвертации log->lin?
Да, после. Но не CC, а CCv, т.к. CC невозможно инвертировать.

Как определить правильные точки белого и черного?
Например, лист белой бумаги должен быть белым. Самые темные области не должны синить-краснить-зеленить.
Можно, так же, вывести гистограмму и следить, чтоб диапазон уровней по трем каналам совпадал.
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#12
Т.е. нужно работать с уже цветокорректорной картинкой?
В смысле в цветокорректирующей программе делаем ее нормальную, а потом передаем в композ? Тогда как луше передавать в композ?
В идеале - так, но часто сканы приходят без прегрейда. В этом случае, прегрейд можно делать прямо во Фьюжене перед применением мерджей, дефокусов и т.д.
 

LabEG

Знаток
Рейтинг
39
#13
Немножко перефразирую вопрос, в какой формат нужно выгнать из люстры что бы передать во фьюжен, есл в дпх то фьюжен не востановит цвета, ибо не ест люты, можно ли гнать через тифы, не будет ли потерь и искажений?
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#14
Вообще-то, Фьюжн может импортить и 1D, и 3D люты.
В этом смысле, между разными форматами изображений нет никакой разницы.
Проще всего из Люстры выдавать ДПХ, т.к. он при сопоставимой точности значительно меньше 32 битных тифов.
 

Григорий Чаленко

Куратор форума
Команда форума
Рейтинг
948
#15
Обращаю внимание на то, что для правильного композитинга необходимо конвертировать логарифмические DPX в линейное пространство в любом случае.
Исключение - совсем простые композиции, где нужно подвигать кадр или отдельные его части и где нет мягких масок, моушн блюров, дефокусов и полупрозрачных слоев.

Конверсия может быть сделана либо прямо в Loader, либо Loader может быть установлен в режим Bypass Conversion и сразу за ним прицеплена нода CineonLog.

Если применяется CineonLog, необходимо проверить, не клипятся ли цветовые значения за пределами диапазона 0..1. Если да, указать в Loader явно глубину цвета Float 16 или Float 32.
 
Сверху