노멀 매핑

 


[image]
언리얼 엔진 3 테크데모 자료. 5천~1만개 이내의 로우 폴리곤으로도 본래는 수백만개의 하이 폴리곤으로 만들어진 원래의 모델과 비슷한 결과물을 리얼타임으로 렌더링할 수 있다. 위 사진의 작품은 거기에 64비트 컬러 기반 HDR 렌더링에 디퓨즈, 블룸 등의 각종 포스트 이펙트가 적용된 최종 결과물이다.
1. 개요
2. 원리
3. 역사
4. 필요성
5. 제작 방법
6. 특징
7. 관련 문서


1. 개요


'''노멀 맵핑'''(Normal Mapping)은 폴리곤의 '''법선 벡터'''(Normal Vector)의 값을 사용하여 로우 폴리곤의 그래픽 환경에서 하이 폴리곤의 입체감 및 질감을 구현하는 방법이다. 물체의 질감을 있는 그대로 폴리곤으로 표현하면 삼각형의 양이 많아지고 결국 연산이 많이 필요하게 되는데 폴리곤을 무척 적게 사용하고도 비슷한 효과를 낼 수 있는 기술이다. 90년대까지는 논문에서나 존재하던 기술이었으나 하드웨어의 속도가 빨라지고 프로그래머블 쉐이더가 일반화되는 2000년대 중반부터 널리 사용되기 시작하였다.
여기서 Normal이란 단어의 의미는 "보통"이라는 뜻이 아닌 수학에서의 법선이라는 의미로 동음이의어인 영어 단어다.

2. 원리


물체의 표면에 굴곡이 있을 때 그 굴곡 때문에 표면의 방향이 바뀌고 그 방향에 따라 빛이 다르게 반사되기 때문에 보는 사람이 그 굴곡을 느낄 수 있다. 결국 표면 질감에서 중요한건 진짜 굴곡이 아닌 반사각이기 때문에 3D그래픽으로 물체를 표현할 때 표면을 실제로 굴곡이 있는 형태로 만들지 않고, 평면으로 만들고 그 위에 어떤 각도로 보일지 그려놓으면 하나의 폴리곤으로 굴곡이 있는 표면을 표현할 수 있다.
광원을 받은 폴리곤은 해당 면을 구성하는 꼭지점(Vertex: 정점)을 기준으로 그 중간의 사이를 보간하여 면 단위로 음영이 처리되며 그것을 Per-Vertex(꼭지점 단위) 라이팅이라고 부른다. 그 꼭지점의 법선 벡터 값을 이미지(노멀맵 텍스처)로 저장한 후 저장된 법선 벡터 값이 마치 실제 폴리곤의 법선 벡터인 것 처럼 노멀맵 텍스처가 광원을 받아 음영을 처리하는 기법이 바로 노멀 매핑이다. 단, 텍스처는 폴리곤이 아닌 픽셀로 된 이미지이므로 노멀 매핑에는 Per-Vertex 라이팅이 아닌 Per-Pixel(픽셀 단위) 라이팅이 행해진다.
이러한 원리로 폴리곤 수를 줄이고 노멀매핑으로 표면을 표현하면 많은 수의 폴리곤을 썼을 때보다 훨씬 적은 시스템 리소스로 동일한 시각적 효과를 얻을 수 있으므로 같은 연산 능력으로 높은 품질의 그래픽을 었을 수 있다. 배경이나 캐릭터 어느것에도 제한되지 않고 폴리곤을 사용하는 모든 표면에 적용이 가능하기 때문에 '''게임 그래픽 수준 전반을 획기적으로 향상시켜 준다'''.

3. 역사


노멀 매핑이 대중화되지 않았던 시절에는 입체감있는 모델을 만들려면 폴리곤의 수를 늘려서 실제로 그대로 모양을 만들어 주어야만 했다.[1] 그런 복잡하고 입체감있는 모델을 만들려면 실제로 수백만개의 폴리곤이 필요하지만 이 기술을 이용하면 그런 복잡한 정보를 단 한 장의 노멀맵 텍스쳐를 통해 바꿀 수 있게 된다. 하이 폴리곤 모델과 흡사한 입체감을 보여주면서도 폴리곤은 고작 수백개의 로우 폴리곤 모델만 사용해도 된다. 수백만개의 삼각형을 계산할 필요가 없으니 부하가 엄청나게 줄어드는 것은 당연지사.
기술 자체는 1970년대에 개발됐지만 2004년 전후를 기점으로 PC/비디오 3D 게임에서 본격적으로 사용되었고, 이는 3D 게이밍 그래픽 수준에 혁명으로 작용하게 된다.

