블렌더/쉐이더

[blender node] 03. Texture Coordinate node (3)

노루3759 2024. 1. 4. 22:58
반응형

[blender node] 03. Texture Coordinate node (3)

 

Texture Coordinate를 사용한 마스크 합성

texture coordinate에서 오브젝트의 높이 값을 추출해서 재질 2개를 섞었습니다.

 

컬러램프로 마스크를 조여주면, 경계가 뚜렷해집니다. 이 상태도 나쁘지는 않은데, 노이즈를 좀 더 섞어서 자연스럽게 만들어 보겠습니다.

 

 

아래 그림처럼 쉐이더에 노이즈 텍스처를 연결하면, 오브젝트에 노이즈 무늬를 이미지처럼 사용할 수 있습니다. 이미지로 표현되기 때문에 컬러램프를 달아서 사용할 수 있죠.

 

 

노이즈 텍스처 노드는 이미지를 만드는 계산 방식을 따라 블렌더가 자동으로 3d 오브젝트에 이미지를 만들어 줍니다.

이미지를 외부에서 불러오는 게 아니라, 프로그램이 이미지를 수학적으로 계산해서 만들어 주는 겁니다. 이렇게 계산으로 만들어지는 이미지를 3d texture라고 부르고, 블렌더는 여러 종류의 3d texture를 제공합니다.

noise texture는 Fac 출력에서는 흑백의 값을, color 출력에서는 컬러값을 모두 지원해 줍니다. 그리고 텍스처로 사용하다 보니 이미지 사용하는 것처럼, vector에 texture coordinate와 mapping을 연결해서 사용할 수도 있고, 컬러램프를 달아서 사용할 수도 있죠.

 

 

3d texture는 몇 가지 장점이 있는데, 첫째로 노드의 입력값을 조절해서 이미지를 바로바로 변경할 수 있다는 겁니다.

scale, detail, roughness 등등 여러 가지 값을 수정하면 noise texture가 변화하는 모습을 3d 뷰에서 눈으로 바로 확인할 수 있습니다.

 

 

둘째로 계산으로 만들어지는 이미지다 보니, 이미지가 오브젝트에 자연스럽게 만들어집니다. 전에 봤던 것처럼, 3점이 만나는 곳에 벽돌 이미지가 어긋나듯 이미지가 어색해지는 현상이 없죠.

 

 

아무튼, 노이즈 텍스처 노드도 이미지의 한 종류라고 생각하고 사용하시면 됩니다.

 

그래서 A 이미지에서 B 이미지를 빼 주겠습니다. 

 

이때, B의 이미지가 밝을수록 아래처럼 A에서 빠지는 마스크도 많겠죠. 그래서 컬러램프에서 마스크를 눈으로 보면서 조절하시면 됩니다. 이런 건 어떻게 더하고 빼야 한다... 하는 것보다, 작업자가 눈으로 마스크를 보면서 원하는 대로 조절해야 합니다.

 

 

 

그리고 여기에 또 컬러램프를 달아주겠습니다. 이렇게 만들어진 게 아래 마스크입니다. 

A와 B를 subtract 블렌딩으로 섞었고, 재질에 돌 반, 눈 반 이렇게 있는 게 어색해 보여서 마스크의 대비를 좀 뚜렷하게 만들어 주었습니다.

 

 

이제 이걸 mix shader의 마스크로 사용할 수 있습니다.

 

 

왼쪽처럼 보이던 장면을 노이즈 텍스처를 블렌딩 해서 오른쪽처럼 만들어 주었습니다. 여기서 노이즈 텍스처를 원하는 대로 조절해 보시면 사용자의 입맛에 맞게 디테일을 만들어 나갈 수 있습니다.

중요한 건 언제나 사용자가 '눈으로' 재질이 만들어지는 과정을 보면서 작업하는 겁니다. 

 

 

이제 컬러램프를 조절해 눈의 높이를 조절할 수 있습니다.

 

 

 

texture coordinate normal

이번에 normal을 함께 사용해 보겠습니다.

 

