수련의 과정/그래픽지식

[그래픽] 노말맵 개념정리

디지털 환경미화원 2024. 3. 2. 00:16

https://www.youtube.com/watch?v=NSLT6CoUUK0

해당 영상을 참고하여 진행한다

우리가 칭하는 노멀맵의 "normal" 은 면에 수직인 방향으로 나아가는 법선백터를 말한다.

각 vertex 는 하나 또는 여러개의 노말을 가질 수 있다.  텍스쳐로써 사용되는 [normal map] 의 데이터는 

이런 로우폴리곤의 노멀방향을 하이폴리곤에 투사하여 얻는 것이다.

 

왼쪽은 평균버텍스 노멀이고 오른쪽은 스플릿버텍스 노멀이다      

 

 

 

1. vertex의 normal이 완전히 나뉜 스플릿 버텍스 노멀 (완벽히 끊겨보임)

2. 에버리지 버텍스 노멀 (하나로 연결되어 보임)

3. 위와 같지만 스플릿 버텍스 노멀 (완벽히 끊겨보임)

4. 에버리지와 스플릿의 중간정도

 

openGL 은 노말맵이 튀어나와 있으면 튀어나와 보이고, 들어가면 들어가 보인다. 하지만 DirectX는 들어가보이면 실제로는 나와 있는 것이다. (반대) 맥스와 블랜더가 DirectX 방식이다. DirectX 방식은 Y의 방향이 아래를 향하고 있으며 그게 맞다. OpenGL 방식으로 제작된 텍스쳐는 수동으로 Y방향을 아래로 바꿔주어야 한다. 번거롭다. 그렇기 때문에 섭페와 UE5에서의 설정이 directX 방식으로 되어있는지 확인해야 한다.

 

 

 

 

 

작업을 하다보면 노말과 관련된 이슈가 생긴다.

3ds max 에서 Edit Normal 기능을 실행하면 나오는 모습

 

간혹 3d max에서 노말 출력이 특정 부분만 이상하게 되던 경험이 다들 있을 것이다.

그럴땐 Edit Normal 기능을 사용하여 노말 백터를 확인해 주자.

만약 에버리지가 아닌 스플릿 백터를 발견하였다면 클릭 후 unify를 눌러서 고쳐주도록 하자.

 

베이킹을 하다보면 간혹 노말맵이 한쪽으로 치우치는 경험을 하게 된다

 

이렇게 되는 이유는 로우폴리의 꺾이는 부분인 1번과 2번의 에버리지 값을 낸 노멀 방향이 서로 다르기 때문이다.

이것에 대한 해결법이 두 가지 있다.

 

에버리지가 분할되면서 왜곡이 줄어든다

 

1. 꺾이는 부분에 엣지를 추가하는 것

엣지가 늘어남에 따라 그곳으로부터 나오는 노멀 갯수가 늘어나게 되고 그 결과 편차가 줄어드는 원리라고 한다.

폴리곤 증가 이슈를 해결해야 한다면, 이렇게 베이크 하고 다시 지워주면 그만이다.

 

스무딩 그룹을 나눈 이미지이다

 

2. 스무딩 그룹을 나눠주는 것

스무딩 그룹을 나누게 되면, 각 버텍스는 로폴면에 수직인 노멀을 가질 수 있다.

에버리지 값이 아닌 각각 버텍스에 대한 수직인 노멀을 가질 수 있기 때문에 왜곡이 사라진다.

단점으로는 버텍스 갯수가 증가하며 seam 이 보이는 이슈가 생긴다.

 

버텍스 갯수가 증가하는 이유는, 3dmax 에서는 오브젝트 자체의 버텍스 갯수만 계산하지만

UE5에서는 스무딩 그룹, 분리된 uv 등 전부 고려하여 버텍스 카운트를 계산한다.

즉 스무딩그룹을 나누면 나눌수록, uv를 나누면 나눌수록 최종 데이터는 무거워지는 것이다.

 

 

그렇다면 seam 은 왜 생기나?

 

스무딩그룹이 하나면 에버리지 노말이고, 스무딩그룹이 각각 나뉘면 스플릿 노말인 것을 우리는 위에서 공부하였다.

 

만약 스무딩그룹이 하나인 에버리지 노말이라면 UV가 연결되어 있을 것이다.

그럼 A면과 B면은 그 중간값을 위해서 pixel 들이 서로 색을 보완한다.
A 의 색과 B의 색이 경계부분에서 만나면서 서로 섞인다는 것이다. 그래서 seam이 보이지 않는다.

 

하지만 스무딩그룹이 나뉘는 스플릿 노말이라면 UV가 서로 분리되어 있을 것이다.

그럼 A면과 B면은 서로 경쟁할 필요가 없다.

그래서 경계부분이 딱 나뉘어 보이는 것이다. 그게 seam 이다.

 

------

 

중요한 것들은 어느정도 기록한 것 같고 추가적인 것들을 적어보겠다.

 

 

1. 탄젠트 스페이스 노멀맵

- 버텍스의 노멀 방향에 기초하여 생성하는 가장 일반적인 맵 형태이다. 거의 이것을 사용한다고 보면 된다.

 

2. 월드 스페이스 노멀맵

- 버텍스 노멀방향은 고려되지 않으며, 로폴이 월드에서 빛을 반사하는 방향으로 고정시킨다. (손맵처럼)

- 이런 특성상 실시간으로 움직일 수 없으며, 게임 자체에 쓰이는 경우는 드물고 텍스처를 제작하는 데 이용된다.

(모델링의 방향성에 관련된 부분)

 

3. 오브젝트 스페이스 노멀맵

- 월드 스페이스 노멀맵의 업그레이드 된 버전이다.

 

4. 벤트 노멀맵

- AO가 결합된 노멀맵이다. 어둠을 더 잘 잡아준다.