반응형

노멀맵이 이상할 때 무조건 다시 굽기 전에 확인할 것들

3D 작업을 하다 보면 분명 노멀맵은 제대로 구운 것 같은데 게임 엔진에 넣는 순간 뭔가 이상해지는 경우가 있다.

면이 움푹 들어가 보이거나, 빛의 방향이 뒤집혀 보이거나, 특정 부분만 검게 깨지기도 한다.

이럴 때 가장 먼저 드는 생각은 보통 이거다.

“베이킹이 잘못됐나?”

그래서 다시 굽고, Cage를 수정하고, High Mesh 위치를 확인하고 또 굽는다.

그런데 의외로 문제는 베이킹이 아니라 전혀 다른 곳에 있는 경우가 많다.

1. DirectX와 OpenGL부터 확인한다

가장 흔한 원인 중 하나다.

노멀맵에는 크게

* DirectX 방식
* OpenGL 방식

두 가지가 있다.

차이는 간단하게 말하면 Y축, 즉 Green Channel의 방향이 반대라는 것이다.

그래서 Substance Painter나 Blender에서는 정상으로 보였는데 Unity나 Unreal에 넣었더니 음영이 뒤집혀 보일 수 있다.

이럴 때는 노멀맵을 다시 굽기 전에 먼저 Green Channel 방향부터 확인해 보는 게 좋다.

Substance Painter에서 Export Preset을 선택할 때도 이 부분을 확인해야 한다.

2. 노멀맵이 정말 ‘Normal Map’으로 인식되고 있는지 본다

게임 엔진에 텍스처를 넣었다고 끝이 아니다.

Unity에서는 Texture Type이 Normal Map인지 확인해야 하고, Unreal에서도 노멀맵용 Compression Settings가 제대로 적용됐는지 확인할 필요가 있다.

그냥 일반 RGB 텍스처처럼 읽어버리면 결과가 이상해질 수 있다.

특히 다른 프로젝트에서 텍스처를 복사해 왔을 때 이런 실수가 종종 생긴다.

3. 메시의 스케일을 확인한다

Blender에서 작업하다 보면 오브젝트 크기를 조절한 뒤 Scale을 Apply하지 않은 상태로 Export하는 경우가 있다.

화면상으로는 아무 문제 없어 보이지만 Tangent Space 계산이나 베이킹 과정에서 예상하지 못한 문제가 생길 수 있다.

Blender라면 보통

Ctrl + A → Scale

을 적용한 뒤 Export하는 편이 안전하다.

물론 이미 리깅이나 애니메이션이 들어간 모델이라면 무조건 Apply부터 하면 곤란할 수 있으니 파이프라인에 맞게 판단해야 한다.

4. 하드 엣지와 UV Seam을 같이 본다

여기가 꽤 중요하다.

노멀맵 베이킹에서 Hard Edge와 UV Seam 관계를 제대로 잡지 않으면 특정 모서리에서 이상한 음영이나 검은 선이 생길 수 있다.

특히 각도가 크게 꺾이는 부분에서는 무조건 하나의 부드러운 면으로 처리하기보다는 적절하게 Normal을 끊어주는 것이 좋다.

그리고 그런 부분은 UV도 함께 나눠주는 쪽이 안정적인 경우가 많다.

무조건 폴리곤 수를 줄이고 UV Island를 줄이는 게 좋은 최적화는 아니다.

결국 게임 화면에서 깨지면 아무 의미가 없다.

5. Tangent 계산 방식도 확인한다

DCC 툴에서 계산한 Tangent와 게임 엔진에서 계산하는 Tangent가 다르면 미묘하게 노멀 표현이 달라질 수 있다.

특히 예전에는 프로그램마다 Tangent 계산 방식이 달라서 꽤 골치 아픈 문제였다.

요즘은 MikkTSpace가 널리 사용되면서 많이 나아졌지만 그래도

어디에서 Tangent를 계산했는지

정도는 알고 있는 것이 좋다.

FBX Export 설정이나 게임 엔진 Import 설정에서 Tangent를 가져올 것인지 다시 계산할 것인지에 따라 결과가 달라질 수 있다.

6. 노멀맵 자체보다 메시 노멀을 의심해 본다

이것도 자주 놓친다.

Weighted Normal이나 Auto Smooth 같은 작업을 한 뒤 메시를 수정하면 Vertex Normal 상태가 예상과 달라지는 경우가 있다.

노멀맵을 꺼봤는데도 기본 라이팅부터 이상하다면 텍스처 문제가 아닐 가능성이 높다.

이럴 때는 노멀맵을 계속 수정하는 것보다 메시 자체의 Normal부터 확인하는 것이 빠르다.

결국 중요한 건 원인을 나눠서 보는 것

노멀맵에 문제가 생기면 무조건 베이킹부터 다시 하는 습관이 생기기 쉽다.

하지만 실제로는

베이킹 → 텍스처 → 메시 노멀 → Tangent → 엔진 Import 설정

이 모든 과정이 연결돼 있다.

그래서 나는 이런 문제가 생기면 노멀맵을 다시 굽기 전에 먼저 엔진 설정과 메시 상태를 확인하는 편이 훨씬 효율적이라고 생각한다.

몇십 분 동안 다시 굽고 Cage를 고쳤는데 알고 보니 Green Channel 하나 뒤집으면 해결되는 문제였던 경험.

3D 작업 좀 해본 사람이라면 아마 한 번쯤은 있었을 것이다.

게임 그래픽 작업은 결국 이런 작은 문제들을 얼마나 빨리 찾아내느냐의 싸움이기도 하다.

반응형
And