https://youtu.be/-qgreAUpPwM


배경음 들으면서 작업하면 편해지니깐 올려요







직관은 다음과 같다.

흰색(명도1)셀로판지와 검정(명도0)셀로판지가 적당한 투명도로 그림을 표현한다고 치자.


이 셀로판지는 흰색 배경에선 흰색셀로판지는 전혀 보이지않는다.

이 역도 성립하는데 검정배경에서도 마찬가지다.


만약 이 셀로판지가 두께를 지니며 이것을 투명도t라 표현하자

각 픽셀마다 투명도 t가 달라야 그림이 구현될것이다.


명도 1과 명도0인 그림은 분명히 투명도가 서로 다를것이다.

흰 그림을 A, 검정색 그림을 B이라 하자,


이때 두 셀로판지가 겹쳐진것을 상상해보자

이게 앞뒤로 순서에따라 바뀌지만, 순수히 선형합으로써 표현되면,


투명도합 t는 A+B이다.

명도합 b는 B/(A+B)이다.


그러면 이렇게 완성된 이미지가 위 이미지다.


반면 이러한 직관이아닌 합성된 이미지 (b,t)로 방정식을 세울수도있다.


흰색 배경에서 보여질 이미지를 img_B

검정 배경에서 보여질 이미지를 img_W라 하자


명도에대한 방정식을 세운다.

흰색 배경에선

1-t+bt = img_B


검정색 배경에선

bt = img_W


t = 1 + img_W - img_B

b = img_W/(1 + img_W - img_B)

이다.


지금 합성된 이미지는 img_W는 쿄우카-경멸이며, img_B는 쿄우카-패배이다.


이때 방정식의 해값이 1 - img_B 즉, 반전이미지값인걸 확인할수있다.

포토샵에선 흰배경에 보여질 이미지는 반전명도를 가진상태로 치환될수있음을 알수있다.


코딩으로 이미지처리해도 되는데 포토샵으로도 합성할수있으니, 글을 남기고자해요


포토샵으로 합성하던와중에 포토샵에서 작동하는 알고리즘들이 알파채널부분에서 약간 상이해서 오차가 생겼는데, 하루이틀정도 생각해보고,

해결해서 지금하는 방식은 거의 코딩이나 다를바없네요.

알파값이나 명도값이 0.5%정도 차이날수도있어요.

왜냐면 포토샵에선 클리핑현상도 일어나니깐, 대략 R,G,B가 1~2 알파채널 1~2정도 차이날거에요


애펙으로도 손쉽게 가능할거에요.

원리는 쉬워서, 더구나 애펙이 소스대체도쉬우니깐 자동화도 쉬울테고, 애펙으로 하셔도 상관없어요.




저는 이걸 흰배경에서 나타나는 img_BG라 정의하고



검정배경에선 이걸 나타나게 할 img_H라 정의할게요.


디시앱에서 야간모드에선, img_H가나타나고 일반모드에선 img_BG가 나타나요.



소스를 불러오고,

그런데 저는 알파값이없는 jpg이미지로 가져왔는데,

알파채널있으면, 중간에 연산과정에서 제대로 안일어나니깐 되도록이면 투명한부분은 아래에 흰색BG로 만들어주는게 좋아요.



이를테면 이런 누끼따진 png이미지는 흰배경 추가시켜줘야되요.


이렇게 흰색배경 추가해줘야되고,

검정배경으로도 해도되요.

그런데, 방정식의 값이말해주듯이 배경부분이 역으로 반전되서 이상하게될거라 여기네요.

img_BG든 img_H든 누끼따진부분은 흰색배경으로 채워줘야되요


암튼 이렇게 작업하고나서, 시작할게요




수많은 블렌딩모드에대해 설명하자면, 수학적알고리즘일뿐이에요

img_H가 img_BG의 위에있는데, img_H의 블렌딩모드는 img_BG에대해 연산하게되요,


Add = 각픽셀마다 명도합 (선형합) img_BG + img_H

Subtract = 각픽셀에대해 명도차 img_BG - img_H

Multiply = 각픽셀에대한 명도곱 img_BG * img_H

Divide = 각픽셀에대한 명도의 나눗셈 img_BG / img_H


명도값 a는 다음과같이 표시되요

a = (0~255)/255 = 0~1

명도값이 0.5면

0.5 = 127.5/255 인데 나는 반올림해서 128을 사용할거에요, 여기서 클리핑이 일어나게되는데


Ctrl + J로 레이어 복사해서

Ctrl + Alt + Shift + B로 흑백이미지 전환





레이어에서 BG부분을 1-BG라고 이름바꾸고 Ctrl + I로 반전이미지 만들고,



이제 방정식을 나타내기위해 선형합을 해줘야할 차례인데 선형합을 하면 합성된이미지의 명도값이 0~2를 가져서 클리핑현상이일어나게되요.

