Photoshop. Режимы наложения Subtract (Вычитание) и Divide (Разделение). Вырезание объекта и замена фона, сохраняя тени и блики.


Задача: сфотографировать объекты, а потом заменить поверхность, на которой они стоят. Факторы усложнения: от прозрачных объектов есть не только тени, но и каустика (отражение и преломление света), от цветных объектов цветные рефлексы. Нужно сохранить это всё на новом фоне.

01.jpg
Делаем со штатива две фотографии: с объектами и чистый фон. Фотоаппарат в ручном режиме, чтобы получить ту же яркость, фокус тоже в ручном режиме, чтобы не изменилась точка фокусировки (а она может, если сначала сфокусируется на объекте, а потом на фоне). В общем, тут главное – не менять свет и настройки фотоаппарата.

02.jpg

Вообще, в интернете хватает уроков «вырезать объект, сохранив тени на поверхности», но обычно там объект сфотографирован на белом фоне и тени можно поставить в другом режиме наложения, обычно Multiply (Умножение). Но если от объекта на поверхности не только тени, но и светлые и/или цветные рефлексы, то всё уже не так просто.
Хотя, теоретически, если у нас есть картинка того же фона с тем же светом, только без объекта, то в этом случае нам даже без разницы, какой будет изначальный фон, хоть шпонированное ДСП, тени и блики можно вытащить в отдельные слои.

Итак, поставил объект, фотоаппарат в ручном режиме выдержки и диафрагмы, навёл резкость, переставил фокус на ручной. Фотографии с объектом и без объекта должны быть с одинаковыми настройками, включая глубину резкости. Снял с объектом, потом убрал объект и сделал ещё одно фото. Потом эти две картинки вставил в фотошоп как два слоя. Для удобства назвал слои 1 (без объекта) и 2 (с объектом).

03.jpg

Выравнивание слоёв.

Даже если мы фотографировали со штатива, но пол не бетонный, то сдвиг возможен. Насколько двигается ламинат, можно узнать, если на штатив вместо фотоаппарата поставить лазерный уровень и просто походить вокруг. Глядя на дёргающиеся линии лазера на стенах, начинаешь понимать всю бренность бытия. Ставим верхнему слою режим наложения Difference (Разница). В режиме Difference одинаковые цвета становятся чёрными, так что задача – двигая верхний слой, сделать так, чтобы фон стал максимально чёрным. При этом, если фотоаппарат хоть на несколько миллиметров наклонится вперёд или назад, то придётся ещё и изменять размеры слоя на какие-то доли процента.

04.jpg

Когда добились максимально чёрного фона, режим можно поменять обратно на Normal (Обычный).

Примечание. Способы выравнивания слоёв есть разные (включая автоматическое выравнивание).
Например, можно верхнему слою поставить прозрачность 50% и двигать. Я ставил Difference просто потому, что так меньше
приглядываться: как картинка почернела, значит, нормально.

Также можно попробовать использовать автоматическое выравнивание Edit/Auto-Align Layers, но мне всё равно пришлось размер слоя подгонять вручную, штатив, видимо, всё-таки вперёд-назад немного качался.

Можно приступать к вырезанию бликов и теней из фона.

Вариант 1. Более простой. Неплохо работает на нейтральном фоне, белом или сером, но вообще можно применять на любом фоне.

Блики.
Копируем оба слоя, из них будем доставать блики. Я буду называть их 1 (фон) и 2 (с объектами). Чтобы получить блики, нужно взять картинку с объектом и вычесть значения каналов RGB картинки без объекта. Тогда останутся только те места, которые стали светлее, остальное станет чёрным. То есть, сверху слой 1 без объектов, снизу слой 2 с объектами, у верхнего слоя режим наложения Subtract (Вычитание). Остаются только те места, которые стали светлее от добавления объекта. Удобно то, что если блики цветные, то цвет блика останется.

05.jpg

Потом слои слить. Я назвал слитые слои Lights и пока что спрятал.

Тени.
Теперь задача – получить слой с тенями. Опять копируем слои 1 и 2. Снизу слой 1 без объектов, сверху слой 2 с объектами, у верхнего слоя режим Subtract (Вычитание). Получаем инвертированные тени.

