다층 머티리얼 구현
Substrate의 핵심 강점인 Horizontal/Vertical Layering과 블렌딩 연산자를 활용한 복합 머티리얼 구현.
레이어링 유형
수평과 수직, 두 가지 합성 방식
Substrate는 두 가지 레이어링 방식을 제공합니다. 물리적 구조에 따라 올바른 방식을 선택하는 것이 중요합니다.
Horizontal Layering (수평)
같은 높이에서 옆으로 나란히 배치된 재질을 블렌딩합니다. 마스크 기반으로 영역을 분리합니다.
예시: 녹슨 금속, 모스 낀 바위, 페인트가 벗겨진 벽
Vertical Layering (수직)
위아래로 겹쳐진 레이어를 물리적으로 합성합니다. 상위 레이어가 하위를 투과하거나 덮습니다.
예시: 클리어코트 도장, 코팅된 금속, 바니시 처리된 나무
Horizontal Layering:
┌──────┬──────┐
│ Slab │ Slab │ ← 같은 레벨에서 마스크로 분리
│ A │ B │
└──────┴──────┘
Vertical Layering:
┌──────────────┐
│ Top Slab │ ← 위에 올라간 레이어 (코팅, 바니시)
├──────────────┤
│ Bottom Slab │ ← 아래 베이스 레이어
└──────────────┘
기존 Default Lit에서는 두 머티리얼을 Lerp로 선형 보간했는데, 이는 물리적으로 부정확합니다 (예: Roughness를 선형 보간하면 에너지 보존이 깨짐). Substrate의 레이어링은 BSDF 레벨에서 합성하므로 물리적으로 정확한 결과를 보장합니다.
Horizontal Layering 구현
마스크 기반 영역 블렌딩
// 녹슨 금속: 금속 + 녹(비금속) 수평 블렌딩
// Slab A: 깨끗한 금속
Substrate Slab BSDF [Metal]
DiffuseAlbedo: (0, 0, 0)
F0: (0.56, 0.57, 0.58) // 철
Roughness: 0.3
// Slab B: 녹 (비금속)
Substrate Slab BSDF [Rust]
DiffuseAlbedo: (0.4, 0.15, 0.05) // 녹 색상
F0: (0.04, 0.04, 0.04)
Roughness: 0.85
// Horizontal Blend
Substrate Horizontal Blend
Background: Metal Slab
Foreground: Rust Slab
Mix: [녹 마스크 텍스처] // 0=금속, 1=녹
→ Front Material (출력)
Horizontal Blend의 Mix 값은 단순 알파가 아니라 Coverage(점유율)를 의미합니다. 물리적으로 "표면의 몇 %가 Foreground로 덮여있는가"를 나타내며, 이에 따라 BSDF가 정확하게 합성됩니다.
Vertical Layering 구현
물리적 레이어 스택 표현
Vertical Layering은 기존 Clear Coat 셰이딩 모델의 상위 호환입니다. 투명 또는 반투명 코팅층 아래의 베이스 재질을 물리적으로 정확하게 표현합니다.
// 클리어코트 차량 도장
// Bottom Slab: 메탈릭 페인트
Substrate Slab BSDF [Paint]
DiffuseAlbedo: (0.7, 0.0, 0.0) // 빨간 페인트
F0: (0.04, 0.04, 0.04)
Roughness: 0.4
// Top Slab: 클리어코트
Substrate Slab BSDF [ClearCoat]
DiffuseAlbedo: (0, 0, 0) // 투명 (디퓨즈 없음)
F0: (0.04, 0.04, 0.04)
Roughness: 0.02 // 매우 매끈
// Vertical Layer
Substrate Vertical Layer
Top: ClearCoat Slab
Base: Paint Slab
→ Front Material (출력)
// 결과: 매끈한 반사층 아래로 빨간 페인트가 비침
다층 스택 (3개 이상)
// 3층 구조: 베이스 금속 + 페인트 + 클리어코트
Substrate Vertical Layer [Inner]
Top: Paint Slab
Base: Metal Slab
Substrate Vertical Layer [Outer]
Top: ClearCoat Slab
Base: Inner 결과 // 위의 Vertical Layer 출력
// Vertical Layer를 중첩하여 원하는 만큼 레이어 추가 가능
// 단, 레이어가 많을수록 성능 비용 증가
각 Vertical Layer는 추가 G-Buffer 공간과 라이팅 계산을 필요로 합니다. 프로덕션에서는 2~3 레이어 이내로 유지하는 것을 권장합니다. 먼 거리의 오브젝트에는 단일 Slab으로 단순화하는 LOD 전략도 고려하세요.
추가 연산자와 고급 기법
Add, Weight, Named Substrate 활용
Substrate Add
두 BSDF의 기여를 합산합니다. 에너지 보존에 주의가 필요하며, 주로 특수한 합성이 필요한 경우에 사용합니다.
Substrate Weight
BSDF에 가중치를 적용합니다. Horizontal Blend의 내부 구현에도 사용됩니다.
// Weight를 사용한 수동 블렌딩
Substrate Weight
Material: Slab A
Weight: 0.7 // 70% 기여
Substrate Weight
Material: Slab B
Weight: 0.3 // 30% 기여
Substrate Add
A: Weighted Slab A
B: Weighted Slab B
→ Front Material
// 주의: Weight 합이 1.0을 넘으면 에너지 비보존
실전 예제: 모스 낀 바위 + 습기
// Step 1: 바위 + 모스 (Horizontal)
Horizontal Blend
BG: Rock Slab (F0=0.04, Rough=0.7)
FG: Moss Slab (F0=0.04, Rough=0.9, Fuzz=0.3)
Mix: [모스 마스크]
// Step 2: 위에 물기 코팅 (Vertical)
Vertical Layer
Top: Water Film Slab (DiffuseAlbedo=0, F0=0.02, Rough=0.05)
Base: Step 1 결과
// 물기가 있는 영역만 적용하려면
// Water Film의 Coverage를 마스크로 제어
핵심 요약
- Horizontal Layering: 같은 높이에서 마스크로 영역을 분리 (녹슨 금속, 페인트 벗겨진 벽).
- Vertical Layering: 위아래 레이어 스택으로 코팅/투과 표현 (클리어코트, 바니시, 물기).
- Substrate 블렌딩은 BSDF 레벨에서 합성하므로 기존 Lerp보다 물리적으로 정확합니다.
- Vertical Layer를 중첩하여 3층 이상 구현 가능하나, 성능을 위해 2~3 레이어 이내를 권장합니다.
- Add와 Weight 연산자로 수동 BSDF 합성도 가능합니다.
- 복합 재질(바위+모스+습기)은 Horizontal + Vertical을 조합하여 구현합니다.
도전 과제
배운 내용을 직접 실습해보세요
Substrate의 Horizontal/Vertical Mixing을 사용하여 베이스 금속 위에 투명 클리어 코트 층을 추가한 자동차 페인트 머티리얼을 만드세요. 코팅 층의 Roughness와 두께를 조절하세요.
눈 덮인 바위 표면을 구현하세요. Height Map을 Weight로 사용하여 바위 Slab과 눈 Slab을 WorldAlignedBlend와 결합하고, 경사면에 따라 눈이 자연스럽게 쌓이도록 하세요.
Substrate의 다층 기능을 활용하여 금속 베이스 + 녹(Rust) + 페인트 + 먼지 + 물방울의 5개 레이어를 가진 풍화된 차량 표면을 만드세요. 각 레이어의 가시성을 파라미터로 제어하세요.