핵심 머티리얼 개념

언리얼 엔진의 머티리얼을 소개하는 문서입니다.

Choose your operating system:

Windows

macOS

Linux

언리얼 엔진의 머티리얼(Material) 은 씬에서 오브젝트의 표면 프로퍼티를 정의합니다. 넓게 보면, 머티리얼이란 메시에 적용되어 시각적인 형태를 제어하는 '페인트'라고 할 수 있습니다.

구체적으로 설명하자면, 머티리얼은 표면이 씬의 라이트와 어떻게 상호작용해야 하는지를 엔진에 정확히 알려줍니다. 머티리얼은 색, 리플렉션, 러프니스, 투명도 등 표면의 모든 특징을 정의합니다.

셰이딩 파이프라인 개요

렌더링 파이프라인의 셰이더는 각 버텍스나 픽셀이 렌더링되는 방법을 정의하는 프로그램입니다. 언리얼 엔진의 셰이더는 HLSL(High Level Shading Language)로 작성됩니다. 그런 다음 셰이더 코드는 GPU 하드웨어가 실행할 수 있는 어셈블리 언어로 변환됩니다. 이러한 과정을 거쳐 최종 픽셀의 색이 디스플레이에 출력됩니다.

언리얼 에디터에서는 프로젝트에서 셰이더를 만들기 위해 HLSL 코드를 작성할 필요가 없습니다. 대신 머티리얼 에디터(Material Editor) 라는 비주얼 스크립팅 인터페이스에서 머티리얼 이라는 에셋을 생성하게 됩니다.

머티리얼

머티리얼은 셰이더 그래프에서 머티리얼 표현식(Material Expression) 이라는 노드를 조합한 결과를 메인 머티리얼 노드에 입력하여 만듭니다.

단순한 호두나무 바닥 머티리얼

이 노드 그래프는 보이지 않는 곳에서 HLSL로 변환됩니다. 사용자는 HLSL 코드를 볼 수 있지만 직접 편집할 수는 없습니다. 언리얼 엔진에서는 이처럼 직관적이고 이해하기 쉬운 방식으로 머티리얼을 제작할 수 있습니다.

머티리얼 그래프와 HLSL 코드

머티리얼 에디터에서 창(Window) > 셰이더 코드(Shader Code) > HLSL 코드(HLSL Code) 로 이동해 HLSL 코드를 볼 수 있습니다. HLSL 코드 탭은 읽기 전용입니다. 언리얼 에디터 내에서 직접 HLSL 셰이더 코드를 편집할 수는 없습니다.

머티리얼 워크플로 개요

이 섹션에서는 언리얼 엔진의 머티리얼 제작 과정에 대한 고급 개요를 살펴봅니다.

이 섹션에서는 종합적인 단계별 가이드가 아닌, 폭넓은 개념의 개요를 알아봅니다. 머티리얼 에디터 작업에 대한 자세한 정보는 머티리얼 에디터 사용자 가이드 문서를 참조하세요.

새 머티리얼 생성하기

언리얼 엔진의 머티리얼은 스태틱 메시, 텍스처, 블루프린트와 같이 에셋 클래스입니다. 다음과 같은 방법으로 콘텐츠 브라우저에서 새 머티리얼을 생성할 수 있습니다.

  1. 콘텐츠 브라우저(Content Browser) 에서 우클릭합니다.

  2. 컨텍스트 메뉴의 기본 에셋 생성(Create Basic Asset) 섹션에서 머티리얼(Material) 을 선택합니다.

    머티리얼 생성

  3. 콘텐츠 브라우저에 머티리얼이 생성됩니다. 머티리얼의 특성을 설명할 수 있는 고유한 이름을 지정합니다.

    머티리얼 섬네일

머티리얼 에셋을 더블 클릭 하여 머티리얼 편집을 시작합니다. 아래와 같이 머티리얼 에디터 창이 열립니다.

이미지를 클릭하면 확대됩니다.

강조된 영역은 머티리얼을 생성하는 동안 대부분의 작업을 하게 되는 머티리얼 그래프(Material Graph) 입니다. 새 머티리얼의 머티리얼 그래프는 메인 머티리얼 노드(Main Material Node) 를 제외하면 비어 있습니다. 메인 머티리얼 노드에는 머티리얼의 외형과 동작에 지시를 내리는 모든 입력이 포함됩니다.

