본문 바로가기

유니티/그래픽스

[Unity] HDRP에서 기본 Material 사용법 (1)

반응형

유니티는 Built-in, URP, HDRP의 Lit shader에 대해 각각 다른 머테리얼 파라미터를 가지도록 되어있다.

본 글에서는 HDRP에서의 머테리얼 파라미터값이 어떤 의미를 지니는지에 대하여 포스팅하였다.

 

그전에 우리는 다음과 같은 궁금증이 들 수 있다. 유니티는 대체 왜 번거롭게 렌더링 파이프라인에 따라 셰이더를 나누고 있는 것일까?


렌더링 파이프라인에 따른 Shader Parameter가 달라지는 이유

가장 큰 이유는 렌더링 파이프라인의 목적이 다르다는 것에 있다. 

가장 기본만을 제공하며 가장 간단한 제작이 가능한 Built-in 파이프라인(Legacy로 곧 사라질지도 모른다)부터 최적화와 성능을 위한 URP(주로 모바일 플랫폼을 제작할 때 사용된다), 고해상도 게임이나 영화를 위한 HDRP까지 각 파이프라인은 서로가 다른 사용목적을 갖고 있다.

 

따라서 해당 파이프라인에 사용되는 기본 셰이더들도 각자의 목적에 맞게 머테리얼 파라미터들을 갖고 있는 것이다.

 

HDRP의 경우 고해상도 렌더링에 사용하는 파이프라인이므로 Lit Shader(Lighting Shader의 줄임말)에는 라이팅 처리를 도와줄 파라미터들이 URP나 빌트인보다 훨씬 더 다양하게 들어있다.

 


HDRP의 Lit Shader에는 어떤 파라미터들이 있을까?

우선 셰이더의 프로퍼티는 크게 다음과 같이 나뉜다.

  • Surface Options
  • Surface Inputs
  • Detail Inputs
  • Emission Inputs
  • Advanced Options

이중 가장 자주 쓰이는 Surface Inputs에 대해 먼저 확인해 보자.

Surface Inputs에는 다음과 같은 파라미터들이 있다.

(Material Type이 Standard일 경우)

  • Base Map
  • Metallic
  • Smoothness
  • Mask Map
  • Normal Map
  • Bent normal Map
  • Coat Mask
  • Tiling
  • Offset

URP Lit shader 포스팅에서 언급했듯이 Map이라는 용어가 붙은 파라미터는 모두 3D그래픽스 툴로 제작된 텍스쳐를 넣을 수 있다. 이는 Blender나 Maya 같은 툴에서 UV Mapping을 통해 생성된 텍스쳐다.

 

이제 각 파라미터에 대해 상세하게 접근해 보자.

아래의 예시는 녹슨 구리 재질을 큐브에 입히는 것으로 시작한다.


Surface Inputs

Base Map

Color와 Opacity정보를 갖고 있는 Texture를 지정할 수 있다. Built-in의 Albedo에 해당한다.

만약 투명도(Alpha Channel)를 갖고 있다면 Surface Type를 Transparent로 변환하여 지정할 수 있다.

 

Base Map 적용


Metallic, Smoothness

각 값들은 0부터 1 사이의 실수값을 가질 수 있다.

 

1에 가까울수록 높은 금속성과 높은 평활도를 가지게 된다.

하지만 물체의 표면이 항상 동일한 Metallic과 Smoothness를 가지고 있진 않다.

물체 표면의 불균일한 재질정보를 효율적으로 입히기 위해서는 매핑을 하면 된다.

그러나 URP에는 있던 Metallic Map을 HDRP에서는 볼 수가 없다. 대신 Mask Map이라는 파라미터를 우리는 이용해야 한다.


Mask Map

마스크 맵은 Metallic Map, Smoothness Map, Ambient Occlusion Map, Detail Mask에 대한 정보를 한 번에 저장하고 있는 텍스쳐 맵이다. 하나의 텍스쳐가 어떻게 4개의 정보를 다 담을 수 있는 것일까?

 

하나의 텍스쳐가 위와 같은 정보를 다 가질 수 있는 이유는 각 정보가 Gray scale로 나타나는 1차원 형태의 데이터이기 때문이다.

 

예시로 든 녹슨 구리 재질의 각 정보를 나타내면 다음과 같다.

Metallic Map Smoothness Map Ambient Occlusion Map

위에서 알 수 있듯이 각 텍스쳐가 모두 하얀색(1)에서 검은색(0) 사이의 값(Gray scale)들로 나타내어진다.

Mask Map은 이 값들을 각각 RGBA영역에 넣어서 저장한다.

 

다음은 Mask Map의 파라미터 정보 저장에 대한 유니티 매뉴얼 설명이다.

Metallic Map은 R채널에, Abient Occlusion은 G채널에 등록되며 나머지 Map에 대한 정보도 각각 B, A채널에 저장된다.

 

따라서 Metaillic Map만 보유하고 나머지 값들이 모두 0인 Mask Map은 다음과 같이 나타내어진다.

Metallic Map만 보유

Metallic Map이 R채널에 저장되고 나머지 Green과 Blue는 0이기 때문이다. 녹슨 구리 재질을 이용해 만든 Mask Map은 아래와 같이 나타내어진다.

Mask Map

녹슨 구리 재질의 Mask Map을 적용한 결과는 다음과 같다.

Mask Map 적용

 

개인적인 의견으로, 이 Map의 이름이 Mask Map인 이유는 Metallic과 Smoothness, AO, Detail 등의 수치를 UV상에서 어느 곳을 가릴 것이냐(Mask)를 정하기 때문인 것 같다. 


Normal Map

3D 오브젝트 표면의 깊이를 나타내도록 도와주는 텍스쳐이다. 

Normal Map 적용


Bent normal Map

Normal Map은 일반적으로 직선광을 기준으로하여 3D 오브젝트 표면의 깊이를 나타낸다.

반면 Bent normal Map은 이름에서 알 수 있듯 직선광이 아닌 구형광원이나 곡선광원에 대한 노멀맵을 나타낸다.

따라서 HDRP에서는 아주 정교한 조명효과 표현이 가능해진다.

유니티 공식문서에도 정교한 AO(앰비언트 오클루전)을 나타낼 때 사용하라고 되어있다.

 

Bent normal map의 경우 그래픽스 디자인 툴을 사용해 사전에 제작한 Texture를 적용해야 한다.

주의할 점은 Diffuse Lighting과만 호환된다.


Coat Mask

코팅 재질을 표현할 때 사용된다.

예를 들어, 자동차의 페인트나 플라스틱 재질에 코팅을 하는 경우에 해당된다. 기존에 이러한 효과를 나타내기 위해서는 코팅하는 부분을 따로 제작해야 했지만 Coat Mask를 이용하면 코팅하고자 하는 부분에 마스크를 적용하면 되기 때문에 간편하게 구현이 가능하다.

 

기본값은 0으로 지정되어 있으며 다른 Mask Map과 마찬가지로 하얀색(1)은 코팅레이어를 적용하는 부분, 검은색(0)은 적용하지 않는 부분에 해당한다.


Tiling & Offset

3D 모델링 툴에서 제작된 오브젝트의 UV의 스케일과 위치를 조정하는 기능이다.

Tiling 텍스쳐(UV)를 얼마나 반복할 것인가?
Offset 텍스쳐(UV)를 어디서 부터 시작할 것인가?
반응형