06.jpg

Сливаем слои, можно для удобства назвать слитый слой Shadows. Тени оставляем инвертированными, светлые на чёрном фоне.

Объект.
Объект вырезаем любым методом, который нравится, и переносим на самый верхний слой.

Итак, в верхнем слое у нас объект, под ним два слоя: с бликами (lights), ему ставим режим наложения Linear Dodge (Линейный осветлитель) и инвертированными тенями (shadows) в режиме Subtract (Вычитание).

Примечание (можно не читать). Простое сложение каналов A+B называется Linear Dodge (Линейный осветлитель), но Linear Burn (Линейный затемнитель) – это не простое вычитание, это «A плюс B минус 1» (в случае 8-битного цвета это «минус 255»), обычное вычитание A-B называется Subtract. Если инвертировать слой с тенями, то можно поставить ему режим Linear Burn, результат аналогичен. Но, если вы работаете в режиме 32 бита, то из-за формулы с «минус 1» Linear Burn не работает, в 32 бита нет чёткого «потолка» яркости, так что Subtract тут более универсален.


Теперь подо всем этим можно добавить другой фон или просто слой с цветом. Конечно, если просто растянуть текстуру одной яркости, то будет видно, что что-то не так:

07.jpg

Но если даже на такой фон добавить градиент, а объектам подкрутить яркость, то всё уже не так плохо:

08.jpg

На новом фоне сохраняется даже радужная дисперсия, которую в обычных условиях было бы не так просто перенести:

09.jpg

10.jpg

Один из основных плюсов этого способа – работает на любом фоне. Можно сделать две фотографии на фоне текстуры дерева, повторить действия и получить отдельные тени и блики. Ну, может блики будут с желтовато-оранжевым оттенком, но и их, и объект можно сделать менее жёлтыми через Hue/Saturation (Цветовой Тон/Насыщенность), убрав насыщенность из жёлтого цвета.

11.jpg

Теперь о том, почему это не совсем физически корректный способ, и какие проблемы могут быть у более физически корректного способа.

Вариант 2. Более правильный, режим Divide (Разделение), но чуть сложнее.

Первый способ неплохо работает, если у нас однородный фон одного цвета. Мы получаем разницу в яркости: НА СКОЛЬКО стало ярче. Но вот если фон не однородный, то проблема, - у светлого фона яркость добавляется быстрее. Допустим, часть фона белая, а часть тёмная, в примере это часть стола, которая за пределами белого листа бумаги. Тогда нам нужно узнать, ВО СКОЛЬКО РАЗ стало ярче. Для начала сравнение результатов, видно, что во втором случае добавление яркости не так сильно зависит от цвета фона:

12.jpg

Но видны и минусы: в тенях, где много шумов, яркость этих шумов получается очень высокой, а справа внизу совсем «светится»:

13.jpg

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

В принципе, мы делаем то же самое, что и в первом варианте, но режим ставим не Subtract (Вычитание), а Divide (Разделение). Этот режим делит значения RGB нижнего слоя на значения RGB верхнего.

Пример: на нижнем фоне яркость серого цвета 0.1 (10%), а на верхнем серый 0.5 (50%), результирующий будет 0.1/0.5=0.2, итоговая яркость серого цвета 20%. Если верхний слой темнее нижнего, то результат всегда белый (при делении на меньшее число мы всегда получаем значение больше 1). Если цвета одинаковые, то итоговый цвет тоже белый, этот эффект мы и будем использовать: там, где блики и тени не добавились, результат будет белый.


Тени: сверху слой 1 без объектов, снизу слой 2 с объектами, у верхнего слоя режим Divide, получаем тени:

14.jpg

В тенях из-за шума остаются куски, которые должны быть белыми

15.jpg

