Unity client 개발을 하다보면 다양한 Material과 map을 사용하게 되는데,

그러다보면 normal map, height map 등 다양한 map을 보게된다.

오늘은 자주 사용하는 map들에 대해 간단히 정리하고 넘어가도록 한다.




프로젝트를 진행하면서, 에셋 리소스들을 정리해야하는 일이 있었는데

우연히 아래와 같은 파일들을 보게 되었다.

한 에셋을 표현하기 위해 사용되는 다양한 Map들

매번 그냥 만들어진 Material / Texture를 사용하며 그러려니 했는데,

최근 같은 회사의 훌륭한 디자이너분께서 이를 지적해주셨다.

몰랐던 사실들

앞으로 Unity를 사용하면서 꼭 알아야 할 내용이라고 판단하여

따로 정리해보도록 한다.





1. Rendering

일단, Map을 설명하기에 앞서, Map이 어디에 쓰이는지를 알아보자.


Map ( = Texture ) 을 한 마디로 정리하면,

렌더링 과정에서 물체의 기하학적 형태와 결합하여 조명 및 재질 속성에 따라 물체가 어떻게 시각화될지 결정하는 이미지이다.


그렇다면… 랜더링이란 무엇인가?

랜더링이란, 컴퓨터 그래픽으로 2차원/3차원 공간을 통해 사진이나 영상을 만들어내는 과정 또는 그러한 기법을 말한다.

Introduction to rendering

🎥 Rendering 과정

3D 형상 제작 과정
Modeling컴퓨터 그래픽을 이용해 컴퓨터 내부의 가상공간에 3차원 모형을 만들어내는 과정
Rendering Projection3차원 오브젝트를 2차원 스크린에 비추는 과정
Clipping디스플레이 밖의 보이지 않는 부분을 처리하는 과정
Hiding Surface오브젝트의 보이는 부분과 보이지 않는 부분을 처리하는 과정
Shading음영, 조명 빛, 광원의 빛, 반사광, 투명한 효과 등을 처리하는 과정
Mapping오브젝트의 표면에 텍스처 등을 씌워 질감과 반사된 풍경 등을 처리하는 과정

※ 이 과정들 중 셰이딩과 매핑은 그 특성상 서로 겹치는 경우가 많다.

컴퓨터 그래픽스 분야의 렌더링 과정중 하나인 Shading은 3차원 오브젝트의 표면을 처리할 때

조명의 위치나 물체의 기울기, 색, 밝기에 반응하여 오브젝트 표면상의 음영을 처리하는 기능이다.

벡터 L과 벡터 P의 내적 값이 P와 같을수록, 밝아진다.

Shading은 어떻게 빛을 시뮬레이션해서 표현하는지에 따라 다양한 종류로 나눌 수 있는데,

이번 포스트에서는 3가지 정도만 살펴보도록 한다.

🔶 Legacy Lendering

  • 빛의 물리적 현상을 전혀 고려하지 않은, 텍스처에 음영과 반사광을 직접 그려 넣은 셰이더이다.


🔶 Non-Photorealistic orient PBR (Physically Based Rendering) Shader

  • Specular/Glossiness 방식 셰이더라고도 한다.

  • 물체의 색상을 표현하는데 Diffuse map을 사용한다.

  • 물체의 표면을 정의하는 데 Specular(정반사광)Glossiness(윤활도)를 사용한다.

  • Specular은 물체 표면에서의 빛의 반사 강도와 색상을 나타내며, Glossiness는 표면의 부드러움 또는 거칠기를 나타낸다.

  • Blinn-Phong Shader는 대표적인 Specular/Glossiness 방식 셰이더이다.


🔶 Photorealistic orient PBR (Physically Based Rendering) Shader

  • Metallic/Roughness 방식 셰이더라고도 한다.

  • 물체의 색상을 표현하는데 Base color map을 사용한다.

  • 물체의 표면을 정의하는 데 Metallic(금속성)Roughness(거칠기)를 사용한다.

  • Metallic은 물체 표면이 금속인지 비금속인지를 결정하며, Roughness는 표면의 거칠기를 나타낸다.


🚨 주의사항

Specular/Glossiness 방식을 Legacy Shader라고 부르는 실수를 하지 않도록 한다.
Metallic/Roughness 방식이 좀 더 사실적일 뿐, Specular/Glossiness 방식 또한 PBR이다.