이걸 해결하려고, 그래서 Multiply로 이미지값을 0.5배 선형곱해주거나, Ctrl + U로 Input 255 를 Output 128로 바꿔줘서 0.5배의 명도를 가지는 이미지를 만들수있어요,



이렇게 회색조 이미지를 준비해서 (128,128,128)=(연산값은 0.5정도로 계산함) 인 이미지를 준비해서 곱해주면되요

또는, 커브를 이용해서 하는것도 똑같은 효과가 일어나는데, 어차피 0.5를 Multply로써 곱해주고 선형곱이니깐 Ctrl + U 로 선형보정하면,


똑같은 효과를 만들어낼수있어요


저는 커브로 이미지자체에 영향을 주는것보단 레이어 추가하는방식으로 연산하는걸 추구하겠어요

설명하기도 편하니깐요



그룹화시키면 연산모드에 일반이미지와 달리 Pass Through가 있는데 만약 1 - img_BG도 블렌딩모드로 Multiply가 체크되있고 임의의 레이어 A가있으면,


레이어 A multiply (1-img_BG) multiply 0.5

이렇게 연산과정이 일어나게되요

그런데 체크안되고 Normal상태로 있으면

밑에있는 임의의 레이어에 영향을 안주고 그룹내에있는 이미지끼리 연산되고 영향을 주게되요


Normal로 체크되어있다는 의미는 애프터이펙트에서 Composition으로 합쳐준 이미지역할을 하게되요

모든 그룹은 Pass Through를 체크안하고 되도록 Normal로 체크하고 필요시 연산모드 쓰면되요



Normal로 체크하고 Composition처럼 만들고,



선형합으로 Linear Dodge체크하면 동일한 위상을 가진 풀더(Composition)나 이미지끼리 연산하게되요


포토샵 연산과정은 레이어의 맨아래부터 위로 연산하는 과정이에요

그룹에서 Pass Through가 체크되면 그룹을 무시하고 순차적인 연산이고,

그룹의 연산이 Normal이면 한덩어리로 묶어서 연산해요. 수학에선 소괄호 역할하는경우라 생각하면되요.




이렇게 그룹하나 더만들어주고 블렌딩모드는 Normal이에요.


그런데,여기서 0.5 img_H라는 이미지의 명도에서 0.5(1 + img_H - BG)를 나누는 작업을 해도되는데, 저는 명도를 구현하는 작업보다,

투명도를 먼저 구현하는 작업을 할거에요. 지금 이미지의 명도가 0.5(1 + img_H - BG)인데, t값이 요구하는 명도가 현재상태이거든요.


명도를 구현하는 작업을 먼저해도되는데 직접해보니 그룹하나 더 추가해서 선택영역으로 투명도를먼저 구현하고 명도를구현하는 작업이 더 빠르더군요.

아무튼 전 명도보단 투명도를 먼저 구현할거에요.



이렇게 추가해주고, 명도값을 위에있는 스크린샷처럼 마스크를 씌워줄것이에요.


패널에서 레이어패널에서 채널페널로 이동



여기서 명도에따라 선택영역뽑아낼건데, RGB채널이 아닌 개별채널을 선택해야되요.

위 이미지는 RGB 채널선택했지만, 실제 명도값을 가지지않아요.

왜인지는 모르겟네요.


본인 포토샵이 이상한건지모르지만, 아무튼 이런현상을 가졌어요.

Red,Green,Blue중 아무 한채널 선택하면되요.

본인은 Red 채널선택했어요.



채널을 Ctrl키 누르면 명도값에따라 선택영역이 활성화되요.




Ctrl키를 누르는상태로 RGB채널을 다시 클릭하지않은이상 선택영역은 그대로 있을것이에요.

저는 위 스크린샷 상태에서 Ctrl클릭한상태가아닌 그냥 단순히 마우스클릭으로 다시 모든채널 활성화시켰어요.



이상태로 레이어패널로 돌아가서 그룹에 마스크생성하기위해



해당 그룹선택해서 밑에있는 버튼 클릭하면 선택영역대로 마스크가 생성되요.



마스크 만들고 비활성화 하세요.

아직은 명도를 구현해야하는 작업인 1개가 남았으니,




위 이미지에 선택된 해당그룹 복사해서 0.5(1 + img_H + img_BG)와 위상이

다음 스크린샷과 동일하게 놓여지게 다음과같이 만드세요.



복사하면 블렌딩모드(Linear Dodge = Add)도 같이딸려오는데 Normal로 바꿔주세요.



해당 그룹을 선택해주세요.

그리고 블렌딩모드를 Divide로 바꿔주세요.



그러면, 위 이미지와같이 명도가 구현됨을 알수있어요.

즉, 우리가 원하는 명도값 img_H/(1 + img_H - img_BG)값을 구현했어요.

이제 마스크도 다시 활성화하면 되요.



최종적으로 이게 완성된 이미지에요.




포토샵에서 확인하면


맨 아래에 BG를깔면 명도값에따라 달라짐을 알수있어요.