Version: 2022.2
언어: 한국어
Smoothness
하이트맵

노멀 맵(범프 매핑)

노멀 맵은 Bump Map 타입이며, 실제 지오메트리로 표현되는 것처럼 광원을 받는 범프, 홈 및 스크래치 등의 표면 디테일을 모델에 추가하는 데 사용할 수 있는 특별한 텍스처 종류입니다.

Unity uses Y+ normal maps, sometimes known as OpenGL format.

예를 들어, 비행기 기체처럼 전체 표면에 홈과 나사 또는 리벳이 있는 표면을 표시하고 싶을 수 있습니다. 이렇게 하는 방법 중 하나로, 아래와 같이 디테일을 지오메트리로 모델링할 수 있습니다.

디테일이 실제 지오메트리처럼 모델링된 비행기 금속판
디테일이 실제 지오메트리처럼 모델링된 비행기 금속판

상황에 따라 “실제” 지오메트리로 모델링된 작은 디테일을 갖는 것은 일반적으로 좋지 않습니다. 오른쪽에서 단일 스크류 헤드의 디테일을 구성하는 데 필요한 폴리곤을 볼 수 있습니다. 미세한 표면 디테일을 가진 커다란 모델에서 그리면 매우 많은 수의 폴리곤이 필요합니다. 이를 피하기 위해 노멀 맵을 사용하여 미세한 표면 디테일을 표현하고, 모델의 더 큰 모양을 위해 더 낮은 해상도의 폴리곤 표면을 사용해야 합니다.

그러지 않고 이 디테일을 범프 맵으로 대신 나타내면 표면 지오메트리가 훨씬 더 간단해질 수 있고 디테일은 광원이 표면에서 반사되는 방법을 조절하는 텍스처로 표현됩니다. 이 작업은 최신 그래픽스 하드웨어로 매우 빨리 수행할 수 있습니다. 이제 금속 표면은 폴리곤 개수가 적은 플랫 평면이 되고 나사, 리벳, 홈 및 스크래치는 텍스처로 인해 광원을 받고 뎁스가 있는 것처럼 보입니다.

나사, 홈 및 스크래치는 노멀 맵에서 정의되어 폴리곤 수가 적은 평면에서 광원이 반사되는 방법을 변경하여 3D 디테일같다는 인상을 줍니다. 리벳 및 나사와 함께 텍스처를 통해서도 미세한 범프나 스크래치 같은 디테일을 훨씬 더 많이 포함시킬 수 있습니다.
나사, 홈 및 스크래치는 노멀 맵에서 정의되어 폴리곤 수가 적은 평면에서 광원이 반사되는 방법을 변경하여 3D 디테일같다는 인상을 줍니다. 리벳 및 나사와 함께 텍스처를 통해서도 미세한 범프나 스크래치 같은 디테일을 훨씬 더 많이 포함시킬 수 있습니다.

최신 게임 개발 아트 파이프라인에서 아티스트는 3D 모델링 애플리케이션을 사용하여 초고해상도 소스 모델을 기반으로 노멀 맵을 생성합니다. 그런 다음, 노멀 맵을 해상도가 더 낮은 게임용 버전 모델에 매핑하여 원래의 고해상도 디테일이 노멀 맵을 사용하여 렌더링되도록 합니다.

범프 맵 생성 및 사용 방법(How to create and use Bump Maps)

Bump mapping is a relatively old graphics technique, but is still one of the core methods required to create detailed realistic real-time graphics. Bump Maps are also commonly referred to as Normal Maps or Height Maps, however these terms have slightly different meanings which will be explained below.

표면 노멀(Surface Normals)이란?

To really explain how normal mapping works, we will first describe what a “normal” is, and how it is used in real-time lighting. Perhaps the most basic example would be a model where each surface polygon is lit simply according to the surface angles relative to the light. The surface angle can be represented as a line protruding in a perpendicular direction from the surface, and this direction (which is a vector) relative to the surface is called a “surface normal”, or simply, a normal.

12면 실린더 두 개. 왼쪽에는 플랫 셰이딩, 오른쪽에는 부드러운 셰이딩이 적용되었습니다.
12면 실린더 두 개. 왼쪽에는 플랫 셰이딩, 오른쪽에는 부드러운 셰이딩이 적용되었습니다.

