01 Terrain Map 개요
Unity Terrain
- 유니티에서 제공하는 미들웨어 엔진으로 높이 맵을 제작할 수 있는 툴
- 맵의 높낮이를 설정(높낮이 정보는 grayscale 형태의 raw 파일로 저장)하고, 타일링된 텍스처를 여러 장 겹친 후 마스킹 텍스처의 RGBA를 섞어주는 방식
- 장점
- 제작 및 수정이 용이하다 (작업시간 단축)
- LOD (Level of Detail) 지원 (최적화 작업)
- Asset Store에 제공되는 다양한 지형지물 오브젝트, Terrain 텍스처
- 단점
- 메모리를 많이 사용한다
- 연산이 많아 CPU 자원을 많이 사용한다 (=게임이 느려진다)
- 2018.3 이상 버전은 “Draw Instanced” 기능으로 CPU의 비용을 절감하고 GPU로 처리
Terrain에 사용할 Asset Import
Asset Store에서 “ Terrain Sample Asset Pack” 검색 후 다운로드
Free SpeedTree Package가 에셋 스토어에 없어서 아래의 에셋을 다운받았다.
https://assetstore.unity.com/packages/3d/vegetation/trees/realistic-tree-9-rainbow-tree-54622
Realistic Tree 9 [Rainbow Tree] | 3D 나무 | Unity Asset Store
Elevate your workflow with the Realistic Tree 9 [Rainbow Tree] asset from Pixel Games. Find this & other 나무 options on the Unity Asset Store.
assetstore.unity.com
Terrain 오브젝트 생성
GameObject - 3D Object - Terrain
Terrain 컴포넌트
- 높낮이, 텍스처 설정과 같은 Terrain 제작 메뉴(Scene View에서 Terrain 제작)
Terrain Collider 컴포넌트
- Terrain의 높낮이 생김새대로 충돌처리를 함
생성한 "Terrain" 오브젝트의 정보가 담겨있는 Terrain Data Asset은 Poject View에 저장되어 있다.
Terrain 컴포넌트
02 Create Neighbor Terrains
Terrain의 주변에 현재 Terrain의 이미지, 크기를 가지는 Terrain 생성
현재 Terrain이 배치되어 있는 곳에서 클릭하면 이웃한 네 방향으로 새로운 Terrain 생성 가능하다.
기본으로 설정된 Texture Layer가 있을 경우 이웃 Terrain에 그대로 적용된다
03 Paint Terrain
Terrain에 보여지는 이미지, 높낮이 등을 설정할 수 있는 메뉴
1. Raise or Lower Terrain
Brush 정보를 바탕으로 Terrain의 높낮이를 바꾸는 기능
- 높이 증가(Raise) : 마우스 왼쪽 클릭
- 높이 감소(Lower) : Shift+마우스 왼쪽 클릭
- Brush : 높이를 변화시킬 모양
- Brush Size : 크기 변화 범위
- Opacity : 불투명도 (높을수록 진함)
2. Paint Holes
Brush 정보를 바탕으로 Terrain에 구멍을 뚫거나 메꾸는 기능
구멍 뚫기 : 마우스 왼쪽 클릭
구멍 메꾸기 : Shift + 마우스 왼쪽 클릭
3. Paint Texture
Terrain에 Texture를 입혀주는 역할 (여러 장의 Texture 사용 가능)
Terrain Layers
Terrain에 입혀지는 Texture 첫 번째에 위치하는 Layer는 Terrain 전체에 입혀지는 기본 Layer로 사용된다
- Create Layer : 새로운 레이어 생성
- Add Layer : 이미 만들어져 있는 레이어를 현재 Terrain에 추가
- Replace Layer : 레이어 교체 (맵에 해당 레이어로 칠해진 부분이 교체된다)
- Remove Layer : 현재 선택된 레이어를 Terrain Layers에서 삭제
Terrain Layer의 목록으로 설정되어 있는 레이어만 Terrain에 설정할 수 있고 제일 앞에 등록된 레이어가 Terrain에 기본 텍스처로 설정된다.
레이어를 선택하면 레이어 정보에서 Texture, Normal 정보 등을 설정할 수 있고
생성된 레이어는 모두 Project View에 저장되기 때문에 에셋을 선택해서 옵션을 설정할 수도 있다.
Normal Map이란?
모델링(Mesh)을 좀 더 자세하게 표현하기 위해 사용되는 기법으로 굴곡을 점(Vertex) 정보를 수정해서 표현하게 되면 폴리곤의 개수가 늘어나 메모리가 증가하기 때문에 빛이 반사되는 벡터(Normal Vector) 정보를 수정해서 굴곡을 표현하는 기법 (실제 물리적 충돌을 했을 때는 평지) 이때 벡터 정보를 바꾸는 이미지가 Normal Map Texture
Tiling Settings::Size
현재 예제에 사용된 Terrain의 크기가 100x100이기 때문에 Tiling Settings의 Size가 100x100이면 원본 이미지 한 장을 맵 전체에 동일하게 배치하게 된다
레이어를 추가하고 드래그를 하면 위와 같이 텍스처의 색상이 변하게 된다.
Terrain에 적용된 Textures의 정보는 Terrain Data로 활용되는 오브젝트(Project View에 “New Terrain”)의 자식 정보에 “SplatAlpha 0”으로 저장되어 있다.
4. Set Heigh
높이의 최대치를 설정하여 Terrain에 평평한 언덕을 만드는 기능
5. Smooth Height
Terrain의 언덕 가장자리를 부드럽게 다듬어 주는 기능
6. Stamp Terrain
설정된 Stamp Height 높이만큼 브러쉬와 동일한 모양을 Terrain에 찍어낸다
- Ctrl+마우스 휠 스크롤을 하면 Stamp Height가 수정된다
- Shift+마우스 왼쪽 클릭은 Subtract를 체크한 상태와 동일하다
- Stamp Height : 찍는 지형의 높이
- Subtract : Brush 모양, Stamp Height 높이만큼 지형을 낮추는 기능
- Max <--> Add : 기존 지형에 높이를 추가로 높이거나 낮추는 기능 (0 or 1)
“New Brush”를 이용한 사용자 정의 브러쉬 생성
스탬프 이미지, 색 반전, 어둡게/밝게, 보여지는 범위 등을 설정할 수 있다
04 Pain Trees
Unity의 Tree 오브젝트 또는 일반 오브젝트를 Terrain에 배치하는 기능
가지와 나뭇잎을 추가하여 제작할 수 있다.
Tree 오브젝트 등록
Mass Place Tress로 원하는 숫자만큼 임의의 위치에 자동으로 나무 배치할 수도 있고 클릭으로 원하는 위치에 나무를 배치할 수 있다.
05 Paint Details
풀이나 돌 같은 지형지물을 심을 때 사용 (풀, 돌, 게임 오브젝트 등)
풀의 경우 Wind Settings를 이용해 바람에 흔들리는 효과를 적용할 수도 있다.
Add Grass Texture로 풀 오브젝트를 등록한다.
*Billboard란 풀과 같은 오브젝트를 3D로 표현하면 많은 폴리곤을 소모하기 때문에 2D 형태의 Texture로 제작하고, 카메라 행렬 값의 역 행렬을 이용해 늘 카메라가 바라보는 방향으로 회전해 입체적으로 보이게 하는 효과
확인하기 위해 메인카메라의 위치를 조정했고 풀이 바람에 따라 움직이는 것을 확인했다.
06 Terrain Settings
Basic Terrain (Terrain 전체에 대한 기본 설정)
- Draw : Terrain 렌더링 On/Off
- Cast Shadows : Terrain에 그림자 생성 여부
- Reflection Probes : 반사 프로브 설정 (반사를 포함하는 렌더링을 지원하는 메터리얼에서 가능)
- Material : Material 변경 (Built In 외에 사용자 정의 메터리얼 설정 가능)
Tree & Detail Objects (나무, 오브젝트들에 대한 설정)
- Draw : Tree & Detail Object 렌더링 On/Off
- Detail Distance : 오브젝트들이 Culling 되는 거리
Wind Settings for Grass (풀의 바람 설정)
- Speed : 바람의 속력
- Size : 풀이 있는 영역에 바람이 불 때 풀이 “파도치는” 크기
- Bending : 바람에 의해 풀이 구부러지는 정도
- Grass Tint : 풀 오브젝트에 적용되는 틴트 색
Mesh Resolution (Terrain 오브젝트의 해상도)
- Terrain Width : Terrain의 가로 크기
- Terrain Length : Terrain의 세로 크기
- Terrain Height : Terrain의 높이
- Detail Resolution : Detail 텍스처의 해상도 (풀, 바위 등)
Texture Resolution (Terrain에 사용되는 텍스처 해상도)
- Import Raw, Export Raw : 높이 맵의 지형 정보(높이)를 내보내거나 불러올 수 있음 (Tree, Detail Objects, Texture 정보를 제외한 순수 높낮이 정보)
Export Raw 버튼을 눌러 파일을 저장한다.
새로운 씬 생성 후 Terrain 오브젝트를 만들고 Import Raw 버튼을 눌러 저장한 파일을 가져온다.
사이즈까지 설정을 해주면 위와 같이 저장했던 높이 맵 정보가 그대로 반영되는 것을 확인할 수 있다.
'PBL > Unity' 카테고리의 다른 글
유니티 3D 기초 - 3D Animations / Simple Combat (0) | 2024.05.29 |
---|---|
유니티 3D 기초 - Animation Layer, Blend Tree 실습 (0) | 2024.05.22 |
유니티 3D 기초 - Animation Layer, Blend Tree (1) | 2024.05.21 |
유니티 3D 기초 - 3D Model / Animations (0) | 2024.05.14 |
유니티 3D 기초 - Navigation Mesh 응용 (0) | 2024.05.14 |