PART 05 · 강의 1/3

인스턴스와 파라미터화

Material Instance, Dynamic Material Instance, 파라미터 그룹, Static Switch로 효율적 머티리얼 관리.

01

Material Instance 개념

하나의 마스터에서 무한한 변형 생성

Material Instance는 마스터 머티리얼의 파라미터 값만 변경하여 새로운 머티리얼 변형을 만드는 에셋입니다. 셰이더를 재컴파일하지 않으므로 매우 효율적입니다.

특성Material (마스터)Material Instance
셰이더 컴파일노드 변경 시 재컴파일파라미터 변경 시 재컴파일 없음
노드 그래프편집 가능편집 불가 (파라미터만 변경)
생성 비용높음매우 낮음
런타임 변경불가Dynamic Instance로 가능
마스터 머티리얼 전략

프로젝트에서 마스터 머티리얼 수를 최소화하고, 대부분의 변형은 인스턴스로 만드세요. 예: "M_Master_Environment" 하나로 바위, 나무, 흙 등의 인스턴스를 생성. 이렇게 하면 셰이더 변형(퍼뮤테이션)을 줄여 메모리와 컴파일 시간을 절약합니다.

02

파라미터 노드 유형

인스턴스에서 조절 가능한 파라미터들

파라미터 노드타입용도런타임 변경
ScalarParameterFloatRoughness, Intensity, Tiling 등가능
VectorParameterFloat4Color, UV Offset 등가능
TextureParameterTextureBase Color, Normal 텍스처 교체가능
StaticSwitchParameterBool기능 토글 (Normal Map 사용 여부 등)불가 (컴파일 시)
StaticComponentMaskParameterMask채널 선택불가 (컴파일 시)
Parameter Group 설정 // 파라미터 정리를 위한 그룹 설정 // 파라미터 노드의 디테일 패널에서: Group: "01_BaseProperties" Sort Priority: 0 // 그룹 이름 앞에 숫자를 붙이면 // 인스턴스 에디터에서 순서가 고정됩니다 // 예: "01_Color", "02_Surface", "03_Detail" Parameter Name: "BaseColor_Tint" Default Value: (1, 1, 1, 1) Group: "01_Color"
03

Dynamic Material Instance

런타임에 파라미터를 변경하기

C++ - Dynamic Material Instance // 런타임에 머티리얼 파라미터 변경 // 1. Dynamic Instance 생성 UMaterialInstanceDynamic* MID = UMaterialInstanceDynamic::Create( BaseMaterialInstance, // 부모 (MI 또는 M) this // Outer ); MeshComp->SetMaterial(0, MID); // 2. 파라미터 변경 MID->SetScalarParameterValue("Roughness", 0.3f); MID->SetVectorParameterValue("Color", FLinearColor(1, 0, 0, 1)); MID->SetTextureParameterValue("DiffuseTex", NewTexture);
Blueprint // 블루프린트에서의 동적 머티리얼 Create Dynamic Material Instance Target: Static Mesh Component Source Material: MI_MyMaterial → Return: Dynamic Material Instance Set Scalar Parameter Value Target: Dynamic Material Instance Parameter Name: "EmissiveIntensity" Value: 5.0
MID 생성 주의

Dynamic Material Instance는 매 프레임 생성하지 마세요. BeginPlay나 초기화 시 한 번 생성하고 레퍼런스를 저장해 두세요. 또한 같은 머티리얼이 적용된 여러 메시에서 각각 MID를 만들면 배칭(Batching)이 깨져 드로우콜이 증가합니다.

04

Static Switch Parameter

컴파일 타임 분기로 기능 토글

StaticSwitchParameter는 인스턴스에서 기능을 켜고 끌 수 있지만, 변경 시 셰이더가 재컴파일됩니다. 런타임 변경은 불가하나, 사용하지 않는 분기의 코드가 완전히 제거되므로 성능상 이점이 있습니다.

Static Switch 활용 // 마스터 머티리얼에서 기능 토글 StaticSwitchParameter "UseDetailNormal" True: BlendAngleCorrectedNormals(BaseNormal, DetailNormal) False: BaseNormal → Normal 입력 StaticSwitchParameter "UseEmissive" True: EmissiveColor * Intensity False: (0, 0, 0) → Emissive Color 입력 // 인스턴스에서 체크박스로 활성화/비활성화 // 비활성화된 분기의 코드는 컴파일에서 제외 // → 불필요한 텍스처 샘플링 절약
Static Switch와 퍼뮤테이션

각 Static Switch 조합마다 별도 셰이더가 컴파일됩니다. Switch가 3개면 최대 8개(2^3) 변형. 너무 많은 Static Switch는 셰이더 컴파일 시간과 메모리를 증가시킵니다. 5개 이하를 권장합니다.

SUMMARY

핵심 요약

  • Material Instance는 셰이더 재컴파일 없이 파라미터만 변경하여 머티리얼 변형을 만듭니다.
  • 파라미터 유형: Scalar(Float), Vector(Float4), Texture, StaticSwitch(Bool).
  • Dynamic Material Instance로 런타임에 파라미터를 변경하며, 초기화 시 한 번만 생성합니다.
  • Static Switch는 컴파일 타임 분기로 미사용 코드를 제거하지만, 과다 사용은 퍼뮤테이션을 증가시킵니다.
  • 파라미터 GroupSort Priority로 인스턴스 에디터의 UI를 정리합니다.
PRACTICE

도전 과제

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

실습 1: 파라미터화된 마스터 머티리얼

Scalar Parameter(Roughness, Metallic), Vector Parameter(BaseColor), Texture Parameter(NormalMap)를 가진 마스터 머티리얼을 만들고, 3가지 이상의 Material Instance를 생성하여 서로 다른 표면을 표현하세요.

실습 2: Static Switch Parameter 활용

Static Switch Parameter를 사용하여 '눈 효과 활성화' 토글을 만드세요. ON일 때 월드 Z축 기준으로 눈 레이어가 추가되는 분기를 구성하고, 컴파일 결과 셰이더 수를 확인하세요.

심화 과제: Blueprint에서 MID 제어

블루프린트에서 CreateDynamicMaterialInstance로 MID를 생성하고, Timeline 노드와 SetScalarParameterValue를 사용하여 피격 시 Emissive가 플래시되는 히트 이펙트를 구현하세요.