4. 필요성


컴퓨터 그래픽에서 폴리곤은 그 꼭지점의 갯수가 많으면 많아질수록 파일 크기와 메모리를 차지하는 비중, 그리고 그것을 실시간으로 화면에 처리하는 데 필요한 연산량과 비례한다.
광원, 셰이더 및 각종 특수효과와 텍스처 등을 모두 제외하고 폴리곤만을 화면에 출력한다고 할 때 약 백만(1,000,000)개의 삼각형으로 이루어진 폴리곤을 4~5개체 정도만 화면에 출력해도[2] 2017년 기준 최신 고사양 컴퓨터에서도 과도한 연산량을 버티지 못하고 굼벵이처럼 느려질 것이다.
하지만 노멀 매핑은 텍스처에 폴리곤의 법선 벡터 정보를 모두 담아버리므로 아무리 다수의 삼각형으로 이루어진 폴리곤이라도 노멀 맵으로 저장된다면 파일의 용량이나 메모리의 사용량은 노멀 맵 텍스처의 해상도만큼 메모리를 차지할 뿐이고, 연산량도 텍스처 한장에 Per-Pixel 라이팅을 행하는 정도에 그치기 때문에 실시간으로는 절대 불가능한 수준의 많은 삼각형으로 이루어진 폴리곤의 음영 효과를 그보다 훨씬 적은 폴리곤 위에 입혀 적은 연산량으로 높은 퀄리티의 효과를 볼 수 있다.
여기에 꼼수로 노멀 맵 텍스처의 해상도를 줄여버리면 효율은 더욱 더 올라간다. 엘더스크롤 4: 오블리비언의 고해상도 텍스쳐 모드에서 반필수적으로 활용되기도 했고, 비슷한 시기에 출시된 콜 오브 듀티 시리즈들도 자동 옵션 조절을 통해 비슷한 꼼수를 지원하기도 했다.[3]

5. 제작 방법


[image]
'''노멀 벡터'''의 형태
물체 표면의 3차원 방향이 노멀 벡터(Normal Vector)(이하 노멀)이다. 굴곡이 있는 표면은 노멀 벡터가 지점마다 변하게 되는데 어느 지점에서 노멀이 어떤 값인지 전부 모아놓은 것이 노멀맵이다. 노멀맵 텍스처 이미지는 이러한 물체의 노멀 정보(양측 180도의 X,Y,Z 각도)를 텍스처 이미지 형태의 저장공간(0-255 값의 R, G, B 색상채널)에 저장해 둔 것으로, 이 노멀맵 텍스처를 비슷한 형태의 저해상도 모델에 적용해서 텍셀의 셰이딩(물체의 음영이 어떻게 보여질지 처리하는 과정) 계산시 고해상도 모델에서 쓰였던 노멀 정보로 렌더링하게 된다.
여담으로 Z축은 X, Y하고는 달리 자전하면서 헛도는 축이라 양감에 관여하지 못하고 사실상 R,G 채널만 노멀값에 활용되는데, 보통 알뜰한 용량활용을 위해 B 채널에 Z축 각도대신 AO(광 차폐도 = 구석져있는 정도)나 Cavity(주변 법선과의 각도차이= 모나고 접힌 정도)정보를 넣고 노멀 겸 Ambient Occlusion 혹은 Cavity 맵으로 쓴다.[4] 그래서 이 B 채널은 보통 하얀 바탕이 깔려있고 각진 부분만 어두운 식으로 그려지는데, 이 때문에 날것의 노멀 맵 텍스쳐는 대개 푸르스름한 빛을 띄게된다.
[image]
'''노멀 매핑''' 추출을 위한 하이폴리곤 모델
노멀 맵 제작 방식은 위와 같이 하이 폴리곤 3D에서 따오는 것,[5] 양감의 각도를 계산해서 노멀 맵 텍스처를 수동으로 그리는 것(!)[6] 등 여러 방법이 있다.