texture coordinate의 normal 옵션은 아래 그림처럼 오브젝트 안에서, 각 면의 노말 벡터를 구별할 수 있습니다. 노말값이 다 달라지는 게 보이죠.

 

 

노말을 각 채널별로 separate 해보면 x, y를 구별할 수 있습니다. 그런데 이렇게 x, y, z에 딱 맞춰서 떨어지기보다 특정 방향을 찾아주는 노드가 하나 있습니다. 

 

 

바로 normal 노드입니다.

아래 그림처럼 normal을 연결해 놓고 구 모양을 드래그해서 빛의 방향을 바꿔주면, 오른쪽의 오브젝트에 흑백의 마스크가 생성되는 걸 볼 수 있습니다. 이때 출력 소켓에서 Normal이 아닌 Dot을 사용하셔야 합니다.

 

 

 

 

이 구는 빛이 들어오는 방향을 정의해 줍니다. 노말 노드에서 구를 드래그 해서 직접 빛의 방향을 정의할 수 있습니다.

구에 비치는 빛의 방향과 같은 곳을 향하는 면을 흑백으로 검출해 주죠.

 

 

참고로 z는 아래와 같습니다. 구를 위에서 내려다보는 방향이 +z, 아래에서 올려다보는 방향이 -z입니다.

 

 

 

벡터의 내적

원리는 dot product에 있습니다.

벡터 연산에서는 벡터의 방향과 크기를 결정하는 몇 가지 수학적인 방법이 있는데 그중 하나가 dot product, 우리말로 벡터의 내적 연산입니다.

 

아래 그림처럼 벡터 a, b 가 있을 때, a 벡터와 b 벡터의 내적은 다음과 같습니다. 

마우스로 쓰려니까 잘 안 써지네요...

 

어떤 벡터 두 개를 내적 하면 a * b * cosθ 가 됩니다.

여기서 a와 b는 방향을 가리키는 노멀 벡터이므로, 항상 1 값을 가집니다. 

즉, a벡터 b벡터의 내적은 cosθ가 결정하게 됩니다.

그런데 0도에서 180도 사이(0 ~ π)의 코사인 값은 항상 1 ~ -1 값을 가집니다.

 

 

바로 이런 방식으로, 면의 normal 방향을 dot product 해서 특정 방향을 검출해 주는 겁니다.

 

빨간 벡터와 초록 벡터의 방향이 같으면 1, 수직이면 0, 서로 반대 방향이면 -1입니다.

그리고 그 사이의 값들은 각 벡터가 향하는 방향에 따라 1 ~ 0, 0 ~ -1 값을 가지게 되는 겁니다. 

 

중요한 것은 벡터의 방향을 -1 ~ 1에 해당하는 숫자로 표현할 수 있다는 거죠. 블렌더는 이 수학적인 결과를 색으로 표현해 주고, 그러면 우리는 눈으로 그 결과를 보면서 마스크로 사용하는 겁니다.

 

 

다시 우리가 처음 살펴봤던 박스로 가보겠습니다.

아래 박스의 normal 값을 색으로 표현해 주니 아래와 같았죠.

 

 

아래 박스의 노멀들과 화살표 오브젝트의 방향(1, 0, 0)을 dot product 하는 노드가 아래와 같습니다.

 

박스의 면이 이루는 각 노멀들과 (1, 0, 0) 벡터를 내적 하는 노드입니다. 그러면 (1,0,0)과 같은 방향은 흰색, 수직이거나 반대 방향은 0 ~ -1에 해당해 검은색이 나오는 겁니다.

 

복잡하게 생각할 거 없이 내적(dot product)은, 그 방향과 같은 normal을 가지는 면들을 흰색으로 검출해 줍니다. 점점 방향이 어긋날수록 회색으로 가다, 완전히 방향이 틀어지면 검은색이 됩니다.

이걸 아래 그림처럼 시각적으로 표현해 봤습니다. 

 

 

