블렌더/쉐이더

[blender node] 02. Mix Color (4)

노루3759 2023. 12. 22. 20:14
반응형

[blender node] 02. Mix Color (4)

 

 

4. Linear Light  ( A + 2B - 1 )

Linear Light는 더하기와 빼기가 동시에 나타나는 블렌딩 방법입니다.

2가지 방법으로 블렌딩이 되는데 A에서 B를 섞을 때, B 이미지가 0.5보다 크면 밝아지고, 0.5보다 작으면 어두워집니다.

 

A + 2B - 1에서 2B - 1 부분을 살펴봅시다. 

 

1) B가 0.5보다 클 때

0~1까지 표현되는 이미지 특성상 B 이미지가 0.6이라면, 2 * 0.6 - 1 = 0.2, 양수가 됩니다. A + 양수, 즉 A 이미지가 밝아지는 것이죠.

 

2) B가 0.5보다 작을 때

B 이미지가 0.4라면 2 * 0.4 - 1 = -0.2, 음수가 됩니다. A + 음수, 즉 A 이미지가 어두워집니다. 

 

3) B가 0.5일 때

B 이미지가 0.5라면 2 * 0.5 -1 = 0입니다. A + 0, 즉 A 이미지는 색이 변하지 않습니다.

 

아래 두 이미지를 Linear Light로 섞으면,

 

 

B 이미지를 기준으로 0.5 보다 작은 부분은 어둡게 블렌딩하고, 0.5 보다 밝은 부분은 밝게 블렌딩합니다. 0.5인 부분은 색이 변하지 않고 원본의 색을 유지합니다. 섞으려는 이미지(B)가 밝으면 밝게, 어두우면 어둡게 블렌딩하는 것이죠.

 

 

그런데 문제는... 이걸 어디에 써먹을 수 있을까요?

 

재밌게도 블렌더에서는 Linear Light를 색을 블렌딩하는 것보다 좌표를 블렌딩하는데 더 유용하게 사용할 수 있습니다.

 

 

 

잠시 블렌더가 아닌 다른 프로그램을 살펴보겠습니다. 섭스턴스 디자이너라는 프로그램인데 텍스처를 만들기 위해 주로 사용합니다. 기본 원리는 블렌더와 비슷합니다. 이 프로그램에서 Warp라는 녀석을 통해 아래 그림처럼 텍스처를 왜곡시킬 수 있습니다. warp는 주로 B 이미지 정보로 A 이미지를 왜곡시켜 주는 노드인데, 어떻게 왜곡시킬지에 따라 몇 종류의 warp가 있습니다. 아래는 그중 한 방향으로 정보를 왜곡시켜 주는 Directional Warp라는 노드입니다. 별 텍스처가 볼록한 구를 따라 볼록하게 왜곡되었습니다.

 

 

A는 특별할 것 없는 별 모양 이미지입니다. 이 A 이미지를 B를 사용해서 왜곡시켰더니 C가 되었습니다.

 

 

그 핵심 역할을 해 준 녀석이 아래 warp 노드입니다.

 

 

이 Directional Warp라는 녀석을 통해 A를 B 모양을 따라 왜곡시킨 것이죠. 이미지에 변화를 주기 위해 많이 사용합니다.

 

 

아래 A 타일을 사용하려고 하는데 모양이 딱딱 들어맞아서, 그냥 사용하면 재미가 없죠. 그래서 B 이미지를 기준으로 왜곡시키면 C처럼 이미지가 왜곡됩니다. 이런 식으로 텍스처에 다양성을 줄 수 있습니다.

 

 

 

 

그러면 블렌더에서는 어떤 노드를 사용해서 Warp를 할 수 있을까요? 안타깝게도 블렌더에는 이런 노드가 없습니다. 정확하게는 사용자가 warp 노드를 직접 만들어서 사용해야 합니다. 

 

블렌더는 잘 만들어진 자동차와 같습니다. 어찌나 잘 만들었는지, 사용자는 이 차를 트럭으로도, 승용차로도, 때로는 버스로도 사용할 수 있습니다. 하지만 옵션이 없습니다. 옵션이 없는 차와 같죠. 그래서 사용자가 직접 옵션을 제작해야 합니다. 에어컨도 제작해서 달고, 차량용 내비게이션이 없으니 하나 사 와서 달고, 이것저것 필요한 옵션을 사용자가 제작해서 달아 놓으면 훌륭한 차가 되는 것과 같습니다.

 

비유가 이상했을 수도... 있을 거 같은데... 