6. 특징


노멀 맵 셰이더의 가장 기본적인 목표는 삼각형 조각 몇 개로 이루어진 삼차원 표면에 더 복잡한 모양의 음영을 투사해서 마치 표면이 복잡한 것처럼 그려내는 데에 있다. 실제로 노멀맵이 적용된 3D 물체를 이리저리 돌려 보면 경계면이 의외로 단순한 것을 알 수 있다. 비스듬히 볼때 느껴지는 이 어색함을 없애기 위해 높이값의 정보를 받아와 그러한 상황에서도 자연스러운 표현을 해주는 패럴랙스 방식의 맵핑도 있다.[7] 여담이지만 노멀맵 개발 이전에는 텍스처 하나에 그림자를 교묘하게 그려넣어, 위와 같은 착각을 유도하는 경우가 많았다. 몬스터 헌터 도스, 리그 오브 레전드 등의 게임들은 이러한 방식을 사용 중. 흔히 손맵이라 불리며 금새 도태될 것이라 여겨졌지만, 아직도 하드웨어 수준이 고급 셰이더 기술을 소화하기 힘든 모바일 환경이나 특정한 그림체를 지향하는 경우에서는 현역으로 뛰고 있다.[8]
이렇게 3D 게임과 같은 저사양 3D 렌더환경에서의 디테일을 위해 애용되는 노멀맵이지만 요즘은 일부 2D 게임에서도 실시간 광원의 영향에 따른 양감을 자유롭게 표현하기 위해 노멀 맵을 쓰는 경우가 있고 이를 제작하기 위한 프로그램도 나와있다. Sprite Lamp 참조.
노멀 맵을 사용한 게임들 중 일부는 특유의 느낌이 나는 경우가 있는데 그것은 주름같은 높낮이가 심한 굴곡이 두드러진다는 점이다. 그 이유는 노멀 맵을 추출하기 위한 하이 폴리곤 모델을 대부분 지브러쉬라는 툴에서 찰흙을 빚듯이 만들어내기 때문에 그런 느낌이 나게 되는 것이다. 스타2를 떠올려보자. 요즘 나오는 게임들은 노하우가 발달해서 괜찮지만 스타2의 저사양 옵션은 찰흙크래프트라는 별명이 붙을 정도였다.[9]
카툰 렌더링 기반의 캐주얼 게임이라던지, 손맵 텍스쳐로 승부를 보는, 월드 오브 워크래프트와 같은 게임은 이 방식이 좋지 않다는 인식이 있지만 당장에 팀 포트리스 2오버워치를 위시한 카툰풍 혹은 이른바 '''픽사''' 애니메이션 느낌의 화풍을 지닌 게임에서는 노멀 매핑 또한 사실상 필수적이다.
노멀 맵은 원경에서 물체를 바라봤을 때에는 제법 그럴싸한 셰이딩을 보여주지만 근거리에서 시점을 돌려가면서 관찰하면 그저 종이한장 붙여놓은 듯한 단순한 음영과 질감이 드러나는 한계가 있다. 진짜로 입체감을 주려면 실제로 폴리곤이 많아야 하는데 DirectX 11부터 가능한 '''테셀레이션(Tesselation)'''과 '''디스플레이스먼트 매핑(Displacement Mapping)'''이라는 방법이 있다. 테셀레이션은 폴리곤의 면을 쪼개어서 더 많은 폴리곤으로 분할해 주는 기법이고 디스플레이스먼트 매핑은 하이트 맵 이미지를 기반으로 실제로 폴리곤의 높낮이를 조절해서 입체감을 만들어 낸다. 이것은 엄청난 연산량을 필요로 하기에 현 시점에서는 부분적으로만 사용된다. 테셀레이션과 디스플레이스먼트 매핑은 실제로 폴리곤을 변화시키는 기술로서 노멀 매핑과 같은 텍스처 매핑 계열이 아니다.
노멀 매핑의 한계를 극복하기 위한 기법으로 노멀 매핑과 함께 쓰이는 '''시차 매핑(Parallax Mapping)''', '''시차 가려짐 매핑(Parallax Occlusion Mapping, POM)''' 등이 있다. 그러나 이런 매핑 기법들 역시 텍스처 이미지를 왜곡하는 방법으로 입체감을 주는 것에 지나지 않는다. 각종 텍스처 매핑 자체가 이미지에 기반한 것이기 때문에 가까이서 이리 저리 돌려보면 그 자체가 평면인 것은 구조상 어쩔 수 없다. 시차 가려짐 매핑(POM)은 구현하기에 따라 어지간히 집요하게 관찰하지 않는 이상 구별이 불가능한 수준이 가능하지만, 그러면 성능이 개발살나기 때문에 그렇게까지 쓰는 게임은 없다.[10]
이러한 시차 매핑 관련 기술들은 실제 폴리곤 수가 늘어나지는 않지만 폴리곤이 늘어난 것처럼 보이는 것에서 유래한 명칭으로 '''가상 디스플레이스먼트 매핑(Virtual Displacement Mapping)'''이라고도 불린다.

