물리 기반 머티리얼

주요 물리 기반 머티리얼 입력과 가장 적절한 사용 방법의 개요입니다.

Choose your operating system:

Windows

macOS

Linux

PhysMatHeader.png

이 문서에서는 언리얼 엔진의 물리 기반 머티리얼 시스템 작업을 위한 가이드라인과 모범 사례를 다룹니다. 언리얼 엔진의 머티리얼 생성 프로세스에 어느 정도 익숙해진 사용자를 대상으로 합니다. 언리얼의 머티리얼을 완전히 처음 접하신다면, 핵심 머티리얼 개념 문서부터 시작하시는 것이 좋습니다.

이 문서는 물리 기반 셰이딩 워크플로에 직접적으로 관련된 머티리얼 어트리뷰트만 중점적으로 다룹니다. 메인 머티리얼 노드의 모든 입력을 자세히 살펴보려면 머티리얼 입력 문서를 참조하세요.

물리 기반의 의미

Physically based rendering 물리 기반 렌더링(PBR)은 이름과는 반대로 표면이 현실의 라이트 작용 방식을 모방한다는 뜻입니다. PBR 원칙에 부합하는 머티리얼은 아티스트의 직관에만 의존하여 파라미터를 세팅하는 셰이딩 워크플로보다 더 정확하고 자연스럽게 보입니다.

물리 기반 머티리얼은 모든 라이팅 환경에서 동일하게 잘 작동합니다. 또한 머티리얼 값이 덜 복잡해지고 상호 의존성도 줄어들기 때문에 머티리얼 제작 워크플로가 더 사용자 친화적입니다. 이러한 장점은 픽사(Pixar)[4]와 디즈니(Disney)[3]의 영화처럼 포토리얼하지 않은 렌더링에도 적용됩니다.

언리얼 엔진의 물리 기반 머티리얼과 셰이딩 모델을 심도 있게 살펴보려면 이 SIGGRAPH 프레젠테이션2을 참조하세요.

PBR 머티리얼 어트리뷰트

언리얼 머티리얼의 물리 기반 특성에 직접적으로 관련된 머티리얼 어트리뷰트입니다.

이 입력은 모두 0에서 1 사이의 값을 받도록 설계되었습니다. 베이스 컬러의 경우, 컬러 또는 텍스처 샘플의 RGB 값이 0과 1 사이라는 뜻입니다.

물리 기반 값은 현실 머티리얼에서 측정할 수 있습니다. 예시는 다음과 같습니다.

베이스 컬러

베이스 컬러(Base Color)는 머티리얼의 전반적인 색을 정의합니다. 베이스 컬러 입력은 Vector3(RGB) 값을 받으며, 각 채널 값은 0과 1 사이로 자동 범위제한됩니다.

베이스 컬러

현실에서 측정한 경우, 편광 필터를 사용한 촬영물의 색과 같습니다(편광은 평행 상태에서 비금속의 스페큘러를 제거합니다).

비금속 베이스 컬러 측정값(강도만):

머티리얼

베이스 컬러 강도

0.02

새 아스팔트

0.02

헌 아스팔트

0.08

맨땅

0.13

풀밭

0.21

모래사막

0.36

새 콘크리트

0.51

빙하

0.56

갓 내린 눈

0.81

금속 베이스 컬러 측정값:

머티리얼

베이스 컬러(R, G, B)

(0.560, 0.570, 0.580)

(0.972, 0.960, 0.915)

알루미늄

(0.913, 0.921, 0.925)

(1.000, 0.766, 0.336)

구리

(0.955, 0.637, 0.538)

크롬

(0.550, 0.556, 0.554)

니켈

(0.660, 0.609, 0.526)

티타늄

(0.542, 0.497, 0.449)

코발트

(0.662, 0.655, 0.634)

백금

(0.672, 0.637, 0.585)

러프니스

러프니스 입력은 머티리얼 표면의 거칠거나 부드러운 정도를 제어합니다. 머티리얼에서 러프니스 입력은 머티리얼에 나타나는 리플렉션이 얼마나 희미하거나 선명한지를 결정합니다.

거친 재질에 반사된 빛은 부드러운 재질보다 여러 방향으로 퍼져 분산되며, 가끔 미세한 반사가 나타나기도 합니다. 매끄러운 표면에서는 빛이 더 균등하게 반사되므로 선명하고 집중된 리플렉션 또는 스페큘러 하이라이트가 나타납니다.

  • 러프니스가 0인(부드러운) 경우 거울과 같이 반사됩니다.

  • 러프니스가 1인(거친) 경우 분산 또는 무광 표면이 됩니다.

roughness_nonmetal.png roughness_metal.png

러프니스 값은 0~1입니다. 위는 비금속, 아래는 금속입니다.

러프니스 값은 0~1입니다.

러프니스 매핑하기

러프니스는 흔히 회색조 텍스처를 사용하는 오브젝트에 매핑되어 표면에 물리적 베리에이션을 더합니다. 러프니스 맵의 어두운 영역은 머티리얼에서 거울처럼 표현되는 반면, 밝은 영역은 거칠고 반사가 적습니다.

아래 영상에서는 러프니스 값이 0에서 1로 올라갈 때, 펄린 텍스처가 밝은(거친) 값 및 어두운(부드러운) 값의 분포를 제어합니다. 값이 0일 때 머티리얼 프리뷰는 완전히 거울과 같습니다. 값이 1일 때 머티리얼은 완전히 무광입니다. 값이 0과 1 사이인 경우 표면 일부는 매끄럽고, 일부는 거칠게 표현되어 더욱 흥미로운 결과가 나타납니다.

러프니스 맵은 주로 플라스틱과 메탈 같은 머티리얼에 흠집, 얼룩 등 결함을 더하는 데 사용됩니다.