머티리얼 에디터 UI를 자세히 살펴보려면 이 문서를 참조하세요.

머티리얼 프로퍼티

메인 머티리얼 노드 를 선택하면 디테일(Details) 패널 에 글로벌 머티리얼 프로퍼티 및 세팅이 표시됩니다. 머티리얼 프로퍼티의 빈 공간을 아무 곳이나 클릭하면 머티리얼 프로퍼티도 표시할 수 있습니다.

이 세 가지 설정은 머티리얼의 토대를 형성하고 사용 방법을 결정하므로, 특히 머티리얼 제작 과정 초기 단계에서 중요합니다.

디테일 프로퍼티

  • 머티리얼 도메인(Material Domain) - 프로젝트에서 머티리얼의 용도를 정의합니다. 표면(Surface), 유저 인터페이스(User Interface), 포스트 프로세스 머티리얼(Post-process Materials) 등 다양한 머티리얼 도메인을 정의할 수 있습니다.

  • 블렌드 모드(Blend Mode) – 머티리얼이 픽셀과 블렌딩되는 방식을 정의합니다. 예를 들어 불투명(Opaque) 셰이더는 뒤에 있는 오브젝트를 완전히 가리지만, 반투명(Translucent)애디티브(Additive) 셰이더는 특정한 방식으로 배경과 블렌딩됩니다.

  • 셰이딩 모델(Shading Model) – 머티리얼이 라이트와 상호작용하는 방식을 정의합니다. 머티리얼에는 기본 라이팅포함(Lit) 셰이딩 모델을 사용할 가능성이 높습니다. 하지만 언리얼 엔진에는 헤어(Hair) , 클로스(Cloth) , 피부(Skin) 등을 위한 구체적인 셰이딩 모델이 포함되어 있어 상황에 맞는 입력으로 적절한 유형의 표면을 쉽게 제작할 수 있습니다.

이 프로퍼티는 메인 머티리얼 노드에서 정확히 어떤 입력이 활성화되는지를 결정합니다. 위의 이미지에는 오파시티(Opacity) 가 회색으로 비활성화되어 있는데, 불투명 블렌드 모드에서는 투명도를 지원하지 않기 때문입니다.

반투명 블렌드 모드(Translucent Blend Mode) 를 선택하면 오파시티 입력이 활성화되고, 활성화되어 있던 입력들이 회색으로 비활성화됩니다.

반투명 블렌드 모드

새 머티리얼을 생성할 때는 이 세 가지 프로퍼티를 먼저 환경설정하는 것이 좋습니다.

디테일 패널의 나머지 프로퍼티에 대한 정보는 머티리얼 프로퍼티 문서를 참조하세요.

머티리얼 표현식 노드

머티리얼 프로퍼티가 머티리얼의 토대라면, 머티리얼 표현식 은 머티리얼의 구성 요소입니다.

머티리얼 표현식 노드

각 머티리얼 표현식은 머티리얼 그래프에서 특정한 작업을 수행합니다. 사실상 머티리얼 표현식은 HLSL 코드의 스니펫을 시각적으로 표현한 결과입니다. 코드를 직접 확인하지 않아도 머티리얼 표현식을 결합하여 HLSL 셰이더를 작성할 수 있습니다.

하나의 노드의 출력 핀 에서 다른 노드의 입력 핀 으로 케이블을 드래그해 연결하면 머티리얼 표현식 간에 데이터가 전달됩니다.

노드 연결

단순한 표면이라면 머티리얼을 정의할 머티리얼 표현식 몇 가지만 있으면 됩니다. 아래의 예시를 보면 대부분 머티리얼은 세 가지 텍스처 샘플로 구성됩니다. 이 그래프에서 유일하게 다른 노드는 아티스트가 러프니스 강도를 더 미세하게 제어하기 위한 노드입니다.

단순한 머티리얼

이 머티리얼만 사용할 수도 있고, 머티리얼 그래프에서 수학 계산식과 로직을 사용하여 표면을 더 미세하게 조정할 수도 있습니다. 언리얼 엔진에서 머티리얼을 생성하는 작업의 기본은 머티리얼 표현식을 조합하여 머티리얼에 특정한 결과를 구현하는 방법을 이해하는 것입니다.

