Маска насыщенности из каналов. DaVinci Resolve.
За годы работы ретушером, композером, выработалась привычка держать маски под все. Заказы нужно отдавать вчера, а впереди 10 гигабайтный файл набитый изображениями со стоков, 3д, исходников от фотографа... И первым делом, если пришла какая-то правка от очередного арт директора, я смотрю на стек слоев и ищу нужную маску. Отсюда и привычка держать какие-то маски заранее.
Не будем о наболевшем)
И на сколько же я был рад, когда увидел в DaVinci Resolve ноды! Что все это можно записывать в PowerGrade. Конечно первым делом захотел сделать маску на насыщенные участки. Любой опытный фотограф/ретушер, всегда следит за перенасыщенными участками в кадре. В фото направлении, клиенту, в 90% случаев нужна насыщенная и очень контрастная картинка, а перенасыщенные оттенки делают кадр дешевле, и это конечно надо править.
Есть прекрасный плагин Lumenzia для Photoshop. И он очень выручал меня в некоторых ситуациях, ведь в Photoshop нет инструмента Qualifier. Да и чаще всего нужно было вытаскивать инфу из каналов для разного рода задач.
Когда я первый раз открыл этот плагин, меня очень удивило наличие какой-то странной альфа-маски, под названием Saturation, удивила сама возможность построения такой маски, в последствии, ковыряя разные исходники, стало понятно что это самый мягкий способ воздействовать на насыщенные участки в Photoshop. Для меня эта была возможность воссоздать кривые Sat vs Sat и Sat vs Lum в Photoshop. Кстати, на момент создания этого решения, DaVinci 17 еще не вышла. И я задался вопросом как затемнять насыщенные участки, не прибегая к HSV, и да, это цветовое пространство я еще тогда не часто использовал в работе. Но даже на сегодня, иногда мне помогает эта маска. Применение этих знаний оставляю на вас, экспериментируйте!
С недавнего времени я нашел подобные маски в двух местах. OFX от Baldavenger на GitHub, внутри HueConverge, мне показалась маска грубоватой и ее не получится так же контролировать как нашу. DCTL Saturation от Scottdyer на GitHub, достаточно мягкая, но полностью затрагивает яркие участки и меньше в тенях, чем в моем варианте. Внизу прикладываю кадры с каждым из решений. Для тестов возьмем изображение для стресс теста Luts.
Первое - мое решение, дальше - OFX HunConverge, и последнее - DCTL Saturation.
И так, какая концепция? Мне хотелось чтобы маска строилась только на насыщенные цвета, не затрагивая точки белого и черного. Обязательно чтобы в маске было максимальное кол-во информации и мягкие переходы насколько это возможно. Ну и конечно чтобы можно было влиять на эту маску, опять же, насколько возможно мягко.
После кучи попыток сделать хоть что-то дельное, (Пытался вытянуть эту маску из HSV, HSL, LAB, XYZ) я уже хотел забросить эту затею, но в очередной вечер, попивая чаек, надо мной вспыхнула лампочка, как в мультиках, и стал тестировать идею. Важно понимать, от программирования меня выворачивает, и помимо желания заполучить новый инструмент для работы, для меня так же был челенж сделать это нодами, не имея вообще никакого опыта. Кроме создания шейдеров в 3D программах, таких как Blender.
Приступим!
Лучше решать задачу последоватьно, так? Но это я понял уже спустя кучу попыток)
Первым делом нам нужно как-то отделить каналы из изображения. Используем Splitter Node для этого. Наше изображение делится на 3 канала Red, Green, Blue.
Дальше вытаскиваем из каналов информацию о цвете, через Subtract. Подсоединяем основное изображение к главному входу Layer Node, а RGB каналы которые мы получили ранее, к верхнему входу. Режим Subtract.
Видя что движемся в нужном направлении, теперь нужно объединить получившееся каналы, самый лучший для нас способ - это через Layer Node, с режимом Lighten. И так же показываю какое изображение должно получится на выходе из последней ноды. В результате получили изображение где все нейтрали окрашены в черное.
И вроде бы уже готово, да? Но нет, если эту маску использовать как альфу, то действие будет на равномерным. Желтый и циановый будут ярче, а синий темнее.
Для того чтобы решить эту проблему, мы снова разъединяем изображение на каналы, с помощью Splitter Node. И в конце два решения, как соединить полученные каналы. Первый вариант делать будем через Layer Node, режим Lighten.
Если мы соединим через режим Lighten, то получим самую мягкую маску, корректно работающую в любой ситуации. Результат будет тот же что и демонстрировал ранее.
Мы так же можем управлять воздействием этой маски, управляя Gamma Wheel, в последней ноде.
Это минус 0.50.
Это плюс 0.50
Видно что маска корректно отрабатывает диапазоны.
Но некоторых людей может смутить обилие швов. В том числе и меня)
Поэтому есть второй вариант, когда в последней Layer Node, ставится Add. Воздействие будет слишком интенсивное, и для компенсации надо понизить Gain, Gamma Wheels на 0.50, в последней ноде.
На первый взгляд выглядит чище, но по факту может иногда некорректно отрабатывать на таких цветах как Cyan, Yellow, Magenta, делая их темнее в маске. Но возможно вам и нужен такой эффект.
Как корректно применить эту маску на видео?
К сожалению, не смотря на то, что стресс тест картинка выглядит прекрасно. В реальном же видео, некоторые цвета менее насыщенны и будут темнее на маске. Это правильно и органично, но мы же хотим получить идеальную маску)
Поэтому маска так же должна понимать с каким материалом она работает, чтобы иметь правильный контраст, нам обязательно понадобится CST для этого. Для того чтобы скомпенсировать менее насыщенные цвета, воспользуемся Hue vs Sat. А для того чтобы избавится от шума, лучше использовать Median Blur, он размывает картинку оставляя границы достаточно резкими, но очень сильно грузит систему, аккуратно с ним.
Ниже как строятся ноды до Compound Node. И настройки Hue vs Sat.
И из такого изображения, мы получаем подобную маску.
В реальном проекте ноды выглядят приблизительно вот так.
В таком случае маска не будет шуметь/артефачить с 100% вероятностью. Если пропускать через NR, и включать шумодав только при Delivery, то и нагрузки на систему не будет.
Надеюсь этот гайд был для вас полезным. Да прибудет с вами святой квалифаер!