노말맵핑

20071101353131427.jpg
실시간 노말맵을 처리하고 있는 언리얼 엔진


이런 거

Normal Mapping.

1 개요

노말 맵핑. 노말 범프 맵핑이라고도 한다. 노말은 법선 벡터에서 따온 노말이다.

이 기술이 없을 당시에는 입체감있는 모델을 만들려면 폴리곤의 수를 늘려서 실제로 그대로 모양을 만들어 주어야만 했다. 그런 복잡하고 입체감있는 모델을 만들려면 실제로 수백만개의 폴리곤이 필요하지만 이 기술을 이용하면 그런 복잡한 정보를 단 한 장의 노멀맵 텍스쳐를 통해 바꿀 수 있게 된다. 하이폴리곤 모델과 흡사한 입체감을 보여주면서도 폴리곤은 고작 수백개의 로우 폴리곤 모델만 사용해도 된다. 수백만개의 삼각형을 계산할 필요가 없으니 부하가 엄청나게 줄어드는 것은 당연지사.

노말맵핑기술은 저해상도 모델 데이터를 이용하여 고해상도 모델 데이터의 모습을 표면하여 시뮬레이션하므로 적은 시스템 리소스를 이용하여 많은 시스템 리소스를 사용한 것과 같은 효율적인 작업을 진행할 수 있도록 해주며 프레임향상에도 크게 기여한다.
이 기술은 배경이나 캐릭터 어느것에도 제한되지 않고 사용이 가능하기 때문에 게임그래픽의 전체적인 수준을 획기적으로 향상시켜 주며 이 기술은 예전부터 존재해왔지만 실시간으로 PC환경에서 상용으로 여러 사람들이 즐길수 있게 된데에는 많은 시간이 흘러서야 가능해졌다.


1354B5174B063C561F693D?.jpg
노말벡터의 모습.

물체의 표면이 방향성이 없는 상태에서 한 방향으로만 보여진다면 2차원 평면처럼 보여질 것이다. 3D그래픽으로 물체를 표현할때에는 물체 표면의 방향을 알아야 하는데 그 방향을 알아내기 위해서 3차원의 축을 기준으로 방향을 설정하는 것이 노말 벡터(Normal Vector)(이하 노말)이다.

많은 양의 노말은 물체가 많은 표면으로 이루어져 있다는 뜻이고 물체의 표면을 부드러운 곡면으로 보이게 하는 역할을 수행한다. 노말맵 텍스처 이미지는 이러한 물체의 노말정보(양측 180도의 X,Y,Z 각도)를 텍스처 이미지 형태의 저장공간(0-255 값의 R, G, B 색상채널)에 저장해 둔 것으로 이 저장된 정보는 비슷한 형태의 저해상도 모델에 적용되어 텍셀의 셰이딩(물체의 음영이 어떻게 보여질지 처리하는 과정)계산시 고해상도 모델에서 쓰였던 노말정보로 렌더링하게 된다.


한마디로 저질퀄리티를 하이퀄리티처럼 보이게 하는 막강한 기술이다. 그것도 실시간으로.

그래도 이해가 안간다면 폴리곤으로 뼈대를 세운 후, 노말맵 텍스쳐를 그 뼈대 위에 덮어씌워, 적은 폴리곤 수로도 세세한 그래픽 효과를 얻어낼 수 있게하는 것이다.


여담으로 Z축은 X, Y하고는 달리 자전하면서 헛도는 축이라 양감에 관여하지 못하고 사실상 R,G 채널만 노멀값에 활용되는데, 보통 알뜰한 용량활용을 위해 B 채널에 Z축 각도대신 AO(광 차폐도 = 구석져있는 정도)나 Cavity(주변 법선과의 각도차이= 모나고 접힌 정도)정보를 넣고 노멀 겸 Ambient Occlusion 혹은 Cavity 맵으로 쓴다.[1] 그래서 이 B 채널은 보통 하얀 바탕이 깔려있고 각진 부분만 어두운 식으로 그려지는데, 이 때문에 날것의 노멀맵 텍스쳐는 대개 푸르스름한 빛을 띄게된다.


1154B5174B063D812006E0?.jpg

