PART 01 · 강의 1/3

머티리얼 시스템 개요

UE5 머티리얼 파이프라인의 전체 구조와 셰이더 컴파일 과정, 머티리얼 에셋의 내부 동작 원리를 이해합니다.

01

머티리얼(Material)이란 무엇인가

표면의 시각적 속성을 정의하는 에셋

UE5에서 머티리얼(Material)은 메시(Mesh)의 표면이 어떻게 보이는지를 결정하는 에셋입니다. 머티리얼은 단순한 텍스처가 아니라, 빛과 표면의 상호작용을 수학적으로 정의하는 셰이더 프로그램을 시각적 노드 그래프로 표현한 것입니다.

핵심 개념

머티리얼 = 텍스처 + 셰이더 로직 + 파라미터. 텍스처는 이미지 데이터이고, 머티리얼은 그 데이터를 어떻게 렌더링할지를 정의합니다.

머티리얼의 역할

역할 설명 예시
표면 색상 Base Color를 통해 표면의 기본 색상을 결정 나무의 갈색, 금속의 은색
반사 특성 Metallic, Roughness로 반사의 양과 품질 제어 매끈한 유리 vs 거친 콘크리트
표면 디테일 Normal Map으로 실제 지오메트리 없이 요철 표현 벽돌 사이 홈, 가죽 질감
특수 효과 Emissive, Opacity 등으로 발광, 투명 효과 네온 사인, 유리창
02

UE5 렌더링 파이프라인과 머티리얼

머티리얼이 화면에 그려지기까지의 과정

UE5는 Deferred Rendering(지연 렌더링) 파이프라인을 기본으로 사용합니다. 머티리얼은 이 파이프라인의 각 단계에서 핵심 역할을 합니다.

Deferred Rendering 파이프라인

Pipeline // UE5 Deferred Rendering 주요 단계 1. Base Pass (G-Buffer 생성) → 머티리얼이 G-Buffer에 데이터를 기록 → Base Color, Metallic, Roughness, Normal, etc. 2. Lighting Pass → G-Buffer 데이터를 읽어 조명 계산 → 각 라이트별 기여도 합산 3. Translucency Pass → 반투명 머티리얼을 별도로 렌더링 → Forward Rendering으로 처리 4. Post Processing → 톤매핑, 블룸, 포스트 프로세스 머티리얼 적용
Deferred vs Forward

Deferred Rendering은 조명 계산을 화면 공간에서 수행하여 다수의 라이트를 효율적으로 처리합니다. 반면 Forward Rendering은 오브젝트별로 조명을 계산하며, 반투명 머티리얼이나 MSAA가 필요한 경우에 사용됩니다. UE5에서는 대부분의 불투명 머티리얼이 Deferred로 처리됩니다.

G-Buffer 구조

G-Buffer 채널 머티리얼 입력
GBufferA RGB: World Normal, A: Per-Object Data Normal
GBufferB R: Metallic, G: Specular, B: Roughness, A: Shading Model Metallic, Specular, Roughness
GBufferC RGB: Base Color, A: AO Base Color, AO
GBufferD Custom Data (Shading Model별 상이) Subsurface Color 등
03

셰이더 컴파일 과정

노드 그래프에서 GPU 코드까지

머티리얼 에디터에서 만든 노드 그래프는 최종적으로 HLSL 셰이더 코드로 변환되어 GPU에서 실행됩니다. 이 과정을 이해하면 최적화와 디버깅에 큰 도움이 됩니다.

컴파일 파이프라인

Shader Compilation // 머티리얼 셰이더 컴파일 과정 Material Graph (노드)MaterialCompiler가 노드를 순회 HLSL 코드 생성플랫폼별 셰이더 컴파일러 호출 플랫폼 셰이더 ├─ SM6 (DirectX 12) → DXIL ├─ Vulkan → SPIR-V ├─ Metal → Metal IR └─ OpenGL → GLSL ↓ DDC(Derived Data Cache)에 캐싱 GPU에서 실행
셰이더 컴파일 비용

프로젝트의 모든 머티리얼 x 모든 메시 유형 x 모든 퀄리티 레벨 조합으로 셰이더 변형(Permutation)이 생성됩니다. 이 때문에 대규모 프로젝트에서는 셰이더 컴파일에 수십 분이 걸릴 수 있습니다. Shared Material Cache를 활용하여 팀 전체의 컴파일 시간을 줄일 수 있습니다.

셰이더 퍼뮤테이션(Permutation)

하나의 머티리얼이 다양한 조건에 따라 여러 변형으로 컴파일됩니다:

