그래픽 하시는 분들은 다들 알고 있는 적은 폴리곤으로 하이폴에 가까운 느낌을 낼 수 있는 유용한 제작 기법의 노멀맵. 하지만 왜 이 노멀맵이 푸른색을 띄고 있는지 생각 해 본적이 있나요?
여기에 대해서는 조금 뒤에 얘기 하기로 하고 먼저 원론적인 내용부터 간단히 설명 드리겠습니다.
모니터에 표현 되는 위와 같은 요철은 만져 보지 않아도 울퉁불퉁한 느낌? 구겨진 느낌? 같은 입체감을 느낄수 있습니다.
이유는 빛의 반사로 인한 명암비로 굴곡진 느낌을 받게 되는것입니다.
이런 정보값을 2D 이미지로 가져와 하이폴과 같은 느낌을 만들수 있는것이 법선맵 흔히 말하는 노멀맵이 됩니다.
이걸 그림으로 표현하면 아래와 같습니다.
노멀맵은 픽셀 단위로 계산하여 표현이 되는데 이 픽셀에도 각각의 3차원벡터 (x,y,z) 축을 가지고 있습니다.
여기서 z 축(노멀 벡터)이 위에 이미지에서 보이는 화살표 방향이라고 생각하면 됩니다.
그리고 특별한 과정(정규화)을 거쳐서 최소 -1 에서 최대 +1 까지의 범위를 가집니다.
이걸 2D 이미지 즉 노멀맵으로 만들게 되는데 마찬가지로 정규화 과정을 거쳐 최소 0 에서 +1 까지의 값으로 표현 됩니다.
(255컬러에서 정규화 값이 0.5 라고 하면 127.5컬러, 정규화 값이 1이라고 하면 255컬러가 되겠습니다)
이제 3차원 공간에 있는 벡터 값을 2D 이미지로 저장해 보겠습니다.
3차원 공간(x,y,z) -> 2D이미지(r,g,b)
즉 x축은 r채널로, y축은 g채널, z축은 b채널로 표현하게 되며 아래와 같이 비례식에 맞춰 rgb 채널로 저장 하게 됩니다.
(공간벡터가 채널에 저장 될때에 값이 변화 되는 과정)
xyz : -1 ~ 0.0 ~ +1
v v v
rgb : 0 ~ 0.5 ~ +1
이제 왜 노멀맵이 푸른색을 띄는지 설명 드릴수 있게 되었습니다.
z축 즉 노멀 값은 시작점에서 커지는 값(높이)으로 0 보다 작을수가 없습니다. z축 0은 채널로 변환하게 되면 0.5가 됩니다.(위에 변환 식을 참고 하세요)
이런 이유로 모든 픽셀의 최소값은 항상 0.5 (127.5컬러) 를 유지 하기 때문에 언제나 푸른빛을 띄게 되게 됩니다.
위에 이미지에서 벽돌 우측부분이 붉은색을 띄고 있는데 이부분도 xyz 축에서 x축이 우측을 바라보기 있기 때문에 +1 이되며 그로 인해 r채널에서 언제나 +1 값을 유지 하기 때문입니다. 왼쪽 부분이 어두운 이유 또한 x축 값이 왼쪽을 바라보면 -1 로 r채널에서는 0의 값을 가지기 때문입니다.
벽돌의 아래가 녹색이 강한 이유도 위와 마찬가지로 아래쪽을 바라 보고 있는 쪽은 y축값이 +1 즉 b채널도 +1, 위쪽을 바라보는 방향은 y축 -1 로 b 채널은 0 의 값을 가지게 됩니다.
뒤로 갈수록 조금 어려운 부분이 있지만 위에 있는 빨간색으로 표시해둔 식만 잘 이해 한다면 쉽게 이해 할수 있을거라고 생각합니다. 이런 법선맵(normal map)에 대한 충분한 지식을 가지고 작업을 진행한다면 노멀맵 추출 과정이나 에디팅 작업에서도 도움이 될수 있을거라고 생각합니다.
'그래픽 테크닉' 카테고리의 다른 글
Bone Stretch(Squash) 에 대한 오해와 게임 데이터로의 활용 (0) | 2013.05.25 |
---|---|
wire를 이용한 캐릭터 어깨(삼각근) 셋팅 (0) | 2013.05.06 |
Wire Parameters 기본 사용법 (0) | 2013.02.08 |
Orientation Constraint 를 이용한 ik 셋팅 (1) | 2013.02.07 |
관절에 최적화 된 본 셋팅 (0) | 2013.01.18 |