위 이미지에서 왼쪽 실린더에는 기본 플랫 셰이딩이 적용되었고 각 폴리곤은 광원에 대한 상대적인 각도에 따라 셰이딩 되었습니다. 표면이 평평하기 때문에 각 폴리곤의 조명은 전체 폴리곤 영역에 걸쳐 일정합니다. 다음은 각각의 와이어프레임 메시가 보이는 두 개의 동일한 실린더입니다.

12면 실린더 두 개. 왼쪽에는 플랫 셰이딩, 오른쪽에는 부드러운 셰이딩이 적용되었습니다.
12면 실린더 두 개. 왼쪽에는 플랫 셰이딩, 오른쪽에는 부드러운 셰이딩이 적용되었습니다.

오른쪽 모델은 왼쪽 모델과 폴리곤 수가 동일하지만, 셰이딩이 부드럽게 보이고 전체 폴리곤에 비추는 조명으로 인해 곡면이 있는 표면처럼 보입니다. 왜 그럴까요? 광원을 반사시키는 데 사용되는 각 점의 Surface Normal이 폴리곤의 전체 폭에 걸쳐 조금씩 달라지기 때문입니다. 따라서 실제로는 폴리곤이 평평하고 일정하지만 표면의 주어진 점에서 광원이 표면에 곡면이 있는 것처럼 바운스됩니다.

2D 다이어그램으로 보면 플랫 셰이딩된 실린더의 바깥쪽 주위에 있는 표면 폴리곤 중 세 개가 다음과 같이 표시됩니다.

3개의 폴리곤에 평평한 음영 처리(2D 다이어그램으로 표시)
3개의 폴리곤에 평평한 음영 처리(2D 다이어그램으로 표시)

표면 노멀은 주황색 화살표로 나타냅니다. 각 값은 표면에서 광원이 반사되는 방법을 계산하는 데 사용됩니다. 따라서 표면 노멀이 동일한 방향을 가리키기 때문에 각 폴리곤의 전장에 걸쳐 광원이 동일하게 반응할 것임을 알 수 있습니다. 그래서 “플랫 셰이딩”이 얻어지고 왼쪽 실린더의 폴리곤에 하드 에지가 있는 것처럼 보입니다.

하지만 부드럽게 셰이딩된 실린더의 경우 표면 노멀은 다음과 같이 평평한 폴리곤에 따라 달라집니다.

3개의 폴리곤에 부드러운 음영 처리(2D 다이어그램으로 표시)
3개의 폴리곤에 부드러운 음영 처리(2D 다이어그램으로 표시)

노멀 방향은 평평한 폴리곤 표면 전체에 걸쳐 점진적으로 변하므로 표면 전체에 걸친 셰이딩이 (녹색 선으로 표시된 것처럼) 부드러운 곡선 같다는 인상을 줍니다. 메시의 실제 폴리곤 성질에는 영향이 없고, 평평한 표면에서 조명이 계산되는 방법에만 영향이 있습니다. 이렇게 휘어진 것처럼 보이는 표면은 실제로 존재하지 않으며, 면을 조각에서 보면 평평한 폴리곤의 실제 성질이 드러납니다. 하지만 대부분의 시각에서는 실린더에 부드럽게 휘어진 표면이 있는 것처럼 보입니다.

이 부드러운 기본 셰이딩을 사용하면 노멀 방향을 결정하는 데이터는 실제로 버텍스별로만 저장되므로 전체 표면에 걸쳐 변하는 값은 버텍스 간에 보간됩니다. 위 다이어그램에서 빨간색 화살표는 각 버텍스에 저장된 노멀 방향을 나타내고, 주황색 화살표는 전체 폴리곤 영역에 걸쳐 보간된 노멀 방향의 예를 나타냅니다.

노멀 매핑이란?

노멀 매핑은 텍스처를 사용하여 모델 전체에 걸쳐 표면 노멀을 수정하는 방법에 대한 정보를 저장하여 표면 노멀 수정을 한 단계 발전시킵니다. 노멀 맵은 일반 컬러 텍스처처럼 모델의 표면에 매핑되는 이미지 텍스처이지만, 노멀 맵 텍스처의 각 픽셀(texel이라고 함)은 평평한(또는 부드럽게 보간된) 폴리곤의 “실제” 표면 노멀과 표면 노멀 방향 간의 편차를 나타냅니다.