러프니스 vs 스페큘러

러프니스와 스페큘러 간의 상호작용은 꼭 이해해야 할 중요한 부분입니다. 특히 PBR 워크플로를 채택하기 이전 버전의 언리얼 엔진에서 작업했다면 더욱 그렇습니다.

스페큘러(Specularity) 는 표면에 반사되는 스페큘러 라이트의 양을 뜻합니다. 이 값은 머티리얼 유형별로 다르며, 보통 기본값인 0.5가 정확합니다. 스페큘러 입력은 리플렉션/스페큘러 맵에 사용되지 않으며 표면 베리에이션을 더하는 데 사용되지도 않습니다. 러프니스 맵에서 처리되어야 합니다.

메탈릭

메탈릭(Metallic) 입력은 0과 1 사이의 값을 받으며, 머티리얼이 금속인지, 비금속인지를 정의합니다.

언리얼 엔진에서는 메탈릭을 바이너리 프로퍼티로 취급하는 경우가 대부분입니다. 순수한 금속, 돌, 플라스틱 등 순수한 표면의 경우, 메탈릭을 0과 1 사이의 값이 아닌 0 또는 1 로 설정해야 합니다. 부식되었거나, 먼지가 쌓였거나, 녹이 슨 금속과 같은 혼합 표면을 만들 때는 0과 1 사이의 값이 필요할 수 있습니다.

  • 비금속 의 메탈릭 값은 0입니다. 0이 기본값입니다.

  • 금속 의 메탈릭 값은 1입니다.

메탈릭 값

메탈릭 값은 0~1입니다.

처음에는 완전히 금속성인 머티리얼을 만드는 일이 내키지 않을 수도 있습니다. 하지만 특별한 이유가 없다면 부분적인 값은 사용하지 않는 것이 좋습니다.

이 예시는 상대적으로 러프니스가 낮은 머티리얼에서 메탈릭이 0에서 1로 증가할 때 표면이 어떻게 변화하는지 보여줍니다.

메탈릭 값은 0~1입니다.

메탈릭 매핑하기

동일한 머티리얼에 금속성과 비금속성이 모두 있는 경우도 많습니다. 페인트가 금속판의 일부 또는 전부를 덮었다고 생각해 보세요.

페인트는 비금속이므로 페인트가 칠해진 모든 영역의 메탈릭 값은 0이어야 합니다. 금속판이 드러난 부분에서는 메탈릭 값이 1이어야 합니다.

이는 메탈릭 입력에 전달되는 검은색 및 흰색 마스크를 통해 처리됩니다. 페인트는 금속과 혼합되는 것이 아니라 금속 위에 있기 때문입니다. 메탈릭 맵은 중간 회색조 값이 아닌 검은색과 흰색만 포함해야 합니다. 머티리얼 레이어로도 비슷한 결과를 얻을 수 있습니다.

스페큘러

스페큘러(Specular) 입력은 0과 1 사이의 값을 받으며, 표면에 스페큘러 라이트가 반사되는 정도를 제어합니다.

  • 스페큘러 값이 0이면 반사가 없습니다.

  • 스페큘러 값이 1이면 완전히 반사됩니다.

언리얼 엔진이 사용하는 기본 스페큘러 값 0.5 는 약 4%의 스페큘러 리플렉션을 나타냅니다. 이 값은 대부분 머티리얼에서 정확하게 작용합니다.

디퓨즈가 매우 심한 머티리얼은 스페큘러 값을 0으로 설정하고 싶을 수 있지만, 참아야 합니다! 모든 머티리얼에는 스페큘러가 있습니다. 이 게시물[5]의 예시를 참조하세요. 디퓨즈가 심한 머티리얼을 만드는 올바른 방법은 러프니스 값을 올리는 것입니다.

캐비티 맵

스페큘러를 수정하는 이유 중 하나는 노멀 맵에 표현된 균열에서 생기는 미세한 오클루전이나 작은 섀도잉을 추가하기 위해서입니다. 이러한 균열을 캐비티라고도 부릅니다. 소규모 지오메트리, 특히 하이 폴리에만 있고 노멀 맵에 구워지는 디테일은 렌더러의 실시간 섀도에 표현되지 않습니다.

이러한 섀도잉을 캡처하기 위해 캐비티 맵(Cavity Map)을 생성합니다. 캐비티 맵이란 주로 초단거리 트레이스로 만든 AO 맵입니다. 이 캐비티에 최종 베이스 컬러를 곱해 출력하게 되며, 스페큘러 출력의 경우 0.5(스페큘러 기본값)를 곱합니다.

즉, 베이스 컬러 = 캐비티*기존 베이스 컬러, 스페큘러 = 캐비티*0.5입니다.

숙련자의 경우 이 값을 IOR(리프랙션 인덱스) 제어에 사용할 수 있습니다. 99%의 머티리얼에는 이 과정이 필수적이지 않습니다. 아래는 IOR 측정값을 기준으로 한 스페큘러 값입니다.

스페큘러 측정값:

머티리얼

스페큘러

유리

0.5

플라스틱

0.5

석영

0.570

얼음

0.224

0.255

우유

0.277

피부

0.35

스페큘러 값은 0~1입니다

measured_materials.png

측정된 머티리얼의 예시입니다. 상단: 숯, 새 콘크리트, 헌 아스팔트. 하단: 구리, 철, 금, 알루미늄, 은, 니켈, 티타늄

레퍼런스

1. Lagarde, Feeding a physically based shading model

2. Karis, Real Shading in Unreal Engine 4

3. Burley, Physically-Based Shading at Disney

4. Smits, Reflection Model Design for WALL-E and Up

5. Hable, Everything is Shiny