7. 관련 문서


[1] 그래서 2000년 이전 3D게임을 홍보를 할 때 캐릭터의 폴리곤 숫자가 반드시 들어갔다.[2] 아래에 나오는 부서진 돌기둥의 하이 폴리곤 형태가 100만폴리곤이 조금 넘는 수준이다. 노멀 맵 기술이 없었다면 저 정도 퀄리티의 오브젝트를 게임에 넣는다는 건 상상조차 할 수 없는 일.[3] 텍스쳐 옵션의 세부 옵션으로 노멀 맵 옵션이 따로 있었고, 사양상 무조건 풀 옵션이나 최하옵이 들어가는 경우를 빼면, 기본적으로 노멀 맵 옵션이 텍스쳐 옵션보다 한 단계 낮은 옵션으로 자동 설정된다.[4] 보통 추가적인 음영을 넣거나, 워썬더와 같이 위장의 마모를 자연스럽게 표현하기 위한 정보로 활용된다.[5] 하이 폴리곤 모델과 거기에서 리토폴로지를 진행한 로우 폴리곤 모델을 동일한 위치에 둔 뒤, 그대로 압착시켜 하이 폴리곤 형태를 로우 폴리곤 위에 찍어내는 느낌이라고 보면 쉽다. 이를 베이크(bake)라고도 부른다. 말 그대로 구워내는 것.[6] 의외로 말도 안되는 방법같지만, 단순한 노멀 맵 형태 또는 작은 파츠의 일부같은 경우 실무에서도 이런 식으로 진행하기도 한다. 그럴싸하게 보이기만 하면 되는 것이기도 하고, 정말 미세한 부분을 조정하기 위해 하이폴을 다시 꺼내 수정하고 다시 굽는 것보다 훨씬 간단하기 때문.[7] 그러나 각도에 따라 새로운 그림을 뽑아내는 등 계산이 복잡한만큼 사양이 높고, 높이값을 기반으로 계산하는지라 옆면의 디테일표현은 될리가 없으므로 옆면이 마치 층층이 쌓여 보이는듯한 '팬케이크 현상' 때문에 추가적인 필터링도 필요하는 등 노멀 맵에 비해 여러모로 까다로운 편이다. [8] 그러나 고퀄리티의 모델을 베이스로 채도를 없애 회색으로 만든 노멀 맵이나 상술한 AO, Cavity 맵 등을 기본적인 색깔구성인 디퓨즈에 합성하여 양감을 내고 후처리하는 식으로 제작하기도 하는 등. 직접 들어가지 않을 뿐이지, '손맵'을 만드는데도 노멀 맵을 적극 활용하기도 한다.[9] 지브러쉬가 아닌 다른 방식으로 하이 폴리곤 모델링을 한 후에 맥스에서 노멀 맵을 추출하면 이런 현상을 줄일 수 있다. 하드 서페이스(기계, 메카닉 등) 작업을 할 때 유용하지만, 대신 로우 폴리곤을 사용하는 시간적 장점을 희석시킨다.[10] 공개된 유일한 사례가, ATI에서 TeraScale 발표 초기에 하드웨어 테셀레이션을 통한 극적인 프레임 향상을 시연하기 위해, 하드웨어 테셀레이션 수준의 디스플레이스먼트 매핑을 억지로 구현해서 프레임이 박살난 걸 먼저 보여주는 희생양 용도로 구현한 것이라고 봐야될 정도.#