물리 기반 머티리얼

주요 머티리얼 입력에 대한 개요 및 그 최적 사용법입니다.

Windows
MacOS
Linux

PhysMatHeader.png

이 글은 언리얼 엔진 4 의 물리 기반 머티리얼 시스템을 빠르게 익히고자 하는 분들을 돕기 위한 문서입니다. 최소한 언리얼 엔진 3 이상에서 머티리얼 생성에 어느정도는 익숙한 분들을 대상으로 합니다. 언리얼 머티리얼이 완전 생소한 분들은, 핵심 머티리얼 개념 문서부터 먼저 참고해 보시는 것이 좋습니다.

여기서의 목표는 이 시스템을 사용하여 표준 머티리얼을 제작하는 방식을 "평이한 언어로 요점정리" 해 드리는 것인데, 기존 버전의 언리얼 엔진 작업방식에 익숙한 분들에게도 헛갈릴 수 있기 때문입니다. 물리 기반 접근법에 관련해서 오직 머티리얼 관련된 부분에만 초점을 맞춰 보겠습니다. 사용가능한 입력 전체에 대한 설명은, 머티리얼 입력 문서를 참고해 주세요.

물리 기반이란?

Physically based, 물리 기반 셰이딩이란, 빛의 작용이 이래야 할 것이다 하고 직관적으로 추정하기 보다는, 실제로 어떠한 작용을 하는지 추정하는 것을 뜻합니다. 그 결과 좀 더 정확하고 자연스러운 외양을 얻을 수 있습니다. 물리 기반 머티리얼은 라이팅 환경에서도 똑같이 잘 작동합니다. 게다가 머티리얼 값도 덜 복잡해지고 상호의존적이 되어, 인터페이스 직관성이 높아집니다. 이러한 장점은 픽사와 [4] 디즈니의 [3] 최근작에서 명확히 볼 수 있듯이, 비실사 렌더링에도 적용됩니다.

이런 저런 이유로 인해, 언리얼 엔진 4 에서는 새로운 물리 기반 머티리얼 및 셰이딩 모델을 채택했습니다. UE4 의 물리 기반 머티리얼 및 셰이딩 모델 관련해서 기술적으로 자세한 내용은, SIGGRAPH 프레젠테이션을 [2] 참고해 주시기 바랍니다.

머티리얼 파라미터

머티리얼 시스템의 "물리 기반" 측면에서 볼 때, 익혀둘 필요가 있는 프로퍼티는 딱 네 가지입니다:

  • Base Color 베이스 컬러, 바탕색

  • Roughness 러프니스, 거칠기

  • Metallic 메탈릭, 금속성

  • Specular 스페큘러, 정반사

이러한 입력 모두 0 에서 1 사이의 값을 받도록 디자인되었습니다. 베이스 컬러 의 경우, RGB 포함 컬러 값이 0 과 1 사이의 값에 속한다는 뜻입니다.

물리 기반 값은 현실의 재질에서 측정할 수 있습니다. 아래 몇 가지 예시가 있습니다.

베이스 컬러

Base Color (베이스 컬러)는 머티리얼의 전체적인 색을 정의하며, Vector3 (RGB) 값을 받아 각 채널 값을 0 과 1 사이로 자동 제한(clamp)합니다.

현실에서 측정한 경우, 편광 필터로 사진을 찍었을 때의 색입니다 (편광은 평행 상태에서 비금속의 정반사를 제거합니다).

BaseColor_QS.png

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

재질

베이스 컬러 강도

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)

러프니스

Roughness (러프니스) 입력은 말 그대로 머티리얼 표면의 거칠고 부드러운 정도를 제어합니다. 거친 재질에 반사된 빛은 부드러운 재질보다 여러 방향으로 퍼지므로, 리플렉션이 얼마나 희미하거나 선명한지, 아니면 스페큘러 하이라이트가 얼마나 퍼져있는지 모여있는지로 확인됩니다. 러프니스가 0 인(부드러운) 경우 거울 반사이며, 1 인(거친) 경우 완전히 무광 또는 난반사(diffuse) 입니다.