변형 요인 설명
메시 타입 Static Mesh, Skeletal Mesh, Landscape, Particle 등
라이트맵 라이트맵 유무에 따른 변형
Quality Level Low, Medium, High, Epic 등 퀄리티별 변형
Feature Level SM5, SM6, ES3.1 등 셰이더 모델별 변형
04

머티리얼 에셋 구조

UMaterial 클래스와 에셋 계층

UE5에서 머티리얼 관련 에셋은 명확한 클래스 계층 구조를 가집니다. 이 계층을 이해하는 것이 인스턴스와 파라미터화의 기초입니다.

C++ Class Hierarchy UMaterialInterface // 추상 베이스 클래스 ├─ UMaterial // 마스터 머티리얼 (노드 그래프 보유) │ └─ MaterialGraph // 노드 그래프 데이터 │ └─ MaterialResources // 컴파일된 셰이더 └─ UMaterialInstance // 파라미터 오버라이드 ├─ UMaterialInstanceConstant // 에디터에서 생성 └─ UMaterialInstanceDynamic // 런타임에 생성

에셋 생성 방법

콘텐츠 브라우저에서 생성

우클릭 → Material 선택. 가장 일반적인 방법입니다.

텍스처에서 자동 생성

텍스처를 드래그하면 자동으로 머티리얼을 생성할 수 있습니다.

블루프린트/C++에서 생성

UMaterialInstanceDynamic::Create()로 런타임 머티리얼 생성.

C++ // 런타임에 Dynamic Material Instance 생성 UMaterialInstanceDynamic* DynMaterial = UMaterialInstanceDynamic::Create(BaseMaterial, this); // 파라미터 설정 DynMaterial->SetVectorParameterValue( "BaseColor", FLinearColor(1.0f, 0.0f, 0.0f)); // 메시에 적용 MeshComponent->SetMaterial(0, DynMaterial);
05

머티리얼 입력 채널 개관

Default Lit 머티리얼의 주요 입력

Default Lit 셰이딩 모델 기준으로, 메인 머티리얼 노드에는 다음과 같은 입력 핀이 있습니다. 각 입력의 상세 활용은 이후 강의에서 다룹니다.

입력 타입 범위 설명
Base Color Vector3 0~1 표면의 기본 색상 (Albedo)
Metallic Scalar 0 또는 1 금속/비금속 구분
Roughness Scalar 0~1 표면 거칠기 (0=매끈, 1=거침)
Specular Scalar 0~1 (기본 0.5) 비금속 표면의 반사량
Normal Vector3 -1~1 탄젠트 스페이스 노말 벡터
Emissive Color Vector3 0~무한 자체 발광 색상 (HDR 가능)
Opacity Scalar 0~1 투명도 (Translucent 모드에서만)
Ambient Occlusion Scalar 0~1 미세한 그림자/차폐 효과
Substrate와의 차이

UE 5.5+의 Substrate 시스템에서는 이러한 개별 입력 핀 대신 Slab BSDF 노드가 통합된 인터페이스를 제공합니다. Substrate에 대한 자세한 내용은 Part 03에서 다룹니다.

SUMMARY

핵심 요약

  • 머티리얼은 텍스처 + 셰이더 로직 + 파라미터로 구성된 에셋으로, 표면의 시각적 속성을 정의합니다.
  • UE5는 Deferred Rendering을 기본으로 사용하며, 머티리얼 데이터는 G-Buffer에 기록됩니다.
  • 머티리얼 노드 그래프는 HLSL 코드로 변환되어 플랫폼별 셰이더로 컴파일됩니다.
  • 셰이더 퍼뮤테이션(변형)은 메시 타입, 퀄리티, 피처 레벨 등에 따라 곱셈적으로 증가합니다.
  • 에셋 계층은 UMaterial(마스터) → UMaterialInstance(파라미터 오버라이드)로 구성됩니다.
  • Default Lit의 주요 입력: Base Color, Metallic, Roughness, Normal, Emissive 등.
PRACTICE

도전 과제

배운 내용을 직접 실습해보세요

실습 1: 기본 머티리얼 생성

콘텐츠 브라우저에서 새 머티리얼을 생성하고, Base Color에 단색(빨간색)을 연결한 뒤 Static Mesh에 적용해보세요. Preview에서 결과를 확인하세요.

실습 2: Dynamic Material Instance 생성

블루프린트에서 CreateDynamicMaterialInstance 노드를 사용하여 런타임에 머티리얼 색상을 변경하는 기능을 구현하세요. 키 입력마다 색상이 바뀌도록 설정하세요.

심화 과제: 셰이더 컴파일 분석

프로젝트 설정에서 셰이더 퍼뮤테이션 수를 확인하고, r.ShaderDevelopmentMode=1 콘솔 명령으로 컴파일 로그를 분석해보세요. 동일 머티리얼의 SM5/SM6 변형 수를 비교하세요.