노말 노드는 이 연산을 자동으로 해 줍니다. 아래 그림처럼 x와 y 중간에 위치하게 구를 움직여보면, 뷰포트에서고 x와 y 중간을 바라보는 면들이 흰색으로 바뀝니다. 나머지는 그 각도에 따라 회색 ~ 검은색까지 그라데이션 져서 표현됩니다. 이 주황색 화살표와 수직이거나 반대를 향하는 면들은 아예 검은색으로 표현됐습니다. 우리는 그냥 Dot이라는 소켓에서 나오는 Dot Product 결과를 눈으로 보면서 사용하면 됩니다.

 

Texture Coordinate의 normal은 이런 식으로, 오브젝트 면의 방향을 이미지로 쓸 수 있게 좌표를 만들어 주는 역할을 합니다.

 

다만, 이 경우에는 태양이라든지, 외부 오브젝트의 벡터 방향을 가져와 쉐이더에서 활용하는 게 더 정확하겠죠. 거기까지 가려면 설명이 너무 길어지니 일단 이렇게 마무리하겠습니다.

 

 

역시 컬러램프를 달아서 원하는 만큼 마스크를 조절해서 사용합니다.

 

 

이 녀석을 아래 마스크와 블렌딩 해서 섞어 주겠습니다. 높이에 따른 흑백 마스크를 하나 더 만들었습니다.

 

 

이 두 노드를 multifly로 블렌딩 해줬습니다. 컬러램프를 달아 조절하면, 마스크의 콘트라스트를 조절할 수 있습니다.

 

 

컬러 램프를 조절해 보니 마스크의 섞인 정도가 바뀌는 걸 알 수 있습니다. 이런 식으로 눈을 표현해 줄 마스크의 범위를 조절할 수 있죠.

 

 

이렇게만 두면 어색하니, 또 노이즈 텍스처를 하나 만들어 섞어 줍니다. 이번에는 아래 그림처럼 노이즈 노드에도 이미지를 사용하듯 좌표를 달아 사용했습니다. x축으로만 스케일을 증가시켜, 노이즈 이미지를 x 축으로 쭉 늘어뜨렸습니다. 이걸 또 위 마스크와 블렌딩 합니다.

 

 

이렇게 노멀로 만든 마스크를, 이전에 만들었던 마스크와 또 블렌딩 해 줍니다. 

 

 

이렇게 만들어진 결과입니다.

 

 

이 마스크를 사용해 눈과 땅 재질을 섞어주면 비로소 우리가 처음 생각했던 재질이 완성됩니다.  

 

 

이렇게 특정 정보를 사용해서 오브젝트에 이미지로 표현하고, 그 이미지를 더하고, 빼고, 섞어서 마스크를 만들고, 마스크로 재질을 표현해 나가는 작업의 반복입니다. 

 

꼭 블렌딩이나 컬러 램프를 조절할 때, 정해진 방법으로만 하지 말고, 더하고 빼고 곱하고 등등 다양한 방법을 시도해서 마스크를 표현해 보시기 바랍니다. 맘에 들지 않으면 화면을 보면서 고치면 되니까요.

 

저는 전체적인 모양이 별로 마음에 들지 않아 컬러램프를 전체적으로 조금 조절해 보았습니다.

큰 디테일과 노이즈 디테일이 조금 더 자연스럽게 섞이도록 컬러램프의 색상값을 하나씩 조절해 봤습니다.

 

컬러 램프를 조절하면 아래처럼 눈이 조금씩 줄어드는 모습을 볼 수 있습니다. 

 

이러면 앞면은 눈이 줄어들지만, 빛을 받지 않는 뒷면은 눈이 녹지 않고 그대로 있는 모습을 표현할 수 있습니다.

 

texture coordinate의 좌표를 이용하면 오브젝트에 다양하게 이미지를 입힐 수 있습니다.  

 

[blender node] 03. Texture Coordinate node (3)


[blender node] 03. Texture Coordinate node (3) - 연결된 글입니다.
 

03. Texture Coordinate node (1)

03. Texture Coordinate node (2)

03. Texture Coordinate node (3)

03. Texture Coordinate node (4)

03. Texture Coordinate node (5)

03. Texture Coordinate node (6)


 

반응형