아무튼, 상업용 프로그램과 근본적이 차이라고도 느껴지는 게, 다른 프로그램들은 옵션까지 사용하기 편하게 잘 만들어서 출시합니다. 팔아야 하니까요. 하지만 블렌더는 3d 전반에 걸쳐 핵심 기능들을 최대한 제공하는 데 초점을 둔 거 같습니다. 제품을 제공하기보다 좋은 작업 환경을 제공하는 느낌입니다.

마치, warp 노드를 블렌더에서 직접 만들어 제공하기보다, 사용자가 warp 노드를 만들어 사용할 수 있는 환경을 제공하는 느낌이랄까...

 

(이건 어디까지나 개인적인 의견인데... 그러다 보니 블렌더를 사용하다 보면, '이런 거 정도는 그냥 편의 기능으로 넣어주지' 하는 경우도 종종 있는 거 같아요. 예를 들어 노말맵 사용할 때 노말 y축이 뒤집혀 있으면 사용자가 일일이 노드를 만들어서 뒤집어 줘야 합니다. 그냥 노멀맵 노드에 바로 뒤집을 수 있는 버튼 하나만 만들어 주면 얼마나 좋나요. 이 버튼이 없으니 사용자는 노말을 뒤집는 방법을 연구하고, 만들어 써야 합니다. 노말 문제야 간단한 거지만 warp처럼 점점 복잡해질수록, 그냥 다른 프로그램처럼 이런 노드를 블렌더 자체적으로 지원해 주면 안 되나? 하는 생각이 들기도 합니다.

 

근데 또 이게 관점을 바꿔보면 괜찮기도 한 게... warp니 뭐니 하는 사용자에 따라 쓸지 안 쓸지도 모르는 기능들을 잔뜩 제공하는 대신, 이런 건 사용자에게 맡기고 3d 기술이나 이슈 자체에 더 초점을 맞춰 업데이트해 가는 분위기라.

그리고 커스텀 환경이 좋아 블렌더를 다양하게 쓸 수 있는 건 정말 좋은 거 같아요.)

 

 

 

이제 블렌더에서 아래 별 이미지를 오른쪽처럼 왜곡시켜 보겠습니다. 

 

아래 그림처럼 노드를 연결하면 됩니다. 그러면 이미지가 왜곡되죠. mixColor 노드의 factor 값을 조절해 보면 왜곡되는 정도가 변합니다.

 

 

 

여기서 2번 이미지 텍스처는 별 이미지입니다. 외부에서 별 이미지 하나를 불러왔습니다. 파란색 박스 친 노드는 이 별 이미지의 좌표를 지정해 줍니다. 

 

 

아래 그림과 같습니다. 이게 기본 별의 좌표입니다. 

 

 

이 상태에서 mapping 노드의 좌표를 움직이면 별 텍스처 모양이 바뀌게 됩니다.

 

 

이게 처음에는 직관적으로 보이지 않을 수도 있습니다.

아래 그림처럼 별 이미지를 불러오고, 그 별 위치를 오른쪽으로 1m 움직이겠다. 실제 이렇게 생각하는 게 더 맞아 보이기도 하고요. 하지만 블렌더에는 이미지를 움직일 수 있는 노드가 없습니다. 이렇게 불러온 이미지는 좌우로 움직이거나 회전하거나 스케일을 조절할 수 없습니다. 

 

 

 

아래 그림처럼 오브젝트에 좌표를 만들어 놓고 그 좌표에 이미지를 입히는 방식입니다. 

 

 

그래서 아래처럼 연결해 줘야 올바로 작동합니다. Texture Coordinate는 좌표를 생성하는 기준을 의미합니다. Texture Coordinate는 3d 오브젝트에 좌표를 만들어 줍니다. 그렇게 만들어진 좌표를 조절해 주는 게 mapping 노드입니다. mapping 노드에서 x축으로 1m 움직이면 3d 오브젝트의 좌표가 x축으로 1m 움직입니다. 그러면 거기에 맞춰 이미지를 입혀줍니다. 

 

 

그런데 이미지 텍스처 노드에서 Repeat 명령으로 이미지가 반복되도록 설정해 놓았기 때문에 별 이미지가 오른쪽으로 1m 이동한 것처럼 보이는 겁니다.

 

 이미지를 움직인 게 아니라 이미지를 표현해 주는 좌표를 움직인 게 이미지를 움직여 주는 것처럼 보이는 거죠. 발상의 전환이랄까요. 마치 아래 그림에 빨간색으로 표시한 별을 보여주다 파란색 표시한 곳으로 좌표를 옮겨갔는데, 뷰포트 상에서는 이미지가 왼쪽으로 움직이는 걸로 보이는 것처럼요.

