베개발

노말맵 깨짐 해결법 (스무딩 그룹, UV Seam 설정) 본문

3D/공부 메모

노말맵 깨짐 해결법 (스무딩 그룹, UV Seam 설정)

pillow0204 2025. 4. 3. 00:57
728x90

모델링 작업 시 노말맵 베이킹 후 결과물에 깨짐 현상이나 검은 선, 어색한 쉐이딩이 나타나는 오류를 자주 경험했다.

이는 대부분 로우폴리 모델의 스무딩 그룹(Hard/Soft Edge) 설정과 UV Seam 위치가 불일치하여 발생하는 문제였다.

이 글에서는 노말맵 깨짐의 원인을 분석하고, 스무딩 그룹과 UV Seam을 올바르게 설정하여 문제를 해결하는 방법을 기록한다.

추가로 글 하단에 유용한 스크립트도 같이 공유한다.


노말맵 깨짐 현상 주요 원인 = 스무딩 그룹, UV Seam 불일치

 

하이폴리 모델의 디테일을 로우폴리 모델에 표현하기 위해 노말맵을 베이킹했는데, 아래 이미지처럼 모델의 각진 모서리나 특정 부분에 검은 선이 생기거나 면의 쉐이딩이 부자연스럽게 깨지는 현상이 발생했다.

 

이 노말맵 오류의 가장 흔한 원인은 로우폴리 모델의 스무딩 그룹 설정과 UV 펼침 시 생성된 UV 경계선(UV Seam)이 일치하지 않기 때문이었다.

섭페와 같은 프로그램에서 노말맵을 베이킹할 때 로우폴의 버텍스 노말 방향을 기준으로 하이폴 표면 정보를 계산하는데, 이 기준 정보가 UV 좌표계와 일치하지 않으면 계산 오류가 발생하여 텍스처 베이킹 결과물이 깨져 보이게 된다.

스무딩 그룹과 UV 분할이 어떻게 영향을 미치는지 비교한 참고 자료.

1) High-poly
- 하이폴리 모델로, 부드러운 엣지와 세밀한 디테일을 가지고 있다.

2) Separate smoothing groups and split UVs
- 각 면마다 별도의 스무딩 그룹을 설정하고 UV를 분할한 경우.
- 노멀 맵이 깨끗하게 적용되며, 아티팩트(잘못된 쉐이딩 현상)가 거의 없다.

3) Separate smoothing groups
- 스무딩 그룹을 분리했지만 UV는 하나로 유지한 경우.
- 일부 엣지에서 아티팩트가 보일 가능성이 있다.

4) One smoothing group and split UVs
- 하나의 스무딩 그룹을 사용하지만 UV를 분리한 경우.
- UV를 나눠서 노멀 맵을 적용했기 때문에 쉐이딩 아티팩트가 줄어든다.

5) One smoothing group
- 하나의 스무딩 그룹만 사용하고 UV도 나누지 않은 경우.
- 노멀 맵이 제대로 작동하지 않아서 쉐이딩 아티팩트가 가장 심하게 나타난다.

 

 

* 하드엣지에 UV Seam이 필요한 기술적 이유 (버텍스 노말)

 

이해가 필요한 부분은 버텍스 노말(Vertex Normal)과 3D 셰이딩 방식이다.

1. 소프트 엣지 (스무딩 그룹 O)

→ 연결된 면들이 부드럽게 보이도록, 엣지를 공유하는 버텍스의 노말 방향을 평균화하여 하나로 계산한다.


2. 하드엣지 (스무딩 그룹 X)

  각진 모서리를 표현하기 위해, 같은 위치의 버텍스라도 각 면이 바라보는 방향대로 노말 방향을 분리하여 여러 개로 취급한다. 즉, 하나의 버텍스 위치에 면 개수만큼의 노말 벡터가 존재하게 된다.

소프트 엣지와 하드 엣지


3.  UV Seam

   3D 표면을 2D 텍스처 좌표계 (UVW)로 펼치기 위해 잘라내는 선이다. UV 에디터 상에서는 이 Seam을 기준으로 버텍스가 분리(복제)되어 나타난다. (이 때문에 엔진에서 세주는 버텍스 갯수와 맥스에서 세주는 버텍스 갯수가 달라보일 때가 있는 것이다.)


4. 문제

   3D 모델 상에서는 하드 엣지로 설정하여 버텍스 노말을 분리했는데, UV 맵에서는 해당 엣지에 UV Seam이 없어 버텍스가 붙어있다고 가정해보자.

노말맵 베이킹 시 툴은 UV 좌표를 기준으로 픽셀 색상(노말 방향 정보)을 결정해야 하는데, UV 상으로는 하나인 버텍스가 실제 3D 공간에서는 여러 개의 노말 방향을 가지고 있으니 어떤 방향을 기준으로 샘플링해야 할지 혼란이 발생한다.

이 지점에서 주변 픽셀과 노말 방향이 급격하게 달라지며 깨짐 현상이 발생하는 것이다.


5.  따라서, 3D 모델에서 의도적으로 각지게 표현한 Hard Edge 부분은 반드시 UV 맵에서도 Seam으로 분리하여, 버텍스 노말이 분리되는 지점과 UV 좌표가 분리되는 지점을 일치시켜야 정확한 노말맵 베이킹이 가능하다.

 

 

 

UV islands to smoothing groups 스크립트

UVIslandsToSmoothingGroups.ms
0.01MB

 

*스크립트를 맥스로 드래그 하여 설치한 후, 단축키 또는 메뉴바로 지정 한 후 사용해야 한다.

오브젝트를 선택하고 이 스크립트를 실행시키면, UV seam이 나눠진 대로 스무딩그룹을 설정해준다.

 

해당 스크립트를 실행시켜서 스무딩 그룹을 나눈 뒤, 섭페에서 다시 베이크하면 오류가 대부분 없어진다.

*이때 weighted normal이나 다른 스무딩 관련 모디파이어를 적용시켰던 적이 있거나 한다면, smooth 모디파이어를 한번 적용해줘서 깨끗하게 리셋시킨 뒤 스크립트를 적용해 주도록 하자. 가끔 오류인지 스크립트를 실행해도 아무것도 바뀌지 않을 때가 있다.

300x250