3개의 폴리곤에 걸친 노멀 매핑(2D 다이어그램으로 표시)
3개의 폴리곤에 걸친 노멀 매핑(2D 다이어그램으로 표시)

3D 모델의 표면에 있는 폴리곤을 2D로 표현한 이 다이어그램에서 주황색 화살표는 각각 노멀 맵 텍스처의 픽셀에 대응합니다. 아래에는 노멀 맵 텍스처의 단일 픽셀 슬라이스가 있습니다. 중앙을 보면 노멀이 수정되어 폴리곤 표면에 범프가 2–3개 있는 형상이 나타남을 알 수 있습니다. 이런 범프는 조명이 표면에 나타나는 방법으로만 보입니다. 수정된 노멀이 조명 계산에 사용되기 때문입니다.

원시 노멀 맵 파일에 보이는 컬러는 일반적으로 푸른 색조를 띠고 밝거나 어두운 실제 셰이딩을 포함하지 않습니다. 컬러 자체가 그대로 표시되도록 의도되지 않았기 때문입니다. 그 대신 각 텍셀의 RGB 값이 방향 벡터의 X, Y, Z 값을 나타내고 폴리곤 표면의 기본 보간된 부드러운 노멀에 대한 수정으로 적용됩니다.

노멀 맵 텍스처의 예
노멀 맵 텍스처의 예

This is a simple normal map, containing the bump information for some raised rectangles and text. This normal map can be imported into Unity and placed into Normal Map slot of the Standard Shader. When combined in a material with a colour map (the Albedo map) and applied to the surface of the cylinder mesh above, the result looks like this:

위에서 사용한 실린더 메시의 표면에 적용된 노멀 맵 예
위에서 사용한 실린더 메시의 표면에 적용된 노멀 맵 예

이번에도 메시의 실제 폴리곤 성질에는 영향이 없고 표면에서 조명이 계산되는 방법에만 영향이 있습니다. 표면에서 튀어나온 것처럼 보이는 글자와 도형은 실제로 존재하지 않고 조각에서 면을 보면 평평한 표면의 실제 성질이 나타나지만, 대부분의 시각에서는 이제 실린더에 표면에서 튀어나온 엠보싱된 디테일이 있는 것처럼 보입니다.

노멀 맵(Normal maps)을 얻거나 만드는 방법

일반적으로 노멀 맵은 3D 또는 텍스처 아티스트가 제작하는 모델 또는 텍스처와 함께 제작되고 종종 알베도 맵의 레이아웃 및 컨텐츠를 동일하게 나타냅니다. 경우에 따라 노멀 맵은 손으로 제작되고 때로는 3D 애플리케이션에서 렌더링됩니다.

3D 애플리케이션에서 노멀 맵을 렌더링하는 방법은 이 문서의 범위에 포함되지 않지만, 기본 개념은 3D 아티스트가 모델의 두 가지 버전, 즉 모든 디테일이 폴리곤으로 포함된 해상도가 매우 높은 모델과 해상도가 낮은 “게임용” 모델을 제작한다는 데 바탕을 두고 있습니다. 고해상도 모델은 게임에서 최적으로 실행하기엔 디테일이 너무 많지만(메시에 삼각형이 너무 많음), 3D 모델링 애플리케이션에서 노멀 맵을 생성하는 데 사용됩니다. 그러면 모델의 저해상도 버전에서는 이제 노멀 맵에 저장된 매우 세밀한 수준의 지오메트리 디테일을 제외할 수 있으므로 노멀 매핑을 대신 사용하여 이 모델을 렌더링할 수 있습니다. 일반적인 이용 사례로는 캐릭터 의상의 경계 부분에서 주름, 단추, 버클 및 솔기의 올록볼록한 디테일을 표시하는 경우를 들 수 있습니다.