참고로 Texture coordinate 노드에 연결되지 않은 상태에서는 좌표를 UV에 맞춰 자동으로 만들어 줍니다. Texture coordinate 없이 이미지 노드만 가져다 써도 잘 표현되었던 이유입니다.

 

 

 

밑에는 이런 방식으로 Wave Texture를 하나 만들었습니다. wave의 좌표 역시 mapping 노드를 통해 아래 그림처럼 옮겨주었고요.

 

 

이렇게 만들어진 오브젝트의 좌표를 Linear Light로 섞어주는 겁니다.

 

 

mix 노드의 A는 별 이미지의 좌표입니다. 아래 그림처럼 좌표가 반듯하게 잘 만들어져 있었겠죠.

 

 

 

이 좌표를 Linear Light로 블렌딩하면 아래처럼 됩니다. Wave의 밝은 영역, 즉 0.5보다 큰 영역에는 좌표를 더해주게 됩니다. 어두운 영역, 0.5보다 작은 영역에는 좌표를 빼주게 됩니다. 그래서 이미지를 표현해야 하는 좌표가 왜곡이 되고, 이 왜곡된 좌표에 입혀지는 이미지가 왜곡된 것처럼 보이게 됩니다.

 

 

물론 Linear Light 말고 add나 subtract 등의 다른 블렌딩을 써도 이미지가 역시 왜곡되기는 합니다. 당연하지만 좌표값이 변하니까요. 중요한 핵심은 linear light는 0.5보다 크면 더하고, 작으면 뺀다는 거죠. add나 subtract는 이미지 왜곡이 한 방향으로 생깁니다. linear light는 왜곡시켜 주는 이미지(B)에 따라 왜곡이 양방향으로 작동하게 됩니다. 왜곡이 한 방향으로 쏠리지 않게 할 수 있어서 유용하게 사용할 수 있습니다.

 

이런 이미지의 변경을 수학적으로 계산해서 좌표가 어떻게 변하고... 그러면 모양이 어떻게 변하고... 하고 고민하는 것은 꽤나 어려운 일입니다. 그래서 이미지 B를 보면서 대충 어떻게 변하겠구나 하고 예상하기 쉬워야 합니다. 

 

이때 이미지는 0.5 회색을 기준으로 밝고, 어둡게 분포되어 있는 게 좋습니다. 그래야 좌표가 한 쪽으로 쏠리는 걸 막을 수 있습니다. 컬러 램프로 조절해 주면 되죠. Linear light로 좌표를 블렌딩했을 때, 연결해 주는 이미지에 따라 어떻게 텍스처가 변해가는지 볼 수 있습니다. 

 

 

 

섭스턴스 디자이너처럼 warp 되는 과정을 그냥 노드 하나로 다 제공해 주면, 이미지를 어떻게 변경시킬 수 있을까 하는 고민이 필요가 없죠. 그냥 만들어진 노드 가져다 쓰면 되니까요. 하지만 블렌더는 기본 노드는 제공하지만 활용하는 방법은 사용자에게 맡기다 보니, 배경지식처럼 이런 방식을 몇 개 알아두는 게 생각보다 도움이 많이 되었습니다. 제 경험으로는 블렌더 자체에서 배경지식들을 기술로 활용하는거 보다도, 인터넷상에 떠도는 정보들을 더 쉽게 이해할 수 있었다는 게 더 좋았던 것 같습니다. 블렌더의 가장 큰 장점이라고 생각하는데, 인터넷상에 관련 정보가 엄청 많습니다.

 

[blender node] 02. Mix Color (4)


[blender node] 02. Mix Color (4)  - 연결된 글입니다.

 

02. Mix Color (1)
02. Mix Color (2)
02. Mix Color (3)
02. Mix Color (4)
02. Mix Color (5)
02. Mix Color (6) - RGB 3채널

02. Mix Color (7) - 마스크를 이용한 이미지 합성


 

 

 

 

반응형

'블렌더 > 쉐이더' 카테고리의 다른 글

[blender node] 02. Mix Color (6) - RGB 3채널  (2) 2023.12.26
[blender node] 02. Mix Color (5)  (0) 2023.12.25
[blender node] 02. Mix Color (3)  (1) 2023.12.21
[blender node] 02. Mix Color (2)  (1) 2023.12.20
[blender node] 02. Mix Color (1)  (1) 2023.12.19