그래프에서 머티리얼 표현식을 배치하는 방법을 알아보려면 이 문서를 참조하세요.

언리얼 엔진에는 십여 개의 머티리얼 표현식 노드가 있습니다. 그중 대부분은 마우스를 올리면 툴팁이 표시됩니다. 각 노드의 용도는 머티리얼 표현식 레퍼런스 문서를 참조하세요.

메인 머티리얼 노드

머티리얼 그래프에서 데이터는 왼쪽에서 오른쪽으로 흐르며, 메인 머티리얼 노드(Main Material Node) 는 모든 머티리얼 네트워크가 종료되는 지점입니다.

메인 머티리얼 노드에는 머티리얼에 컴파일되는 정보를 결정하는 최종 입력 핀이 있습니다. 그래프의 머티리얼 표현식은 메인 머티리얼 노드로 연결되지 않으면 머티리얼에 영향을 미치지 않습니다.

위 영상을 보면, 텍스처 샘플이 메인 머티리얼 노드의 해당 입력에 연결되어 있을 때만 머티리얼 프리뷰가 업데이트되는 것을 알 수 있습니다.

메인 머티리얼 노드에 들어오는 모든 입력은 머티리얼 전반의 구체적인 특징을 정의합니다. 다음 두 페이지에서 각 입력의 용도를 알아보세요.

  1. 물리 기반 머티리얼 – 언리얼 엔진의 물리 기반 머티리얼 워크플로의 원리와 모범 사례를 설명합니다.

  2. 머티리얼 입력 – 메인 머티리얼 노드에 있는 각 입력의 용도를 설명합니다.

컴파일 및 적용

머티리얼에 변경사항이 있을 경우, 머티리얼을 컴파일하기 전까지는 레벨에서 볼 수 없습니다. 머티리얼을 컴파일하려면 머티리얼 에디터 상단의 툴바에서 적용(Apply) 또는 저장(Save) 버튼을 누릅니다.

컴파일 및 적용

컴파일이 끝나면 콘텐츠 브라우저에서 바로 머티리얼을 레벨의 모든 액터로 드래그할 수 있습니다.

액터로 머티리얼 드래그

컴파일에는 몇 초 정도가 소요되며, 복잡한 머티리얼은 최대 몇 분까지 소요될 수 있습니다. 컴파일은 머티리얼을 개발하고 테스트하는 작업을 지연시킬 수 있지만, 몇 가지 방법으로 컴파일 지연을 최소화할 수 있습니다.

머티리얼 인스턴싱(Material Instancing) 은 반복작업에 걸리는 시간을 줄이고, 컴파일 지연이 길어지는 현상을 방지하는 전략입니다. 아래에서 인스턴싱에 대해 자세히 알아보세요.

머티리얼 에디터 사용자 가이드

위에서 대략적으로 설명한 절차는 언리얼 엔진의 기본적인 머티리얼 워크플로를 다룹니다. 위의 각 단계는 머티리얼 에디터 사용자 가이드에 더 자세히 기록되어 있습니다.

다음 문서를 읽고 머티리얼 생성을 시작하는 것을 추천합니다.

  1. 머티리얼 에디터 유저 인터페이스

  2. 머티리얼 표현식 및 함수 배치하기

  3. 메인 머티리얼 노드 사용하기

  4. 머티리얼 적용 및 미리보기

  5. 머티리얼 그래프 정리하기

워크플로 효율성 개선을 위한 방법

생성한 머티리얼이 일회성 에셋인 경우는 거의 없습니다. 비슷한 에셋은 보통 비슷한 머티리얼을 필요로 하므로, 프로젝트의 모든 액터에 머티리얼을 새로 만드는 것은 비효율적입니다.

머티리얼 인스턴스(Material Instance)머티리얼 함수(Material Function) 를 사용하면 머티리얼을 더 쉽게 커스터마이징해 재사용할 수 있어 반복작업을 빠르게 해낼 수 있으며, 같은 작업을 반복하지 않아도 됩니다.

머티리얼 인스턴스 및 파라미터화

머티리얼 인스턴스를 사용하면 부모 머티리얼 하나에서 여러 개의 베리에이션, 즉 인스턴스를 빠르게 만들 수 있습니다.