위 항목들 중, 공통적으로 보이는 PBR을 사용하는 map으로 구분지어 표로 정리했을때, 아래와 같다.

구분 Specular/Glossiness
(Non-Photorealistic PBR, 비실사 지향 PBR)
Metallic/Roughness
(Photo Realistic PBR, 실사 지향 PBR)
재질의 기본 색 난반사(Diffuse) 텍스처 기본색(Albedo) 텍스처
재질의 반사광 정반사(Specular) 텍스처 (또는 값) 금속성(Metallic) 값
재질의 거칠기 매끄러운 정도(Glossiness) 텍스처 (또는 값) 거칠기(Roughness) 텍스처 (또는 값)


그렇다면 지금부터 각 Shader 사용되는 map들이 어떤 특징을 가지고 있는지에 대해 알아보도록 한다.

📚 참조 문서





Legacy Rendering

2. Hand painting map ( = 손맵 )

손맵이란, 픽셀 페인팅 기반의 그래픽 툴을 이용하여 직접 만든 텍스처이다.

손맵은 폴리곤에 씌워질 텍스처 이미지를 직접 손으로 그린 방법을 말한다.

손맵은 핸드페인팅 기법의 한국식 용어이다.

손맵의 특징으로는, 주변 조명 및 그림자와 함께 색상이 이미지에 표시된다는 것이다.

Diffuse map 한장으로 표면의 거칠기, 부드러움, 패턴 등을 나타낼 수 있기에 이는 곧 랜더링 효율이 높다는 뜻이므로

모바일 환경이나 컴퓨팅 파워가 낮은 환경에서는 좋은 방법이 될 수 있다.

입체감, 질감, 재질 등을 모두 한 장의 텍스처에 그리기 때문에 수정이 쉽다는 특징 또한 가지고 있다.

손맵을 사용하는 대표적인 게임들 (WOW / LOL)

단점으로는 디자이너 및 아티스트가 하나 하나 그려서 표현하기 때문에 맵핑에 시간이 많이 소요 되는 편이다.

대체로 캐주얼이나 애니메이션 스타일의 그래픽에서 많이 사용 되고, 반실사 그래픽에도 사용되곤한다.

손맵을 통해 게임 특유의 느낌을 표현할 수 있다. (Overwatch / Valorant)


📚 참조 문서





Specular/Glossiness

3. Diffuse map

Diffuse map은 빛이 표면에 충돌하여 고르게 반사되는 정도를 나타낸 맵이다.

Diffuse map은 물체의 표면에 빛이 어떻게 난반사되는지를 나타내는 텍스처 맵으로, 흔히 텍스처라고 생각하면 떠올리는 맵이다.

정반사광과 난반사광

물체에 반사되는 빛은 크게 2가지가 있는데, 금속처럼 표면이 매끄러운 경우에 일어나는 정반사(Specular reflection)와

표면이 울퉁불퉁한 경우 일어나는 난반사(Diffuse reflection)이다.

이 중, Diffuse map은 난반사가 일어난 표면의 색상을 정의하는데 사용된다.

Diffuse map과 Specular map

위 그림의 오른쪽 사진 처럼, 난반사가 일어나는 표면(문의 표면, 부착된 스티커 등)의 색상을 정의해 놓은 것이 Diffuse map이다.

중요한 점은 난반사가 일어나는 표면의 색상만 정의해야하기 때문에,

정반사가 일어나야하는 표면은 검은색으로 표현했다.

예시에서는 우주선 문 손잡이 부분의 Diffuse map 보면, 검은색으로 되어 있는 것을 알 수 있다.


이 Diffuse map은 Specular/Glossiness을 레거시 랜더링이라고 부르게 만든 장본인이기도 한데,

예전에는 기술적 한계로 엔진에서 Glossiness를 잘 지원해주지 않았기에 정반사와 난반사를 원하는대로 표현하기 위해

Diffuse map에 있어서는 안 될 양감과 음영을 손으로 그려 넣고는 하였다고 한다.

라이팅 정보가 들어있는 Diffuse map

즉, Diffuse map 자체가 이미 어느 정도의 라이팅 정보를 가지고 있다는 뜻인데,

이러한 방식은 당연하지만 PBR에 맞지 않으며 이는 게임엔진이 지원하던 셰이더의 문제였지 스페큘러 워크플로우의 문제는 아니었다.


📚 참조 문서





Metallic/Roughness

4. Albedo map ( = Base map, Base color map )