노멀맵 제작 방식은 위와 같이 하이폴리곤 3D에서 따오는 것, 양감의 각도를 계산해서 노멀맵 텍스처를 수동으로 그리는 것(!)등 여러 방법이 있다. 입체로 이루어진 망(메쉬) 위에 일반 텍스처와 노멀맵 텍스처를 함께 보여주는 기술이 바로 셰이더로 셰이더 모델 2, 3등 버전을 거듭할수록 표현력이 높아졌다.

노말맵 셰이더의 가장 기본적인 목표는 삼각형 조각 몇 개로 이루어진 삼차원 표면에 더 복잡한 모양의 음영을 투사해서 마치 표면이 복잡한 것처럼 그려내는 데에 있다. 실제로 노말맵이 적용된 3D 물체를 이리저리 돌려 보면 경계면이 의외로 단순한 것을 알 수 있다. 비스듬히 볼때 느껴지는 이 어색함을 없애기 위해 높이값의 정보를 받아와 그러한 상황에서도 자연스러운 표현을 해주는 패럴랙스 방식의 맵핑도 있다.[2] 여담이지만 노말맵 개발 이전에는 텍스처 하나에 그림자를 교묘하게 그려넣어, 위와 같은 착각을 유도하는 경우가 많았다. 몬스터 헌터 시리즈, 리그 오브 레전드 등의 PC게임들은 아직도 이러한 방식을 사용 중. 흔히 손맵이라 불리며 금새 도태될 것이라 여겨졌지만, 아직도 하드웨어수준이 고급 셰이더 기술을 소화하기 힘든 모바일 환경이나 특정한 그림체를 지향하는 경우에서는 현역으로 뛰고 있다.[3]

이렇게 3D 게임과 같은 저사양 3D 렌더환경에서의 디테일을 위해 애용되는 노멀맵이지만 요즘은 일부 2D 게임에서도 실시간 광원의 영향에 따른 양감을 자유롭게 표현하기 위해 노멀맵을 쓰는 경우가 있고 이를 제작하기 위한 프로그램도 나와있다. Sprite Lamp 참조.

2 특징

노말맵을 사용한 게임은 그 노말맵 특유의 느낌이 있는데 그것은 주름같은 높낮이가 심한 굴곡이 두드러진다는 점이다. 그 이유는 대부분은 이것들을 지브러쉬라는 툴에서 찰흙을 빚듯이 만들어내기 때문에 그런 느낌이 나게 되는것이다. (스타2를 떠올려보자 지금은 아니지만 초창기때는 찰흙크래프트라는 별명이 있을 정도였다.) 반면에 지브러쉬가 아닌 다른 방식으로 하이폴리곤 모델링을 한 후에 맥스에서 노말맵을 추출하면 그런 현상을 줄일 수 있다. 오르가닉이 아닌 하드서페이스(기계, 메카닉 등)작업을 할때 유용하다.

그래픽이 깔끔하고 화사한 캐쥬얼 게임이라던지, 손맵 텍스쳐로 승부를 보는 (ex와우같은) 게임은 이 방식이 좋지 않다. 예를들어 미소녀같은 매끈한 캐릭터가 나오는 게임에 울긋불긋한 노말맵이 사용된다면? 자세한 설명은 생략한다.
  1. 보통 추가적인 음영을 넣거나, 워썬더와 같이 위장의 마모를 자연스럽게 표현하기 위한 정보로 활용된다.
  2. 그러나 각도에 따라 새로운 그림을 뽑아내는 등 계산이 복잡한만큼 사양이 높고, 높이값을 기반으로 계산하는지라 옆면의 디테일표현은 될리가 없으므로 옆면이 마치 층층이 쌓여 보이는듯한 '팬케이크 현상'때문에 추가적인 필터링도 필요하는 등 노멀맵에 비해 여러모로 까다로운 편이다. 그래도 폴리곤 자체까지 영향을 주는 변위(디스플레이스먼트) 맵핑이나 테셀레이션보단 비교적 가볍다
  3. 그러나 고퀄리티의 모델을 베이스로 채도를 없애 회색으로 만든 노멀맵이나 상술한 AO, Cavity맵 등을 기본적인 색깔구성인 디퓨즈에 합성하여 양감을 내고 후처리하는 식으로 제작하기도 하는 등. 직접 들어가지 않을 뿐이지, '손맵'을 만드는데도 노멀맵을 적극 활용하기도 한다.