일반 사진 텍스처의 조명을 분석하여 노멀 맵을 추출할 수 있는 소프트웨어 패키지가 몇 개 있습니다. 이런 패키지는 원본 텍스처가 일정한 방향에서 빛을 받는다고 가정함으로써 작동하며, 밝고 어두운 영역이 분석되고 각진 표면에 대응한다고 가정됩니다. 하지만 범프 맵을 실제로 사용할 때는 알베도 텍스처에 이미지의 특정 방향에서 비추는 조명이 없어야 합니다. 이 텍스처는 조명이 전혀 비추지 않는 표면의 컬러를 나타내는 것이 이상적입니다. 조명 정보는 광원 방향, 표면 각도 및 범프 맵 정보에 따라 Unity에서 계산하기 때문입니다.

아래에는 두 가지 예가 있는데, 하나는 단순히 반복되는 돌 벽 텍스처와 해당 노멀 맵이고 다른 하나는 캐릭터의 텍스처 아틀라스와 해당 노멀 맵입니다.

돌 벽 텍스처와 해당 노멀 맵 텍스처
돌 벽 텍스처와 해당 노멀 맵 텍스처
캐릭터 텍스처 아틀라스와 해당 노멀 맵 텍스처 아틀라스
캐릭터 텍스처 아틀라스와 해당 노멀 맵 텍스처 아틀라스

범프 맵(Bump Maps), 노멀 맵(Normal Maps), 높이 맵(Height Maps)의 차이점

Normal MapsHeight Maps는 모두 범프 맵 타입입니다. 두 맵에는 모두 더 단순한 폴리곤 메시의 표면에 표시되는 디테일을 나타내는 데 필요한 데이터가 있지만, 데이터가 각기 다른 방법으로 저장됩니다.

왼쪽은 돌 벽 범프 매핑에 사용되는 높이 맵입니다. 오른쪽은 돌 벽 범프 매핑에 사용되는 노멀 맵입니다.
왼쪽은 돌 벽 범프 매핑에 사용되는 높이 맵입니다. 오른쪽은 돌 벽 범프 매핑에 사용되는 노멀 맵입니다.

위의 왼쪽 이미지에는 돌 벽을 범프 매핑하는 데에 사용하는 높이 맵이 보입니다. 높이 맵은 각 픽셀이 표면에서 점이 위로 올라온 것처럼 보여야 하는 정도를 나타내는 단순한 흑백 텍스처입니다. 픽셀 컬러가 흰색에 가까울수록 해당 영역이 더 높이 위로 올라온 것처럼 보입니다.

노멀 맵은 RGB 텍스처로, 여기서 각 픽셀은 표면이 향하고 있는 것처럼 보여야 하는 방향의 차이를 수정되지 않은 표면 노멀에 대해 상대적으로 나타냅니다. 이 텍스처는 벡터가 RGB 값에 저장되는 방법 때문에 푸른 보라빛을 띠는 경향이 있습니다.

Modern real-time 3D graphics hardware rely on Normal Maps, because they contain the vectors required to modify how light should appear to bounce of the surface. Unity can also accept Height Maps for bump mapping, but they must be converted to Normal Maps on import in order to use them.

왜 푸른 보라빛 컬러를 띨까요?

그 이유를 몰라도 노멀 맵을 사용하는 데 지장이 없습니다! 이 문단은 건너뛰어도 됩니다. 하지만 꼭 알고 싶은 분들을 위해 설명합니다. RGB 컬러 값은 벡터의 X, Y, Z 방향을 저장하는 데 사용되며, (Unity에서 일반적으로 Y를 “위쪽”로 사용하는 것과 달리) Z가 “위쪽” 방향입니다. 또한, 텍스처의 값은 반으로 나누고 0.5를 더한 것으로 간주되므로 모든 방향의 벡터를 저장할 수 있습니다. 따라서 RGB 컬러를 벡터 방향으로 변환하려면 2를 곱한 후 1을 빼야 합니다. 예를 들어 RGB 값이 (0.5, 0.5, 1)이거나 십육진수로 #8080FF면 벡터로 변환한 결과는 (0, 0, 1)이며, 이 벡터는 노멀 매핑에서 “위쪽” 에 해당되고 모델 표면에 변화가 없음을 나타냅니다. 이 색이 이 페이지의 앞부분에 있는 노멀 맵 “예”의 평평한 영역에 보이는 색입니다.

