[KOR][100]Terrain-Shader-Structure---Terrain-Shade

https://m.youtube.com/watch?v=0L5Azq6ugyo

Frame at 4.10s
# 지형 셰이더 구조: 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. 타일링 문제 및 해결 (예정) * **문제점**: 지형 셰이더는 개별 레이어의 타일링이 누적되어 전체적으로 반복적으로 보일 수 있습니다. * **해결 예정**: 다음 튜토리얼에서 타일링을 줄이는 다양한 방법을 다룰 예정입니다.