인스턴스는 연관된 에셋 그룹에 필요한 기본 머티리얼이 동일하고 표면 특성만 다를 때 사용합니다. 가구 하나를 여러 색으로 표현하는 경우를 예로 들 수 있습니다.

의자 머티리얼 인스턴스

머티리얼 인스턴스를 사용하면 가구 세트를 위한 부모 머티리얼을 하나 만들 수 있습니다. 그런 다음 위의 의자처럼 각각의 색에 해당하는 머티리얼 인스턴스를 생성합니다.

인스턴스의 장점은 다음과 같습니다.

  • 부모 머티리얼을 리컴파일하지 않고 머티리얼 인스턴스를 커스터마이징할 수 있습니다. 즉, 인스턴스에 적용한 변경사항을 모든 뷰포트에서 즉시 볼 수 있습니다.

  • 아티스트에게 머티리얼 인스턴스 에디터에서 파라미터 를 노출시킬 수 있습니다. 따라서 아티스트는 복잡한 노드 그래프를 편집하지 않고도 직관적이고 빠르게 머티리얼의 베리에이션을 만들 수 있습니다.

머티리얼 인스턴스의 학습 과정은 머티리얼 인스턴스 문서를 참조하세요.

머티리얼 함수

머티리얼 함수 를 사용하면 머티리얼 그래프의 일부를 재사용 가능한 에셋 패키지로 만들어 공통 라이브러리에 공유하고 다른 머티리얼에 쉽게 삽입할 수 있습니다.

자주 사용되는 머티리얼 노드 네트워크에 즉시 액세스하여 머티리얼 생성 과정을 간소화하는 것이 머티리얼 함수의 목적입니다.

예를 들면 아래의 Blend_Overlay 함수에는 이미지 우측에 보이는 전체 머티리얼 표현식 네트워크가 포함되어 있습니다. 이 노드 네트워크를 계속해서 다시 생성하지 않고, 함수 라이브러리에서 이 함수를 바로 그래프에 삽입하면 됩니다.

머티리얼 함수 예시

언리얼 에디터에는 사전 제작된 머티리얼 함수가 많습니다. 머티리얼 함수를 편집하여 행동을 변경하거나 에디터에서 함수를 직접 만들 수 있습니다.

머티리얼 함수 생성 및 사용에 대한 자세한 정보는 머티리얼 함수 문서를 참조하세요.

컬러 및 데이터 작업

언리얼 엔진은 RGBA 컬러 모델을 사용합니다. 이는 모든 픽셀이 4개의 값, 즉 빨강, 초록, 파랑, 알파 채널에 의해 정의된다는 것을 의미합니다.

예를 들어, RGBA 값 (0.0, 0.0, 1.0, 1.0) 은 완전히 불투명한 순수 파란색을 나타냅니다. 이러한 4개 값의 설정은 4개의 부동 소수점(floating-point) 값을 저장하므로 머티리얼 에디터에서는 이를 float4 라고 합니다.

머티리얼 그래프를 통해 이동하는 모든 정보는 부동 소수점 값에 의해 표시되지만, 그 값이 항상 위 예시처럼 4개짜리 세트로 저장되는 것은 아닙니다. 머티리얼 에디터에는 다음과 같은 4가지 데이터 타입이 있습니다.

데이터 타입

정의

예시

Float

단일 부동 소수점 값 저장

(1.0)

Float2

2개의 부동 소수점 값 저장

(1.5, 2.0)

Float3

3개의 부동 소수점 값 저장

(0.0, 1.0, 3.5)

Float4

4개의 부동 소수점 값 저장

(0.5, 1.0, 0.2, 0.9)

머티리얼 에디터의 노드와 입력 핀은 일반적으로 각자 지정된 타입의 데이터를 받도록 설계되어 있습니다. 예를 들어, 채널별로 작동하는 다수의 머티리얼 표현식은 입력에 올바른 데이터 타입이 전달될 때만 작동합니다.

따라서 위 목록의 데이터 타입 4가지를 이해하고, 데이터를 조작하고 정보가 그래프를 따라 흐르는 방식을 제어할 때 사용할 기술 및 전략을 파악하는 것이 매우 중요합니다. 언리얼 엔진에서의 머티리얼 생성에 대해 계속 알아보고자 한다면 아래 링크된 두 페이지를 강력하게 추천합니다.