Base map 또는 Base color map 이라고도 불리며, 물체의 색을 담고 있는 맵이다.

보통 텍스처맵 파일 이름 끝에 A가 붙어있으면 Albedo map이다.

Metallic/Roughness에서 사용되며, 이전에 살펴본 Diffuse map과 비교되는 맵이다.

특징으로는 이름에서부터 알 수 있듯이 물체의 색상을 담고 있다.

Diffuse map도 그렇지만, 색상만 담고있어 흐릿하고 대비가 없는 것이 특징이라, Albedo map 한 장만으로는 이게 뭔가… 싶지만

PBR에서 여러 Map (Normal map, Specular map, Roughness map)들과 결합하면 현실성이 매우 높은 결과를 얻을 수 있다.

Base Color (Albedo) + Metallic map으로 만든 실사풍 그래픽 (사진 출저)

위 예시처럼, Albedo와 다른 여러 map을 같이 사용하면 실사풍의 멋진 결과물을 얻을 수 있다.

Unity또한 2015년부터 Unity 5 부터 PBR 워크플로우가 도입되면서 Albedo map을 쓸 수 있게 되었다.

Unity에서는 Albedo 또는 Base Map 이라는 항목으로 찾아 볼 수 있다.


Diffuse map과의 큰 차이점이라면, 아무래도 정반사가 일어나는 부분의 색상도 표현한다는 점이다.

위에서 언급했듯이, Diffuse map은 난반사만 표현하기 때문에 정반사가 일어나는 부분은 검정색으로 표현하지만

Albedo map은 난반사 / 정반사를 신경쓰지 않고 모든 색상을 표현한다.


🚨 주의사항

Diffuse map과 Albedo map을 혼용해서 사용하는 경우가 많은 것 같다. 차이점을 분명히 알아두자!

📚 참조 문서





Specular/Glossiness

5. Specular Map

물체의 표면에서 반사되는 광택(또는 반사광)의 강도와 색상을 나타내는 맵

Specular map은 표면에서의 광택이 얼마나 강하고 어떤 색상을 가지는지를 결정한다.

Specular/Glossiness에서 사용되며, 이후에 살펴본 Metalic map과 비교되는 맵이다.

Metalic map의 픽셀 값이 작을수록 (검정색일수록) 반사광이 작다는 뜻이며,

반대로 값이 크다면 (흰색이라면) 반사광이 크다는 뜻이다.

금속 재질인 문 손잡이의 경우, Specular map에서 흰색으로 표현한다.

특징이라면, 비 금속 재질일 경우에도 정반사율이 0인 경우는 없기 때문에