Примечание. Теория, можно не читать. Если у картинки в целом яркость достаточно высокая, то даже при наличии шумов, поделив одну яркость на другую, мы не сильно отойдём от некоего среднего значения. Например, у нас два почти одинаковых слоя, но есть шум в 0.01 (1%). В нижнем слое серый цвет 0.5, в верхнем из-за шумов 0.51, результат деления 0.98, почти белый. А если у нас в нижнем слое очень темно, например, значение 0.01, а в верхнем из-за шумов 0.02, то итоговое значение 0.5, вместо белого средний серый. То есть, разница в 0.01 при низкой и при высокой яркости в режиме Divide даёт итоговый результат, отличающийся в разы, в первом случае ошибка 2%, во втором 50%.

В общем, чем темнее картинка, тем в данном варианте всё хуже. Но. Если мы на нижнем слое увеличим яркость самых чёрных кусков, то шум резко уменьшится. К нижнему слою применяем Levels (Уровни), нижний левый ползунок сдвигаем на 1 или 2. Это действие делает самые чёрные части чуть-чуть светлее, но в режиме Divide этого хватает, чтобы «уйти» в белый, нижний правый угол стал белым:

16.jpg

Сливаем слои, результат инвертируем:

17.jpg

Блики: сверху слой 2 с объектами, снизу слой 1 без объектов, у верхнего слоя режим Divide:

18.jpg

Опять шумы в тенях и затемнение в углах. К нижнему слою применяем Levels (Уровни), нижний левый Output Levels меняем на 2 или 3 (добавили яркости в самые чёрные части), тёмные углы стали белыми:

19.jpg

Получаются инвертированные блики, после сливания слоёв инвертируем через Image/Adjustment/Invert (Изображение/Коррекция/Инверсия):

20.jpg

Примечание. Осталась белая полоса справа внизу от листа бумаги. Её, видимо, проще кисточкой закрасить, но в примере я оставлю, чтобы было видно, на что она влияет.

После чего так же блики ставим в режиме Linear Dodge, а тени в Subtract. Фон подкладываем любой:

21.jpg

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


Но блики могут быть слишком яркими и «выбивать» цвет в белый (как блик на картинке в нижней части). Проще всего взять слой с бликами и покрутить кривые, я снизил среднюю яркость:

22.jpg

Есть вариант собирать это всё в режиме 32 бита, там пересветы можно убирать корректирующим слоем экспозиции, но в 32 бита своих заморочек хватает, поэтому так.


Вывод: если нужно сфотографировать что-то на неоднородном фоне, а потом заменить фон, оставив тени и/или блики, то режимы фотошопа Subtract и Divide могут помочь. Тут неровный фон, поэтому тени не идеальные, с ровным фоном проще (здесь хотел показать тени, а не вырезание фигуры, поэтому с вырезанием фигуры не старался):

23.jpg
Режим Divide (Разделение), поэтому яркость теней не зависит от цвета фона.

Примечание. На телефоне программа удалённого управления фотоаппаратом, потому что техногенный пафос, сразу смотрю, что получается.

P.S. Выражаю благодарность китайским производителям фонариков с индексом цветопередачи CRI 90% https://vk.com/@mcwolf_info-pro-fonariki2 и немецким производителям подставок под фонарики.

24.jpg

753 0 850 4
2
2021-10-26
Статья конечно пушка, сказка - песня👏. Но на практике не сталкивался с потребностью решать такие задачи. Чаще просто доп блики и рефлексы рисую руками с помощью тех же режимов наложения.
2021-10-29
Сергей ГоловинСтатья конечно пушка, сказка - песня👏. Но на практике не сталкивался с потребностью решать такие задачи. Чаще просто доп блики и рефлексы рисую руками с помощью тех же режимов наложения.

Первый раз я задумался, когда в студийной фотке хотел фон на 3д поменять, а модель у стены стояла, и тени со стены надо было перенести на 3д. Стена была равномерно серой, так что как-то перетащил вручную. Второй раз когда в студии не было белого куба, и пришлось использовать стопку "эплбоксов", а у них текстура дерева ярковыраженная. И там пришлось рисовать тени самому. Задолбался. Вот тогда и начала формироваться мысль. Всратые эксперименты в фотошопе я люблю. То широкоугольное макро https://render.ru/ru/m.volkov/post/17151 то метод предметной фотографии с одним фонариком https://render.ru/ru/m.volkov/post/15229
RENDER.RU