PART 05 · 강의 3/3

Material Function

재사용 가능한 머티리얼 함수 작성, 입출력 정의, 라이브러리 구성 전략.

01

Material Function 개념

머티리얼의 서브루틴

Material Function은 프로그래밍의 함수와 같습니다. 노드 그래프 조각을 독립 에셋으로 캡슐화하여 여러 머티리얼에서 재사용합니다.

재사용성

한 번 만들면 모든 머티리얼에서 노드처럼 사용. 수정하면 사용처 모두에 반영.

캡슐화

복잡한 로직을 하나의 노드로 감싸 그래프를 깔끔하게 유지.

라이브러리 가능

"Expose to Library" 옵션으로 팔레트에서 바로 검색 가능.

생성 방법 // Material Function 생성 콘텐츠 브라우저 → 우클릭 → Materials → Material Function // 이름 규약 (권장) MF_접두어 + 기능명 MF_HeightBlend MF_TriplanarProjection MF_WindAnimation MF_EmissivePulse
02

입출력 정의

FunctionInput / FunctionOutput 노드

Input/Output Definition // Material Function 내부 구조 FunctionInput 노드들 (입력 정의) Input Name: "BaseUV" Input Type: Vector2 Preview Value: (0, 0) Use Preview as Default: true Sort Priority: 0 FunctionInput Input Name: "Tiling" Input Type: Scalar Preview Value: 1.0 Use Preview as Default: true // 로직 (노드 그래프) BaseUV → Multiply (by Tiling) → 처리... FunctionOutput 노드 (출력 정의) Output Name: "Result" → 최종 결과 연결 // FunctionOutput은 여러 개 가능 (다중 출력)
Use Preview as Default

이 옵션을 켜면 함수를 사용할 때 해당 입력을 연결하지 않아도 Preview Value가 기본값으로 사용됩니다. 선택적 입력(Optional Input)을 만들 때 유용합니다.

03

실전 Material Function 예제

자주 만드는 유틸리티 함수

MF_HeightBlend

Height-Based Blend Function // 높이맵 기반 블렌딩 함수 // 입력: // HeightA (Scalar) - 레이어 A 높이 // HeightB (Scalar) - 레이어 B 높이 // BlendAlpha (Scalar) - 블렌딩 비율 (0~1) // Contrast (Scalar, 기본 0.2) - 경계 날카로움 // 로직: float hA = HeightA * (1 - BlendAlpha); float hB = HeightB * BlendAlpha; float ma = max(hA, hB) - Contrast; float b1 = max(hA - ma, 0); float b2 = max(hB - ma, 0); return b2 / (b1 + b2); // 출력: BlendFactor

MF_EmissivePulse

Pulsing Emissive Function // 맥동 Emissive 함수 // 입력: // Color (Vector3) // MinIntensity (Scalar, 기본 0.5) // MaxIntensity (Scalar, 기본 3.0) // Speed (Scalar, 기본 1.0) Time * Speed → Sine → * 0.5 + 0.5 → Lerp(MinIntensity, MaxIntensity) → Multiply(Color) → Output: EmissiveColor
04

라이브러리 구성 전략

프로젝트 머티리얼 함수 체계화

Recommended Folder Structure // 머티리얼 함수 라이브러리 구조 Content/Materials/Functions/ ├─ Blend/ │ ├─ MF_HeightBlend │ ├─ MF_AngleBlend │ └─ MF_DistanceBlend ├─ UV/ │ ├─ MF_TriplanarProjection │ ├─ MF_PolarCoordinates │ └─ MF_ParallaxOcclusionMapping ├─ Effect/ │ ├─ MF_EmissivePulse │ ├─ MF_DissolveEffect │ └─ MF_RimLight ├─ Utility/ │ ├─ MF_ChannelPack │ ├─ MF_NormalIntensity │ └─ MF_CheapContrast └─ Weather/ ├─ MF_SnowCoverage ├─ MF_Wetness └─ MF_WindAnimation
Expose to Library

Material Function의 디테일 패널에서 Expose to Library = true로 설정하면, 머티리얼 에디터의 팔레트에서 이름으로 검색하여 바로 사용할 수 있습니다. Library Categories에 카테고리를 지정하면 팔레트에서 분류됩니다.

SUMMARY

핵심 요약

  • Material Function은 노드 그래프 로직을 독립 에셋으로 캡슐화하여 재사용합니다.
  • FunctionInput/Output 노드로 입출력을 정의하며, Preview Value로 기본값을 설정합니다.
  • HeightBlend, TriplanarProjection, EmissivePulse 등을 함수로 만들어 재사용합니다.
  • Expose to Library로 팔레트에서 검색 가능하게 하고, 폴더로 카테고리별 정리합니다.
  • 함수 수정 시 사용하는 모든 머티리얼에 자동 반영되므로, 일관된 수정이 가능합니다.
PRACTICE

도전 과제

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

실습 1: 재사용 가능한 Material Function

UV 회전 기능을 Material Function으로 만드세요. Input으로 UV와 RotationAngle을 받고, sin/cos를 사용하여 회전된 UV를 Output으로 반환하세요. 여러 머티리얼에서 이 함수를 재사용하세요.

실습 2: Height Blend Function

두 텍스처를 Height Map 기반으로 자연스럽게 블렌딩하는 Material Function을 만드세요. Contrast 파라미터로 경계의 날카로움을 조절하고, 지형 머티리얼에 적용하세요.

심화 과제: Material Function 라이브러리

프로젝트 공용 Material Function 라이브러리를 설계하세요: UV 유틸리티(타일링, 회전, 왜곡), 블렌딩(Height, Angle), 이펙트(디졸브, 프레넬 글로우)를 각각 함수화하고 폴더 구조를 정리하세요.