비금속 재질을 표현할 땐 아예 검정색으로 칠하기 보다는 특정 색(#F0F0F0)으로 표현한다는 점이다.

또한 정반사 되었을 때의 반사율과 반사된 색상을 표현하기 때문에, RGB 채널을 모두 사용하므로,

이는 후술할 Metalic map에 비해 최적화가 덜 되었다고도 볼 수 있다고 한다.




📚 참조 문서


Metallic/Roughness

6. Metallic Map

물체의 표면중 어떤 부분이 금속이고 아닌지를 나타낸 맵

Metalic map은 무엇이 금속이고 무엇이 비금속인지 정의하는 맵으로, 일종의 마스크처럼 작동한다.

보통 텍스처맵 파일 이름 끝에 M이 붙어있으면 Metalic map이다.

Metallic/Roughness에서 사용되며, 이전에 살펴본 Specular map과 비교되는 맵이다.

검은색은 비금속인 부분이고, 흰색인 곳은 금속인 부분으로 치게 된다.

일반적으로는 이 맵에서는 순수한 검정색 또는 흰색만 사용되지만

알루미늄같은 애매한 금속도 회색 음영으로 표현될 수 있다고 한다.

녹이 덜 슬어 금속인 부분은 흰색, 녹이 많이 슬어 금속이 아닌 부분은 검은색

특징으로는 단순 Grayscale 이미지이기 때문에, Specular map과 비교했을 때 최적화가 더 잘되어있다고 볼 수 있다.



📚 참조 문서


Specular/Glossiness

7. Glossiness Map

물체의 표면이 얼마나 부드럽거나 거칠고 반짝거리는지를 정의하는 데 사용되는 텍스처 맵

Specular/Glossiness에서 사용되며, 이후에 살펴볼 Roughness map과 비교되는 맵이다.

대부분의 Material은 표면에 미세한 불규칙성을 갖고 있어 입사 광선이 다른 방향으로 반사된다.

예를 들어, 표면이 불규칙할수록 반사된 광선이 확산되어 반사가 더 흐릿 해지며

표면이 더 연마될수록 광선이 같은 방향으로 반사되어 반사가 더욱 선명 해지게 되는데,

3D Mesh 자체에 이러한 미세 불규칙성을 만드는 것은 비현실적이며 수백만 개의 다각형이 필요하게 된다.

Glossiness mapSpecular/Glossiness 방식에서 이러한 미세 불규칙성을 제어하는 ​​맵으로,

일반적으로 Grayscale 이미지로 구성된다.

Specular/Glossiness 방식에서 사용되는 Glossiness map

각 픽셀은 해당 지점의 표면의 부드러움을 나타내는 값으로 인코딩된다!

( 흰색은 매우 부드러운 표면 검은색은 매우 거친 표면 )




Metallic/Roughness

8. Roughness Map

물체의 표면이 얼마나 부드럽거나 거칠고 반짝거리는지를 정의하는 데 사용되는 텍스처 맵

보통 텍스처맵 파일 이름 끝에 R이 붙어있으면 Roughness map이다.

Metallic/Roughness에서 사용되며, 이전에 살펴본 Glossiness map과 비교되는 맵이다.

Glossiness map과 똑같이 물체의 표면의 거친 정도를 표현한다.

Roughness를 달리 적용했을 때 차이

특징으로는, Glossiness map와 정확히 반대의 역할을 한다는 것인데,

Glossiness가 1이라는 뜻은 Roughness가 0이라는 뜻이고,

Glossiness가 0이라는 뜻은 Roughness가 1이라는 뜻이다.

따라서 Glossiness를 이미지 반전시킨다면 Roughness map을 얻을 수 있다는 특징이 있다.

Glossiness와 Roughness는 서로 반전 관계




Specular/GlossinessMetallic/Roughness

9. Normal map

Normal map은 범프 매핑(Bump Mapping)을 구현한 맵으로써, 튀어나온 곳과 움푹 틀어간 곳의 빛을 왜곡시키는 맵이다.

보통 텍스처맵 파일 이름 끝에 N이 붙어있으면 Normal map이다.

Normal map은 사용하는 이유는, 더 많은 폴리곤을 사용하지 않고 세세한 부분을 추가하기 위함이다.

왼쪽 mesh를 만들기 위해서는 4M에 달하는 triangle이 필요하지만,
Normal map을사용하면 중간에 있는 간단한 mesh만으로도 오른쪽과 같이 만들 수 있다.

Normal map은 일반적으로 일반적인 RGB 이미지로 저장되며 여기서 RGB 요소는 법선면의 X, Y, Z 축과 각각 일치한다고 한다.

Material에 Normal map을 적용하려면, Material 선택 후 인스펙터에서 Normal map에 원하는 텍스처를 넣으면 된다.

인스펙터에서 Normal map에 원하는 텍스처를 넣으면 된다.

Unity에서 이를 적용하려면, 해당 Normal map texture의 타입을 normal map으로 설정해야 한다.

아래와 같이 설정하면 된다.

Texture를 Normal map으로 설정해야 한다!

🔶 Unreal Engine의 Nanaite

Normal map을 사용하는 이유는 폴리곤을 적게 사용해 리소스 부담을 줄이기 위해서인데,

이와 관련된 다른 기법으로는 카메라로 부터 멀리 있는 객체는 대충 그리게 하는 Level Of Details (LOD) 기법이 있다.

다만 LOD와 Normal map 또한 만능은 아니고, 해결하지 못하는 단점이 몇 가지 있는데,

  • Normal map을 만들어야하는 공수가 들어감

  • LOD 적용시, 리소스 자체를 여러개 만들어야 함

  • 카메라 자체 Zoom을 할 경우, LOD가 적용되지 않을 수 있음

하지만 Unreal Engine에는 이런 Normal map과 LOD를 사용하지 않고 Nanite 기법을 사용하고 있는데,

Nanite에 대한 설명은 아래 영상에서 아주 잘 설명하고 있으니 영상을 참고하자.


나홀로 컨퍼런스 : LOD, 노말맵 왜 씀? 언리얼 나나이트 단숨에 정ㅋ벅ㅋ


📚 참조 문서