Frame at 0.00s
## Unity: Parallax Occlusion Mapping * **목표:** 지형에 추가적인 깊이와 디테일을 더하기 위해 Parallax Occlusion Mapping을 Unity에서 사용하는 방법 알아보기 * **주요 기능:** * 기존 지형 셰이더 시리즈의 일부 (이전 비디오: 경사면 지형 재질 투영, 지형 타일링 아티팩트 제거, 렌더링 비용 절감) * **Parallax Occlusion Mapping 구현:** * 새로운 지형 재질 레이어 생성 * 기존 "Simple Layer" 서브그래프 복제 및 "Parallax Occlusion Layer"로 이름 변경 * **Parallax Occlusion Mapping 노드 추가:** * **입력:** * `Incoming Height Map Texture`: 일반, Occlusion, Height 맵 (Height는 Alpha 채널에 저장) * `Height Map Sampler`: Sampler State 노드 연결 (고품질: trilinear, 16x anisotropic / 최적화: linear, anisotropic filtering 없음) * `Amplitude`: 높이 값 (Blackboard에 `max parallax height` float 변수 생성, 기본값 6) * `Steps`: Parallax Occlusion Mapping의 비용을 결정하는 가장 중요한 값 * **최적화:** 카메라 거리 및 시야각에 따라 Steps 수를 동적으로 조절 * **거리 기반 마스크:** 카메라 거리에 따라 Steps 수 조절 (0.09 곱하기, saturate, 0.45 제곱, 마스크 반전) * **각도 기반 마스크:** 지형 노멀 벡터와 뷰 벡터의 dot product 활용 (saturate, 1-x, 제곱) * **최대 Steps:** Blackboard에 `max parallax steps` float 변수 생성 (기본값 128), 각도 및 거리 마스크와 곱하고 ceil 노드로 올림 * `UVs`: Tiling and Offset 노드 출력 연결 * **출력:** 텍스처 샘플링을 위한 UV 좌표 생성 * **텍스처 샘플링:** Parallax Occlusion Mapping 노드에서 생성된 UV를 사용하여 텍스처 샘플링 * **지형 셰이더 통합:** * 새로운 "Parallax Occlusion Layer"를 지형 셰이더의 4번 레이어로 교체 * `max parallax height` 및 `max parallax steps` 파라미터 연결 * `parallax steps` 파라미터 생성 및 조절하여 성능 및 품질 균형 확인 (예: 16, 256, 512) * **성능 최적화:** * **Steps 수 조절:** 카메라 거리 및 각도에 따라 Steps 수 동적으로 조절 * **레이어별 적용:** 모든 지형 레이어에 Parallax Occlusion Mapping을 적용하지 않고, 깊이 있는 Height Map을 가진 표면에만 사용 (예: Cobblestones vs. Mossy Grass) * **셰이더 최적화:** 레이어별로 필요한 속성만 포함하는 서브그래프 사용 --- ## Unreal Engine: Nanite Displacement * **목표:** 지형에 추가적인 깊이와 디테일을 더하기 위해 Nanite Displacement를 Unreal Engine에서 사용하는 방법 알아보기 * **주요 개념:** * 지형을 수백만 개의 작은 삼각형으로 분할하고 Height 데이터를 사용하여 변위(Displacement) 생성 * Parallax Occlusion Mapping과 달리 기하학(Geometry)을 직접 생성 * **Nanite 활성화:** * **Project Settings:** * **Engine -> Rendering:** * `Shader Model`을 **SM6**로 설정 (SM5는 Nanite 미지원) * `Default RHI`를 **DirectX 12**로 설정 * **고성능 하드웨어 전용:** PlayStation 5 수준의 콘솔 및 고사양 PC에 적합 (모바일 게임에는 권장하지 않음) * **지형 재질 설정:** * **Terrain Material:** * `Landscape Layer Blend` 노드에서 모든 레이어의 `Blend Type`을 **Height**로 설정 * `Get Material Attributes` 노드에 **Displacement** 항목 추가 (Height 데이터를 전달하기 위해) * **Layer Material (예: Cobblestones, Moss):** * Color, Roughness, Normal, Occlusion, Height 텍스처 샘플링 * Height 데이터를 **Displacement** 및 **Height Output**으로 전달 * **Root Node:** * `Enable Tessellation` 체크 (Nanite 활성화를 위해) * Height Map에서 블렌딩된 **Displacement** 데이터를 Root Node에 연결 * **Magnitude:** 변위 강도 조절 (기본값 4는 너무 높음, 0.25 권장) * **Center:** 0.5로 설정하여 Height Map 값이 0.5 이상은 위로, 이하는 아래로 변위 * **Nanite Displacement 적용:** * **Terrain Actor:** * `Enable Nanite` 체크 * `Build Data` 클릭하여 Nanite 삼각형 생성 (시간 소요) * **결과 확인:** * Nanite Displacement를 통해 지형에 상세한 모양과 깊이 추가 * **Nanite Visualization -> Triangles:** 개별 삼각형 확인 (매우 많은 수) * **최적화 권장 사항:** * **Height Map 조정:** 셰이더 내에서 실시간으로 Height Map 조정 파라미터 추가 대신, Substance Designer 등 외부 툴을 사용하여 Height Map 텍스처 자체를 미리 조정 (성능 향상) * **Nanite Displacement 효율성:** Unreal Engine 4의 Tessellation 및 Displacement보다 더 효율적이고 저렴할 것으로 예상 (고성능 플랫폼의 경우) --- ### 요약 표 | 기능 | Unity | Unreal Engine | | :---------------------- | :------------------------- | :------------------------ | | **주요 기술** | Parallax Occlusion Mapping | Nanite Displacement | | **깊이/디테일 추가** | Ray Tracing 기반 | Geometry Displacement | | **최적화** | Steps 수 동적 조절, 레이어별 적용 | Nanite, 텍스처 사전 조정 | | **하드웨어 요구 사항** | 상대적으로 낮음 | 고성능 하드웨어 전용 | | **구현 복잡성** | 노드 기반, 비교적 간단 | 프로젝트 설정, 재질 설정 | | **성능 고려 사항** | Steps 수, 적용 레이어 | Nanite 활성화, Magnitude | | **결과물** | 2D 텍스처를 이용한 3D 효과 | 실제 지오메트리 변위 |