
## Unity와 Unreal Engine에서 Terrain (지형) 작업 기본
### **Unity Terrain 기초**
* **Terrain 시스템의 역할:**
* 대규모 야외 환경 생성 시 지면을 만드는 데 사용됩니다.
* *Landscape* 모양 조각, 잔디나 흙 같은 *Material* 칠하기, 조약돌, 풀잎, 양치류 같은 작은 디테일 추가.
* 나무와 같은 큰 디테일 추가 가능.
* Terrain 생성 과정을 빠르고 쉽게 만듭니다.
* **작업 시작 전 준비:**
* **계획 수립:**
* 주요 랜드마크 위치를 표시하는 탑다운 지도 그리기.
* 필요한 Terrain 크기 결정 (엔진에서 처음 묻는 질문).
* 잘못된 크기 결정 시 추후 수정에 큰 어려움 발생.
* **계획 없이 바로 시작하는 것은 큰 실수:**
* 크기를 모르면 너무 크거나 작게 만들 가능성 높음.
* Terrain 시스템 학습 및 연습 목적이라면 생략 가능.
* 월드 제작 시에는 반드시 계획 수립 필요.
* **새 씬 생성 및 Terrain 설정:**
* `File` > `New Scene` 선택.
* `3D Object` > `Terrain` 선택하여 Terrain 생성.
* 생성된 Terrain은 카메라 위치 (Origin)에 모서리가 위치하므로, Origin 중심으로 이동 필요.
* **Terrain Tools 패키지 설치:**
* `Window` > `Package Manager` > `Unity Registry` 선택.
* `Terrain Tools` 검색 및 설치. (Terrain 시스템 기능 향상)
* **Terrain 설정 상세:**
* **Terrain Width/Length:**
* 기본값: 1000 x 1000 미터.
* **권장:** 작은 타일(예: 100x100 미터)로 만들고 필요에 따라 추가 타일 생성.
* 큰 Terrain을 하나만 만들면 작업이 더 어려워지고 일부 기능이 제대로 작동하지 않을 수 있음.
* **Terrain Height:**
* 최대 높이 및 깊이. 기본값: 600 미터.
* 타일 크기에 맞춰 조정 (예: 100x100 타일일 경우 400 미터로 감소).
* 높이 맵(Height Map)의 정밀도 향상.
* **Height Map Resolution:**
* Height Map의 픽셀 수 (예: 513x513).
* Terrain 크기 대비 픽셀 수를 통해 디테일 결정 (예: 100x100 Terrain에 513x513 해상도 = 미터당 약 5픽셀).
* Texture Memory 사용량에 영향. 더 낮은 해상도(예: 129x129)로도 충분하다면 메모리 절약 가능.
* 513x513은 합리적인 설정.
* **Control Texture Resolution:**
* Material이 적용될 영역을 결정하는 마스크 해상도.
* 잔디, 흙, 바위 등의 경계 디테일 결정. 512x512 정도면 충분.
* **Base Texture Resolution:**
* 멀리 있는 Terrain의 디테일 수준 결정.
* **Basemap Distance:** 상세 렌더링과 단순 렌더링 전환 거리 설정 (예: 50 미터).
* **Detail Map Memory:** 멀리 있는 Terrain의 디테일 맵에 사용되는 메모리 양 설정 (예: 4096x4096).
* **Terrain 위치 조정:**
* Terrain의 모서리가 Origin에 위치하는 것을 피하고, Terrain을 Origin 중앙에 배치.
* Terrain의 Position을 `(-50, 0, -50)`으로 설정 (100x100 Terrain 기준).
* 월드를 Origin 주변으로 중앙 집중화하여 부동 소수점 정밀도 최대화.
* **Height Sculpting (높이 조각):**
* `Paint Terrain` 탭 > `Raise or Lower Terrain` 선택.
* **Brushes:**
* 다양한 모양의 브러시 사용 가능 (Gaussian falloff, Hard edge 등).
* 브러시 이미지를 직접 활용 가능.
* *Brush Strength* (투명도): Terrain에 미치는 영향력 조절 (예: 0.01로 시작하여 미세하게 조절).
* *Brush Size*: 브러시 크기 조절 (예: 2 미터).
* *Rotation, Spacing, Scattering*: 브러시의 회전, 간격, 산포도 조절 (일반적인 Terrain 작업에 필수적이지는 않음).
* **작업 흐름:**
* 큰 브러시로 시작하여 주요 지형 (산, 강 등)을 먼저 잡습니다.
* 점차 브러시 크기를 줄여나가며 세부적인 디테일을 추가합니다.
* **Height 조절:**
* `Ctrl` + 클릭: Terrain 높이 낮추기 (기본 높이가 0이므로, 먼저 높이를 올려야 사용 가능).
* `Set Height` 모드: 특정 높이로 Terrain을 설정. (예: 15로 설정 후 페인팅 시 해당 높이로 고정)
* **Height Map Import:**
* 외부 소프트웨어(Photoshop 등)에서 생성한 Height Map을 `Import Raw` 기능을 통해 Terrain에 적용 가능.
* Gaia와 같은 Terrain 생성 소프트웨어 활용 가능.
* **Terrain Material Painting (재질 칠하기):**
* `Paint Terrain` 탭 > `Paint Texture` 선택.
* Terrain에 Material Layer 추가 (예: `Dry Soil`, `Ground Grass`).
* **Terrain Layers:**
* `List is empty` 상태에서 `Add Layer` 클릭.
* Unity Asset Store에서 `Asset Samples` 또는 `URP Demo Scene` 다운로드하여 샘플 Layer 활용 가능.
* **Layer Properties:**
* *Size*: Layer의 디테일 크기 조절.
* *Textures*: Layer에 적용될 텍스처.
* *Strength*: Normal Map의 강도 조절.
* *Tint*: Material 색상 틴트 적용 (Shader에서 구현 필요).
* **Terrain Material:**
* 기본값: `Terrain Lit` (Unity 내장 Shader).
* *Shader Graph*를 사용하여 커스텀 Shader 적용 가능 (Unity 6.3+).
* **Height-Based Blending:**
* Terrain Material 설정에서 활성화 가능.
* 높이 맵을 기반으로 Material을 자연스럽게 블렌딩.
* *Transition* 값 조절을 통해 부드러운 블렌딩 또는 하드한 경계 설정.
* 높은 부분부터 Material이 먼저 보이도록 블렌딩.
* 투명도(Alpha) 블렌딩보다 더 자연스러운 결과.
* **Terrain Object 관리:**
* 새로 생성된 Terrain은 Assets 폴더에 저장됨 (예: `New Terrain`).
* Terrain Object는 `Splat Alpha` (Material Map)와 연결되어 각 Material의 적용 영역을 나타냄.
* Splat Map은 Red, Green, Blue 등의 색상으로 각 Layer를 표시.
### **Unreal Engine Landscape 기초**
* **Landscape와 Terrain:**
* Unity의 Terrain과 동일한 개념 (Unreal에서는 Landscape라고 칭함).
* **새 Level 생성:**
* `File` > `New Level` > `Basic` 선택.
* **Landscape Mode:**
* `Modes` 드롭다운 > `Landscape` 선택.
* 녹색 그리드는 Landscape 생성될 영역을 미리 보여줌.
* `Create` 버튼 클릭 시 Landscape 생성.
* **Landscape 구성:**
* *Sections*와 *Components*로 구성.
* 개별 *Tiles*가 가장 작은 단위.
* **설정:**
* `Number of Components`: 전체 Component 수 (CPU 비용에 영향).
* `Sections per Component`: Component 당 Section 수.
* `Quads per Section`: Section 당 Quad 수 (GPU 비용에 영향).
* `Landscape Component Size`: Component의 크기.
* **최적화:** CPU와 GPU 비용 간의 균형을 맞추는 것이 중요.
* Epic Games 공식 문서의 **Table**을 참고하여 Landscape 크기에 따른 최적 설정 확인 권장.
* 기본 설정 (505x505 해상도, 64 Components)은 약 0.5km x 0.5km 크기 Landscape 생성.
* 초보자는 작은 크기부터 시작하는 것이 좋음.
* **Level of Detail (LOD):**
* Landscape는 카메라 거리에 따라 자동으로 디테일 수준을 조정 (Zoom In 시 Vertex 밀도 증가, Zoom Out 시 감소).
* **Vertex Density:**
* 기본값: 1 Vertex per Meter (가까이 볼 때).
* `Manage` 탭 > `Resize` > `Resample` 모드.
* `Section Size` 조정 (예: 63x63 -> 255x255)으로 Vertex 밀도 증가.
* **LOD Settings:**
* `LOD0 Screen Size`, `LOD0`, `Other LODs` 설정으로 원거리 디테일 제어.
* 밀집된 Vertex를 효과적으로 줄여 성능 최적화.
* 적절한 설정 값을 찾기 위한 조절 과정 필요.
* **Sculpting (조각):**
* `Sculpt` 탭 사용.
* **Tools:**
* `Sculpt Tool` (기본): 클릭하여 높이기, `Shift` + 클릭하여 낮추기.
* `Smooth Tool`: 날카로운 지형을 부드럽게 만듦.
* `Flatten Tool`: 특정 높이로 지형 평탄화.
* `Erosion`: 언덕이나 계곡 침식 효과.
* `Add Noise`: 지형에 무작위 노이즈 추가하여 디테일 향상.
* **Brush Size/Strength:** 브러시 크기와 강도 조절.
* **작업 흐름:**
* 큰 브러시로 주요 지형 (산, 강)을 블록킹.
* Smooth Tool로 부드럽게 다듬기.
* Noise Tool로 미세한 디테일 추가 후 Smooth Tool로 마무리.
* **Material Layer Painting (재질 칠하기):**
* `Paint` 탭 사용.
* **Terrain Material:** Landscape에 적용될 기본 Material.
* **Target Layers:**
* `Create Layer` 버튼으로 Layer 추가.
* `Create Layers from Assigned Materials`: Material에 할당된 Layer를 기반으로 자동 생성.
* **Layer Info:**
* 각 Layer에 대한 정보 (Weight Blending 등) 설정.
* `Advanced Weight Blending` 설정 권장.
* *Blend Group* 설정.
* **Weight Blending:**
* Layer 간의 혼합 방식.
* **버그 주의:** Unreal Engine 5.7 버전에서 Weight Blending 관련 버그가 있을 수 있으며, 수동으로 다른 Layer를 지워야 할 수 있음.
* **Material Layer 구성:**
* Material의 Layer 이름과 Landscape의 Layer 이름이 일치해야 함.
* `Landscape Blend Layer` 노드를 사용하여 Layer와 Height Blending 설정.
### **결론**
* Unity와 Unreal Engine 모두 Terrain (Landscape)을 생성하고 sculpting, material painting하는 기본적인 기능을 제공합니다.
* **사전 계획**은 복잡한 지형 제작 시 필수적입니다.
* **브러시 크기, 강도, LOD 설정** 등을 조절하여 원하는 디테일과 성능을 확보합니다.
* 각 엔진의 **고유한 시스템과 워크플로우**를 이해하는 것이 중요합니다.
* 다음 단계에서는 **Grass, Ferns, Trees와 같은 디테일 추가** 방법에 대해 다룰 예정입니다.