[Tutorial #01] 04. normal map 적용
Normal
이번에는 노말을 연결해 보겠습니다.
아래 그림처럼 가져온 normal texture를 Normal Map 노드를 통해 Principled의 Normal 항목에 연결해 줍니다.
이때 Normal 텍스처의 Color Space를 Non-Color로 가져와야 한다는 걸 잊어버리시면 안 됩니다.
참고로 Roughness의 경우 표면 거칠기에 대한 데이터 정보를 나타내는 텍스처라 Non-color로 가져와야 하지만, 그렇지 않더라도 앞서 살펴본 것처럼 ColorRamp를 연결해서 색을 바꿔보면 됩니다. 뷰포트에서 거칠기가 어떻게 보이는지 잘 살펴보면서 내 입맛대로 조절하기가 쉽죠.
normal만 가져왔는데 벌써 씬이 달라졌습니다. 왼쪽 사진은 노멀맵 없이 pbr만 적용된 상태이고, 오른쪽은 노멀 + pbr이 적용된 상태입니다. 나뭇결을 따라 빛이 표현되어 더 리얼한 느낌을 낼 수 있습니다.
노멀맵을 사용하면 이렇게 표면의 디테일을 더 사실적으로 표현할 수 있어서, 많은 PBR 텍스처들이 노멀맵을 함께 제공합니다.
노멀 텍스처는 오브젝트의 표면 정보를 저장합니다. 그리고 쉐이더에서 이렇게 저장된 표면 정보를 불러와 사용하게 되죠.
아래 그림의 A는 아무것도 없는 평면입니다. 여기에 B 오브젝트 표면 정보를 노말 텍스처로 만들어서 A에서 사용하면, 아무것도 없던 평면 A의 표면이 마치 B처럼 튀어나오고 들어가 보입니다. 그렇게 만들어진 결과가 C 평면입니다.
실제 A도 C도 평평한 평면입니다. 하지만 A와 다르게 C는 표면이 튀어나오고, 들어간 것 '처럼' 보입니다. 각도를 살짝 기울여서 살펴보면 C는 실제로 평평한 걸 볼 수 있습니다.
'표면이 그렇게 보이는 것처럼 만드는 것' 이게 노말 텍스처의 역할입니다.
PBR 작업은 오브젝트의 표면 재질을 결정해 줍니다. 재질이 어떤 색으로 보이게 할 것인지, 금속처럼 보이게 할 것인지, 표면이 거칠게 보이게 할 것인지... 그리고 노말은 오브젝트의 표면에 시각적인 음영을 만들어 줘서 오브젝트가 마치 튀어나오고 들어간 것처럼 보이게 디테일을 추가해 줍니다.
Normal DirectX, OpenGL
normal 텍스처는 DirectX와 OpenGL 두 가지 종류가 있습니다. 블렌더는 OpenGL 방식을 사용합니다. 그래서 OpenGL방식으로 만들어진 노멀 텍스처를 사용하시면 됩니다.
둘 다 표면 정보를 저장한 데이터라는 것은 동일하지만, DirectX와 OpenGL 두 개가 저장하는 방법이 조금 다릅니다. 아래 방식으로 데이터를 저장합니다. DirectX와 OpenGL은 x와 z 값은 동일하지만 y 값이 서로 뒤집혀서 저장됩니다. 그래서 directx와 opengl의 노멀 텍스처가 정 반대로 보입니다.
사실 노멀맵이라는게 실제로 표면을 변형시키는 게 아니라 변형시킨 것처럼 보이게 해 주기 때문에 화면을 이리저리 돌려서 보면, 언제는 튀어나온 것처럼 보이다가도 다른 각도에서는 들어간 것처럼 보이기도 합니다. 원래 착시라는 게 이렇게 보면 이렇게 보이다가 저렇게 보면 저렇게 보이기도 하는 법이니까요.
이미지를 뒤집어 보면... 놀랍게도 hole과 bump가 바뀌어 보입니다. 스마트폰으로 보시는 분들은 폰을 뒤집어서 보면 hole과 bump가 반대로 느껴지실 겁니다.
그래서 막상 사용해 보면 OpenGL이고 DirectX고 어떤 노멀맵을 사용했든지 다 그럴싸해 보입니다. 아래 사진에서 차이를 구별할 수 있으신가요? 자세히 보면 분명 차이는 있지만, 그렇다고 해도 둘 다 그럴듯 해 보이는 것도 사실입니다.
하지만 빛을 움직여 보면 뭔가 잘못됐다는 것을 느낄 수 있습니다. 아래 그림은 서로 다른 방식의 normal map을 연결하였습니다. 이 상태에서 태양을 아래 그림처럼 한 바퀴 돌려 보겠습니다.
뭔가 이상하다는 게 느껴지시나요?
왼쪽은 태양의 회전 방향에 맞춰 돌아가는데, 오른쪽은 태양의 방향과 반대로 돌아갑니다.
노멀맵은 빛과 상호작용하여 맵 표면의 디테일을 표현해 줍니다. 한 장의 렌더링 장면에서는 둘 다 그럴듯해 보일 수 있지만, 애니메이션처럼 빛과 상호작용하는 씬에서는 장면이 부자연스럽게 보이게 됩니다.
Normal 변경하기
그래서 블렌더에서 노멀을 사용할 때에는 OpenGL 방식을 사용하시고, DirectX 노멀맵 밖에 없다고 하면 아래 그림처럼 normal의 y 축을 뒤집어서 사용해야 합니다.
이제 이 상태에서 Strength를 조절하면 노말의 강도를 조절할 수 있습니다. 장판처럼 표면에 나뭇결을 따라 우둘투둘한 디테일은 있지만, 겉은 코팅한 것처럼 보이게 하기 위해 노멀 강조를 조금 낮춰주었습니다.
[Tutorial #01] 04. normal map 적용
[Tutorial #01] 04. Normal map 적용 - 연결된 글입니다.
01. 블렌더 PBR 기본 재질
02. 블렌더 PBR 사용하기(1)
05. AmbientOcclusion (AO) 연결하기 (1)
06. AmbientOcclusion (AO) 연결하기 (2)
'블렌더 > 블렌더 튜토리얼' 카테고리의 다른 글
[Tutorial #01] 06. AmbientOcclusion (AO) 연결하기 (2) (1) | 2023.12.30 |
---|---|
[Tutorial #01] 05. Ambient Occlusion (AO) 연결하기 (1) (1) | 2023.12.29 |
[Tutorial #01] 03. 블렌더 PBR 사용하기(2) (0) | 2023.12.18 |
[Tutorial #01] 02. 블렌더 PBR 사용하기 (1) | 2023.12.16 |
[Tutorial #01] 01. 블렌더 PBR 기본 재질 (2) | 2023.12.15 |