노멀 벡터 0,0,1 또는 직각 위에 해당하는 #8080FF만 사용한 노멀 맵. 이 맵은 폴리곤의 표면 노멀에 수정 사항을 적용하지 않으므로 조명에도 변화가 없습니다. 이 컬러와 다른 픽셀은 다른 방향을 가리키는 벡터가 되고, 따라서 해당 점의 광원 바운스를 계산하는 데 사용되는 각도를 수정합니다.
노멀 벡터 0,0,1 또는 “직각 위”에 해당하는 #8080FF만 사용한 노멀 맵. 이 맵은 폴리곤의 표면 노멀에 수정 사항을 적용하지 않으므로 조명에도 변화가 없습니다. 이 컬러와 다른 픽셀은 다른 방향을 가리키는 벡터가 되고, 따라서 해당 점의 광원 바운스를 계산하는 데 사용되는 각도를 수정합니다.

값이 (0.43, 0.91, 0.80)이면 벡터가 (–0.14, 0.82, 0.6)이 되어 표면이 매우 급격하게 변합니다. 이러한 컬러는 돌 벽 노멀 맵의 밝은 청록색 영역에서 일부 돌 가장자리 위에 나타날 수 있습니다. 그 결과 이런 가장자리에는 돌의 더 평평한 면과 다른 각도에서 광원이 비춰집니다.

이러한 돌에 사용되는 노멀 맵의 밝은 청록색 영역에는 각 돌의 위쪽 가장자리에서 폴리곤 표면 노멀이 급격하게 변하는 것으로 나타나기 때문에 인해 올바른 각도로 광원이 비춰집니다.
이러한 돌에 사용되는 노멀 맵의 밝은 청록색 영역에는 각 돌의 위쪽 가장자리에서 폴리곤 표면 노멀이 급격하게 변하는 것으로 나타나기 때문에 인해 올바른 각도로 광원이 비춰집니다.

노멀 맵(Normal Maps)

범프 맵 효과가 없는 돌 벽. 돌의 가장자리와 면에는 씬의 직접 태양광이 비추지 않습니다.
범프 맵 효과가 없는 돌 벽. 돌의 가장자리와 면에는 씬의 직접 태양광이 비추지 않습니다.
범프 매핑이 적용된 동일한 돌 벽. 태양을 향하는 돌 가장자리는 돌의 면과 반대 방향을 향하는 가장자리와 매우 다르게 태양 방향광을 반사합니다.
범프 매핑이 적용된 동일한 돌 벽. 태양을 향하는 돌 가장자리는 돌의 면과 반대 방향을 향하는 가장자리와 매우 다르게 태양 방향광을 반사합니다.
다른 조명 시나리오에서 동일한 범프 맵을 적용한 돌 벽. 점 광원 횟불이 돌에 빛을 비춥니다. 돌 벽의 각 픽셀에는 노멀 맵의 벡터에 따라 조정되는 베이스 모델(폴리곤)의 각도에 광원이 닿는 방법에 따라 빛이 비춰집니다. 따라서 광원을 향하는 픽셀은 밝고, 광원과 반대 반향을 향하는 픽셀은 더 어둡거나 섀도우 안에 있습니다.
다른 조명 시나리오에서 동일한 범프 맵을 적용한 돌 벽. 점 광원 횟불이 돌에 빛을 비춥니다. 돌 벽의 각 픽셀에는 노멀 맵의 벡터에 따라 조정되는 베이스 모델(폴리곤)의 각도에 광원이 닿는 방법에 따라 빛이 비춰집니다. 따라서 광원을 향하는 픽셀은 밝고, 광원과 반대 반향을 향하는 픽셀은 더 어둡거나 섀도우 안에 있습니다.

노멀 맵(Normal Maps)과 높이 맵(Height Maps) 임포트 및 사용 방법

노멀 맵은 평소처럼 에셋 폴더에 텍스처 파일을 저장하여 임포트할 수 있습니다. 하지만 이 텍스처가 노멀 맵임을 Unity에 알려야 합니다. 임포트 인스펙터 설정에서 “텍스처 타입” 설정을 “노멀 맵”으로 변경하면 됩니다.

흑백 하이트맵을 노멀 맵으로 임포트하는 프로세스는 거의 동일하지만, “그레이스케일에 생성” 옵션을 선택해야 합니다.

