노멀 맵은 일종의 범프 맵입니다. 실제 지오메트리로 표현되는 것처럼 빛을 받는 범프, 홈, 스크래치 등의 표면 디테일을 모델에 추가하는 데 사용할 수 있는 특별한 텍스처 종류입니다.
Unity는 OpenGL 포맷이라고 알려진 Y+ 노멀 맵을 사용합니다.
예를 들어 비행기 기체처럼 표면에 홈과 나사 또는 리벳이 있는 표면을 나타내고 싶을 수 있습니다. 이렇게 하는 방법 중 하나는 아래와 같이 디테일을 지오메트리로 모델링하는 것입니다.
상황에 따라 일반적으로 ‘실제’ 지오메트리처럼 사소한 디테일을 모델링하는 것은 좋지 않습니다. 오른쪽에서 나사 헤드 하나의 디테일을 구성하는 데 필요한 폴리곤을 볼 수 있습니다. 표면에 디테일이 많은 대형 모델에서는 매우 많은 폴리곤을 그려야 합니다. 이렇게 하지 않으려면 노멀 맵을 사용하여 세밀한 표면 디테일을 나타내고, 더 큰 모양의 모델을 위해 낮은 해상도의 폴리곤 표면을 사용해야 합니다.
대신 범프 맵으로 디테일을 표현하면 표면 지오메트리가 훨씬 더 단순해지고 디테일은 광원이 표면에서 반사되는 방식을 조절하는 텍스처로 표현됩니다. 이는 최신 그래픽스 하드웨어가 매우 빠르게 수행할 수 있는 기능입니다 이제 금속 표면은 폴리곤이 적은 평평한 평면이 될 수 있으며 나사, 리벳, 홈, 스크래치가 빛을 받고 텍스처로 인해 뎁스처럼 보입니다.
최신 게임 개발 아트 파이프라인에서 아티스트는 3D 모델링 애플리케이션을 사용하여 초고해상도 소스 모델을 기반으로 노멀 맵을 생성합니다. 그런 다음 노멀 맵을 저해상도 게임에 사용할 수 있는 모델 버전에 매핑하여 노멀 맵을 사용해 원래의 고해상도 디테일이 렌더링되도록 합니다.
노멀 매핑은 텍스처를 사용하여 모델 전체에 걸쳐 표면 노멀을 수정하는 방식에 대한 정보를 저장하여 표면 노멀의 수정을 한 단계 더 진행합니다. 노멀 맵은 일반 컬러 텍스처처럼 모델의 표면에 매핑되는 이미지 텍스처지만, 노멀 맵 텍스처의 각 픽셀(텍셀이라고 함)은 평평한(또는 매끄럽게 보간된) 폴리곤의 ‘실제’ 표면 노멀과 표면 노멀 방향 간의 편차를 나타냅니다.
3D 모델의 표면에 3개의 폴리곤을 2D로 나타내는 이 다이어그램에서 각 주황색 화살표는 노멀 맵 텍스처의 픽셀에 해당합니다. 아래는 노멀 맵 텍스처의 단일 픽셀 슬라이스입니다. 가운데에는 노멀이 수정되어 폴리곤 표면에 몇 개의 범프가 있는 것처럼 보이는 것을 알 수 있습니다. 이러한 범프는 조명 계산에 수정된 노멀이 사용되기 때문에 조명이 표면에 나타나는 방식으로 인해 눈에 띄게 됩니다.
원시 노멀 맵 파일에 표시되는 컬러는 보통 파란색이며, 실제 광원 또는 어두운 셰이딩은 포함되지 않습니다. 이는 컬러 자체가 그대로 표시되지 않기 때문입니다. 대신 각 텍셀의 RGB 값은 방향 벡터의 X, Y, Z 값을 나타내며, 폴리곤 표면의 보간된 매끄러운 기본 노멀에 대한 수정으로 적용됩니다.
이는 일부 돌출된 직사각형과 텍스트에 대한 범프 정보가 포함된 간단한 노멀 맵입니다. 이 노멀 맵을 Unity로 임포트하여 스탠다드 셰이더의 노멀 맵 슬롯에 넣을 수 있습니다. 머티리얼에 컬러 맵(알베도 맵)을 결합하고 위의 실린더 메시 표면에 적용하면 다음과 같은 결과를 얻을 수 있습니다.
이번에도 메시의 실제 폴리곤 특성에는 영향을 주지 않고, 표면에서 조명이 계산되는 방식에만 영향을 줍니다. 표면에서 돌출된 글자와 모양은 실제로 존재하지 않으며, 면을 비스듬한 각도에서 보면 실제로는 평평한 표면임이 드러나지만, 대부분의 시각에서는 실린더에 표면에서 돌출된 엠보싱 디테일이 있는 것처럼 보입니다.
노멀 맵과 하이트 맵은 모두 범프 맵의 유형입니다. 두 맵 모두 더 단순한 폴리곤 메시의 표면에 표시되는 디테일을 나타내는 데 필요한 데이터가 있지만, 데이터가 각기 다른 방법으로 저장됩니다.
위의 왼쪽에는 돌담을 범프 매핑하는 데 사용되는 하이트 맵이 있습니다. 하이트 맵은 단순한 검은색과 흰색 텍스처로, 각 픽셀은 표면의 해당 지점이 돌출된 것처럼 보이는 양을 나타냅니다. 픽셀 컬러가 흰색일수록 해당 영역이 더 돌출되어 보입니다.
노멀 맵은 RGB 텍스처로, 여기서 각 픽셀은 표면이 향하고 있는 것처럼 보여야 하는 방향의 차이를 수정되지 않은 표면 노멀에 상대적으로 나타냅니다. 이러한 텍스처는 벡터가 RGB 값에 저장되는 방식 때문에 푸른 보라빛을 띠는 경향이 있습니다.
최신 실시간 3D 그래픽스 하드웨어는 노멀 맵을 사용합니다. 노멀 맵에는 표면에서 빛이 반사되는 모습을 수정하는 데 필요한 벡터가 포함되어 있기 때문입니다. Unity는 범프 매핑에 하이트 맵도 적용할 수 있지만 이를 사용하려면 임포트 시 노멀 맵으로 전환해야 합니다.
이 내용을 이해하는 것이 노멀 맵을 사용하는 데는 중요하지 않습니다! 이 단락은 건너뛰어도 괜찮습니다 그러나 정말 알고 싶은 경우 다음을 참조하십시오. RGB 컬러 값은 벡터의 X, Y, Z 방향을 저장하는 데 사용되며, Z는 ‘위쪽’입니다(일반적으로 Y를 ‘위쪽’으로 사용하는 Unity의 규칙과 반대). 또한 텍스처의 값은 0.5가 추가되어 절반으로 줄어든 것으로 처리됩니다. 이렇게 되면 모든 방향의 벡터를 저장할 수 있습니다. 따라서 RGB 컬러를 벡터 방향으로 전환하려면 2를 곱한 다음 1을 빼야 합니다. 예를 들어 RGB 값이 (0.5, 0.5, 1) 또는 16진수로 #8080FF인 경우, 노멀 매핑에서 ‘위쪽’인 (0,0,1) 벡터가 되며, 모델 표면에 아무런 변화가 나타나지 않습니다. 이 컬러는 이 페이지 앞의 노멀 맵 ‘예시’의 평면 영역에 표시됩니다.

값이 (0.43, 0.91, 0.80)이면 벡터가 (–0.14, 0.82, 0.6)이 됩니다. 이는 표면을 상당히 급격히 수정한 것입니다. 이러한 컬러는 돌 가장자리의 일부 상단에 있는 돌담 노멀 맵의 밝은 청록색 영역에서 볼 수 있습니다. 결과적으로 이러한 가장자리는 돌의 평평한 면과 매우 다른 각도로 빛을 받습니다.
노멀 맵