
# 지형 셰이더 구조: Unreal & Unity
## 1. 지형 셰이더 기본 구조
* **핵심**: 개별 레이어를 생성하고 `Landscape Layer Blend` 노드를 사용하여 레이어를 혼합합니다.
* **Unreal Engine**:
* `Landscape Layer Blend` 노드는 여러 레이어의 속성(베이스 컬러, 메탈릭, 스페큘러, 러프니스, 노멀, 앰비언트 오클루전 등)을 받아 하나의 머티리얼로 결합합니다.
* 레이어 이름은 지형의 레이어 이름과 일치해야 합니다.
* **레이어 블렌딩**:
* `LB_AlphaBlend`: 기본 레이어에 사용됩니다.
* `LB_HeightBlend`: 다른 레이어에 사용되며, 각 레이어의 높이 정보를 사용하여 혼합됩니다.
* 최종 머티리얼 속성은 `Get Material Attributes` 노드를 통해 분리되어 최종 출력에 연결됩니다.
* **Unity**:
* 개별 레이어 서브그래프를 복제하여 사용합니다.
* `Height Based Splat Modify` 노드를 사용하여 각 레이어의 높이 데이터를 준비하고, 이를 마스크로 사용하여 레이어를 곱합니다.
* `Pre-Multiply Layer` 노드를 사용하여 각 레이어를 준비된 마스크로 곱합니다.
* `Blend Layers Add` 노드를 사용하여 곱해진 레이어들을 더해 최종 머티리얼을 생성합니다.
* 최종 결과는 마스터 스택에 연결됩니다.
## 2. 스페큘러(Specular) 처리 (Unreal Engine)
* **기능**: 재질 표면의 반사 밝기 및 강도를 조절합니다.
* **기본값**: 0.5 (약 4% 반사율). 비금속 재질의 경우 일반적인 반사율입니다.
* **`Specular` 값을 0으로 설정**: 모든 반사를 제거하여 오브젝트가 어두워집니다.
* **`Specular` 값을 1로 설정**: 8%의 매우 높은 반사율을 가집니다.
* **스페큘러 오클루전**:
* **Cavity Map**: 재질의 틈새에 어두운 값을 적용하여 해당 영역의 스페큘러 반사를 줄입니다. 앰비언트 오클루전과 유사하지만, 디퓨즈 라이트가 아닌 스페큘러 라이트에 작용합니다.
* **구현**: Cavity Map과 앰비언트 오클루전 맵을 곱한 값을 스페큘러 레벨로 사용합니다.
* `Cheap Contrast` 노드 (값 2) 적용
* 0.5를 곱하여 최대 밝기 조절 (`Default specular value = 0.5`)
* **시각화**:
* 버퍼 시각화에서 `Specular`를 선택하면 스페큘러 채널만 확인할 수 있습니다.
* 틈새에는 낮은 값이, 평평한 표면에는 0.5 값이 표시됩니다.
## 3. 텍스처 스케일링 기법 (Unreal Engine)
* **목표**: 타일링(tiling) 현상을 최소화하고 시각적 반복성을 줄입니다.
* **기법**: 각 레이어 텍스처에 **소수(Prime Number) 스케일 값**을 적용합니다.
* **이유**:
* 레이어의 타일 그리드가 서로 겹치거나 정렬되지 않도록 합니다.
* 한 레이어의 타일링이 다른 레이어의 타일링으로 가려져 시각적 반복성을 줄입니다.
* 예시: 300, 400, 600 범위의 소수를 스케일 값으로 사용합니다.
* **텍스처 할당**:
* `Stone Ground CR/NOH`
* `Fels Mossy CR/NOH`
* `Dry Soil CR/NOH`
* `Rock Grass CR/NOH`
## 4. Unity 지형 셰이더 구조
* **개요**: Unreal과 유사하게 개별 레이어를 만들고 블렌딩합니다.
* **주요 노드**:
* `Layer Blend`: 여러 레이어를 혼합하는 데 사용됩니다.
* `Height Based Splat Modify`: 높이 기반 블렌딩을 위한 데이터를 준비합니다.
* `Pre-Multiply Layer`: 레이어 마스크를 사용하여 각 레이어를 곱합니다.
* `Blend Layers Add`: 곱해진 레이어들을 더하여 최종 머티리얼을 만듭니다.
* **레이어 마스크**:
* `Terrain Texture` 노드로 레이어 마스크 텍스처를 가져옵니다.
* `Sample Texture 2D` 노드로 마스크를 샘플링합니다.
* Red, Green, Blue, Alpha 채널에 각각 Layer 0, 1, 2, 3 (또는 4)의 마스크 정보가 담겨 있습니다.
* `Sampler State`를 `Linear Clamp`로 설정하여 마스크 텍스처를 가져옵니다.
* **컨트롤 텍스처 해상도**:
* `Terrain Settings` 패널에서 `Control Texture Resolution`을 높여(예: 512 -> 2048) 마스크의 해상도를 개선합니다.
## 5. 타일링 문제 및 해결 (예정)
* **문제점**: 지형 셰이더는 개별 레이어의 타일링이 누적되어 전체적으로 반복적으로 보일 수 있습니다.
* **해결 예정**: 다음 튜토리얼에서 타일링을 줄이는 다양한 방법을 다룰 예정입니다.