“그레이스케일에 생성” 옵션을 선택하면 인스펙터에 범피니스 슬라이더가 나타납니다. 이 슬라이더를 사용하여 하이트맵의 높이를 노멀 맵의 각도로 변환할 때 각도의 가파른 정도를 제어할 수 있습니다. 범피니스 값이 낮으면 하이트맵의 선명한 콘트라스트도 작은 각도와 범프로 변환됩니다. 값이 높으면 과장된 범프와 범프에 대한 콘트라스트가 매우 높은 조명 반응이 생성됩니다.

하이트 맵을 노멀 맵으로 임포트하는 경우의 낮은/높은 범프 설정과 이 설정이 모델에서 나타내는 효과
하이트 맵을 노멀 맵으로 임포트하는 경우의 낮은/높은 범프 설정과 이 설정이 모델에서 나타내는 효과

에셋에 노멀 맵을 추가한 후 인스펙터에 서 머티리얼의 노멀 맵 슬롯에 넣을 수 있습니다. 스탠다드 셰이더에 노멀 맵 슬롯이 있고 여러 구형 레거시 셰이더도 노멀 맵을 지원합니다.

스탠다드 셰이더를 사용하여 머티리얼의 올바른 슬롯에 노멀 맵 텍스처를 넣는 예
스탠다드 셰이더를 사용하여 머티리얼의 올바른 슬롯에 노멀 맵 텍스처를 넣는 예

노멀 맵이나 하이트맵을 임포트한 경우(위에서 설명한 것처럼 Texture Type: Normal Map을 선택하여) 노멀 맵으로 표시하지 않으면 머티리얼 인스펙터에서 아래와 같이 이 문제에 대해 경고하고 수정할 것인지 묻습니다.

인스펙터에서 노멀 맵으로 표시하지 않은 노멀 맵을 사용하려고 하면 지금 고치기 경고가 표시됩니다.
인스펙터에서 노멀 맵으로 표시하지 않은 노멀 맵을 사용하려고 하면 “지금 고치기” 경고가 표시됩니다.

“지금 고치기”를 클릭하면 텍스처 인스펙터 설정에서 Texture Type: Normal Map을 선택하는 것과 효과가 동일합니다. 텍스처가 실제로 노멀 맵인 경우 이렇게 할 수 있지만, 텍스처가 그레이스케일 하이트맵이면 자동으로 인식되지 않습니다. 따라서 하이트맵의 경우에는 항상 텍스처 인스펙터 창에서 “그레이스케일에 생성” 옵션을 선택해야 합니다.

보조 노멀 맵(Secondary Normal Maps)

스탠다드 셰이더의 머티리얼 인스펙터에서 더 아래로 내려가면 두 번째 노멀 맵 슬롯도 있음을 볼 수 있습니다. 이 슬롯을 통해 추가 노멀 맵을 사용하여 디테일을 더 만들 수 있습니다. 이 슬롯에 일반 노멀 맵 슬롯과 동일한 방법으로 노멀 맵을 추가할 수 있지만, 추가 슬롯을 사용하는 목적은 두 노멀 맵이 함께 다른 스케일에서 높은 데이터 수준을 생성하도록 다른 스케일이나 타일링 주기를 사용해야 한다는 데 있습니다. 예를 들어 일반 노멀 맵은 벽 또는 자동차의 패널의 디테일을 패널 가장자리의 홈과 함께 정의할 수 있습니다. 보조 노멀 맵은 표면 스크래치 및 마모의 범프 디테일을 매우 세밀하게 나타내며, 베이스 노멀 맵 스케일의 5배에서 10배까지 타일링할 수 있습니다. 이러한 디테일은 가까이에서 살펴봐야만 보일 정도로 아주 미세할 수 있습니다. 베이스 노멀 맵에 이 정도의 디테일이 있으려면 베이스 노멀 맵이 엄청나게 커져야 하지만, 서로 다른 스케일로 두 맵을 결합하여 두 개의 상대적으로 작은 노멀 맵 텍스처를 사용하여 전반적으로 높은 디테일 수준(LOD)를 얻을 수 있습니다.

Smoothness
하이트맵
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961