[blender node] 03. Texture Coordinate node (2)
Texture Coordinate node
Normal
다음으로 Normal을 살펴보겠습니다. 말 그대로 오브젝트의 노멀 정보를 가져올 수 있습니다.
오브젝트의 법선 벡터(노말 벡터)를 텍스처 좌표로 불러와 사용할 수 있게 해 줍니다.
아래 그림을 보겠습니다.
쉐이더 창에서 노드를 Ctrl + shift + 마우스 왼 클릭으로 빠르게 미리 보기를 할 수 있다고 했었습니다. 블렌더에서 5손가락 안에 들어간다고 할 만큼 유용한 단축키이므로 꼭 사용하길 추천해 드립니다.
Texture Coordinate에서 Normal을 미리보기 하면 아래처럼 각 면에 색이 나타납니다. 이 색은 면의 노말 벡터값을 색으로 표현해 준 겁니다. normal은 각 면에 수직인 벡터를 의미합니다.
빨간 면에 수직인 벡터는 (1, 0, 0)이 됩니다. 이게 빨간면에 수직인 normal 벡터가 됩니다. 이 벡터를 RGB 색상으로 표현하면 (1, 0, 0) => 빨강이 되는 겁니다. XYZ 축을 RGB 방식으로 표현해서 색으로 표현한 결과입니다.
이렇게 면의 방향을 좌표로 만들어 주는 게 Texture Coordinate의 Normal 좌표입니다.
아래 구 형태의 오브젝트로 좀 더 많은 면을 살펴보겠습니다.
면에는 각 면의 normal 값에 따라 좌표가 매겨졌습니다. 그걸 시각적으로 RGB 색상으로 볼 수 있게 해 준 겁니다.
이 상태에서 아래처럼 Shade Smooth를 주면 면의 노멀색이 전체적으로 그라데이션 지며 섞이는 걸 볼 수 있습니다.
solid 뷰에서 보면 각져 있던 구가 부드러워 보이게 됩니다. 하지만 확대해서 보면... 여전히 각져 있습니다. 각져 있는 면을 마치 부드럽게 보이도록 눈속임을 한 거죠. 이전에 노멀 관련 글에서 노멀은 '표면이 마치 그런 것 '처럼' 보여준다'라고 설명한 적이 있습니다. shade smooth도 바로 오브젝트의 노멀들을 평균내서 부드럽게 보이도록 만드는 기술입니다.
(Blender의 Shade Smooth 옵션은 3D 모델의 표면을 부드럽게 표현하는 데 사용됩니다. 이 옵션을 적용하면 모델의 각 면 사이에 있는 각도에 따라 조명이 부드럽게 변화하게 됩니다.
사실 3d에는 면만 normal을 가지는 게 아니라 점, 선, 면 모두 normal을 가지고 있습니다.
Blender는 각 정점(버텍스)의 법선 벡터를 사용하여 평균 법선 벡터를 계산하고, 이를 사용하여 표면을 부드럽게 표현해 줍니다. 이렇게 정점에서의 법선 벡터 사이를 부드럽게 보간하는 방법을 사용하게 되는데, 컴퓨터상에서는 현실 세상처럼 모든 요소를 다 고려해서 시뮬레이션할 수 없기 때문에 적절한 보간 방법을 고려해야 합니다.
여기에 대해서 구체적인 설명을 말하자면, 내용과 관련 없는 글이 너무 길어지는 것 같아서 다음 기회가 생기면 언급하도록 하겠습니다.)
Texture Coordinate 응용
이렇게만 봐선 잘 와닿지 않을 거 같아서 아래 예시를 보도록 하겠습니다.
Texture Coordinate를 사용하는 가장 전형적인 튜토리얼입니다.
유튜브에서 참고할 만한 영상을 찾았습니다. 관심 있으면 한 번 참고하시면 좋을 것 같네요.
Blender Material Getting Started with Texture Coordinate (youtube.com)
먼저 블렌더에서 산 지형을 만들기 위해 Landscape 에드온을 켜줍니다. 이 에드온은 블렌더에서 기본으로 제공하는 무료 addon이라 별다른 설치 없이 블렌더 내에서 체크하는 것만으로 사용할 수 있습니다.
shift A >>> Mesh 항목에 보면, 가장 밑에 Landscape라고 새로운 항목이 생긴 걸 볼 수 있습니다.
눌러보면 아래 그림처럼 지형이 생기고, 조절할 수 있는 옵션들이 생깁니다. 옵션들이 직관적이라 어려운 건 없으니, 한번 만져 보면서 사용하시면 됩니다. 그리고 이미 프리셋이 잘 만들어져 있습니다. 어려운 지형들도 쉽게 만들 수 있습니다.
이제 여기에 재질을 입힐 건데, 아래 그림처럼 landscape로 만든 지형에 눈을 섞어 줄 겁니다.
이때, Texture Coordinate의 Generated 좌표로 특정 높이 이상을 마스크로 만들면, 눈과 돌의 재질을 구분할 수 있습니다. 그리고 normal 좌표로 특정 방향을 또 구별해 낼 수 있죠. 그러면 눈이 태양을 받아 녹는 위치와 그렇지 않은 위치를 구별할 수 있습니다.
오브젝트를 뒤로 돌려보면, 뒷면은 눈 재질이 남아 있습니다. 이렇게 앞면과 뒷면 등 특정 면을 골라주기 위해 texture coordinate의 normal 옵션을 선택할 수 있습니다.
제 블로그에서 계속 설명했던 대로, 마스크를 만들고, 마스크를 더하거나 빼고, 마스크를 기준으로 A 영역과 B 영역에 다른 재질을 섞어가는 겁니다. 오히려 3d 상에 장면을 만드는 작업이다 보니 예쁘게 만들려는 노력이 더 어렵게 만드는 것뿐이지, 원리는 매우 간단합니다.
일단 재질은 AmbientCG 사이트에서 그럴듯해 보이는 걸로 대충 골랐습니다.
땅 재질 하나, 눈 재질 하나 골랐는데, 모두 pbr 텍스처를 제공해 주니 이것만 사용해도 재질 표현을 쉽게 할 수 있습니다.
아래 그림처럼 오브젝트의 면을 전부 선택하고 Top view 상태에서, U >> Project from view (Bounds)를 선택하면 UV가 크기에 맞게 잘 펴집니다.
여기에 땅 재질을 하나 다운받아서 base color, roughness, normal 텍스처 3개만 연결해 줬는데도 그럴듯하게 나옵니다.
먼저 texture coordinate에 연결을 UV로 해 줬습니다. 그러면 텍스처 이미지가 오브젝트 전체에 딱 맞춰서 매핑됩니다. 텍스처가 오브젝트에 비해 큰 것 같으니, mapping의 스케일 값을 조절해 줘서 3d 상에서 이미지 크기를 조절해 줍니다.
텍스처 스케일값이 커져 노말이 잘 느껴지지 않아서 강도도 세게 해줬습니다. 오브젝트의 베이스 컬로에도 Brightness/Contrast 등 다양한 후속 노드를 달아 디테일하게 조절해 줄 수 있습니다.
이런 식으로 텍스처를 입맛에 맞게 쉐이더에서 조절해서 사용하시면 됩니다.
눈 재질도 만들어 줍니다.
이제 이 둘을 높이에 따라 섞어줄 겁니다. 그 마스크를 texture coordinate가 만들어 줍니다.
Generated는 오브젝트의 크기에 따라 0~1의 좌표를 만들어 준다고 했습니다.
이 세 값을 x, y, z 각각 따로 떼서 보면,
x는 오브젝트의 x 축을 따라 좌에서 우로 0~1 값을 가지게 됩니다.
y는 오브젝트의 y 축을 따라 앞에서 뒤로 0~1 값을 가지게 됩니다.
z는 오브젝트의 z 축을 따라 아래에서 위로 0~1 값을 가지게 됩니다.
이걸 0~1에 해당하는 그레이 스케일 색으로 표현하면 아래처럼 나오게 됩니다.
쉐이더는 이렇게 x, y, z 값을 색으로 표현해 줘서, 우리가 눈으로 알아보기 쉽게 만들어 줍니다.
그러면 이제 z 축에 아래처럼 ColorRamp를 달아서 높이에 대한 마스크를 만들고 조절할 수 있습니다.
x 축이면 좌우로, y 축이면 앞뒤로 마스크를 만들어 줄 수 있습니다.
이제 이 흑백의 마스크를 사용하면, 흰 영역에는 눈 재질이 들어가게, 검은 영역에는 땅 재질이 들어가게 표현할 수 있습니다.
아래처럼 연결해 주었습니다.
mix shader를 사용하면 두 쉐이더를 섞어 줄 수 있습니다. mix color와 방법은 동일하죠.
factor 값이 0, 즉 검은색이면 A 소켓의 재질이 나옵니다.
factor 값이 1, 즉 흰색이면 B 소켓의 재질이 나옵니다.
그래서 factor에 높이 마스크를 섞어주면, 높이가 검은색으로 표현되는 아래쪽은 땅 재질, 흰색으로 표현되는 위쪽은 눈 재질이 섞여 나오게 됩니다. 중간 회색 값은 각 비율에 따라 두 재질이 섞여서 나옵니다.
이 흑백 마스크의 경계가 뚜렷하면, 두 재질이 뚜렷하게 구별되어 표현됩니다.
마스크 경계가 그라데이션으로 부드럽게 이어지면 두 재질이 부드럽게 섞이는 것처럼 표현됩니다.
마스크는 범위도 중요하지만, 경계의 색깔 대비도 중요합니다.
쉐이더를 이용해 재질을 표현하는 작업은, 이렇게 마스크를 만들고 재질을 섞어가는 방법의 반복입니다.
[blender node] 03. Texture Coordinate node (2)
[blender node] 03. Texture Coordinate node (2) - 연결된 글입니다.
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)
'블렌더 > 쉐이더' 카테고리의 다른 글
[blender node] 03. Texture Coordinate node (4) (1) | 2024.01.05 |
---|---|
[blender node] 03. Texture Coordinate node (3) (1) | 2024.01.04 |
[blender node] 03. Texture Coordinate node (1) (1) | 2024.01.02 |
[blender node] 02. Mix Color (7) - 마스크를 이용한 이미지 합성 (1) | 2023.12.27 |
[blender node] 02. Mix Color (6) - RGB 3채널 (2) | 2023.12.26 |