roughness_nonmetal.png roughness_metal.png

러프니스 0 에서 1 까지, 위는 논메탈, 아래는 메탈입니다.

슬라이더를 드래그하면 러프니스 값 변화를 확인할 수 있습니다.

러프니스 매핑

러프니스라는 프로퍼티는 흔히 오브젝트에 매핑시켜 표면에 대부분 물리적 베리에이션을 더합니다.

슬라이더를 드래그하면 러프니스 값 변화가 텍스처를 통해 투과되는 것을 확인할 수 있습니다. 0.5 근처에 가장 흥미로운 결과가 납니다.

기존 버전의 언리얼 엔진에서 머티리얼 작업을 하는 와중에 물리 기반 머티리얼이 익숙치 않은 경우, 대부분의 스페큘러 텍스처 작업을 처리하는 곳이 러프니스 맵이라는 점을 염두에 두시기 바랍니다.

메탈릭

Metallic (메탈릭) 입력은 말 그대로 표면의 "금속성" 을 제어합니다. 비금속은 메탈릭 값이 0 이며, 금속은 1 입니다. 순수한 금속이나 순수한 돌, 순수한 플라스틱처럼 순수 표면의 경우, 이 값은 0 아니면 1 이며, 그 중간 값은 아닙니다. 부식되었거나 먼지 또는 녹슨 금속같은 혼합 표면을 만들 때는, 0 과 1 사이 값이 필요할 수도 있습니다.

metallic.png

메탈릭 0 에서 1 까지

처음에는 완벽한 금속성의 머티리얼을 만들고 싶을 수도 있겠지만, 참으세요!

이 예제에서는 약간의 러프니스를 준 것을 볼 수 있습니다. 순전히 미적인 선택이었습니다.

슬라이더를 드래그하면 메탈릭 값 변화를 확인할 수 있습니다.

스페큘러

비금속 표면 머티리얼을 편집할 때, 빛을 반사하는 성질, 구체적으로 Specular (스페큘러) 프로퍼티를 조정하고 싶을 때가 있습니다. 머티리얼의 스페큘러를 업데이트하려면, 0 (반사 없음) 에서 1 (완전 반사) 사이 스칼라 값을 입력합니다. 참고로 머티리얼의 기본 스페큘러 값은 0.5 입니다.

난반사(diffuse)가 심한 머티리얼의 경우 이 값을 0 으로 설정하고 싶겠지만, 참으세요! 모든 머티리얼에는 일정한 스페큘러가 있습니다. 예제로 [5] 게시물을 참고해 보세요. 난반사가 심한 머티리얼을 만들려면, 실제로는 러프니스를 올려야 합니다.

흔히 스페큘러를 수정하는 경우는, 노멀맵에 표현된 균열에서 생기는 미세한 차폐나 작은 그늘을 추가하려는 경우입니다. 이런 균열을 가끔 캐비티(cavity, 구멍)라 하기도 합니다. 소규모 지오메트리, 특히 하이 폴리곤에만 있어 노멀 맵에 구워지는 디테일은 렌더러의 실시간 그림자에 표현되지 않습니다. 이 그림자를 캡처하기 위해 캐비티 맵을 생성합니다. 캐비티 맵이란 보통 초단거리 트레이스로 만든 AO 맵입니다. 여기에 최종 베이스 컬러를 곱한 뒤 출력하고 (스페큘러 기본값인) 0.5 를 스페큘러 출력으로 곱합니다. 명확히 하자면, BaseColor = Cavity*OldBaseColor, Specular = Cavity*0.5 입니다.

고급 사용의 경우, 이 값을 굴절률(IOR) 제어에 사용할 수 있습니다. 재질 99% 에 대해 필수는 아니었습니다. 아래는 IOR 측정값을 기준으로 한 스페큘러 값입니다.

스페큘러 측정값:

재질

스페큘러

유리

0.5

플라스틱

0.5

석영

0.570

얼음

0.224

0.255

우유

0.277

피부

0.35

슬라이더를 드래그하면 스페큘러 값 변화를 확인할 수 있습니다.

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

Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