일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | |||||
3 | 4 | 5 | 6 | 7 | 8 | 9 |
10 | 11 | 12 | 13 | 14 | 15 | 16 |
17 | 18 | 19 | 20 | 21 | 22 | 23 |
24 | 25 | 26 | 27 | 28 | 29 | 30 |
- soundmanager
- c#
- 효과음
- 메서드
- InputManager
- 직렬화
- ObjectPool
- skybox
- inputsystem
- 자료구조
- unity
- invokec#events
- 유니티
- 스택
- Generic
- 유한상태머신
- 스파르타내일배움캠프
- 배열
- 비선형자료구조
- 인터페이스
- UI
- LINQ
- 프로그래머스
- 람다식
- 코루틴
- script
- 장애물달리기
- delegate
- FSM
- BGM
- Today
- Total
Unity 개발일지
[Unity] 코딩하다가 뜬금없이 미술하게된 썰(Terrain) 본문
이번주는 팀프로젝트를 진행한다.
3D 러닝 액션게임과 3D 퍼즐 플랫폼 게임, 3D 서바이벌 게임 3개의 주제 중
3D 퍼즐 플랫폼 게임을 구현하기로 했다.
이유는 퍼즐을 구현하면서 러닝 액션과 서바이벌로의 확장도 고려할 수 있기 때문에
(과연 다 넣을 수 있을까...?)
뉴비들의 포부로 퍼즐 플랫폼 게임을 구현하기로 했다.
그리하여 만들게 된 오늘의 결과물!
팀원중 한명이 섬처럼 생긴 맵에서 퍼즐을 풀러 돌아다니는 것은 어떨까? 하고 만든 Terrain이다.
그렇다면 맵을 한번 만들어보자!
3D Object에서 Terrain을 클릭하면 흰색 판때기 하나가 나온다.
터레인을 생성하고 Inspector 창을 보면
가장 기본이 되는 Transform
Terrain Collider 컴포넌트가 생기고
가장 중요한 Terrain 컴포넌트가 있다.
5개의 작업을 할 수 있는데
한번씩 살펴보자.
[Create Neighbor Terrains]
Terrain의 맞닿은 부분으로 확장 가능한 Terrain을 만든다.
Fill Height Map Neighbor 를 사용 시
Clamp는 초기 형태의 Terrain이 생성되고,
Mirror는 Height속성을 복사한 Terrain이 생성된다.
[Paint Terrain]
Terain을 만드는 붓이라고 생각하면 된다.
다양한 Brush들이 있고 Brush Size와 Opacity로 더 섬세하고 편리하게 작업할 수 있다.
<Smooth Height>
지형을 Smooth하게 깎아준다.
Blur Direction을 설정해서 원하는 방향으로 깎을 수 있다.
<Paint Hole>
구멍을 만들 수 있다.
현재 Terrain의 아래에는 Water Object를 배치하여
푸른색으로 보인다.
<Paint Texture>
Edit Terrain Layers.. - Add Layer 로
Material을 등록하여 사용할 수 있다.
<Set Height>
Terain을 설정한 Height까지 올릴 수 있다.
마우스를 누르고 있으면 설정한 높이까지 올라오고,
클릭을 한번씩 해서 천천히 높이를 설정할 수 있다.
<Raise of Lower Terrain>
Terrain을 높이거나 낮출 수 있다.
클릭하면 높이고, Shift+클릭을 하면 낮춘다.
<Stamp Terrain>
Stamp 기능이다.
Subtract 기능과 Max <--> Add 기능이 있으며
Shift+ 휠로 Height도 설정할 수 있다.
[Paint Trees]
개별 나무 모델을 직접 지형에 배치할 수 있다.
Terrain으로 배치한 나무들 프리팹에 Collider 관련 기능이 있다면 정상적으로 작동한다.
브러쉬 사이즈와 밀집도 등을 선택할 수 있으며 Edit Trees를 클릭하면 Add, Edit, Remove Tree 기능이 있는데 이 기능을 이용하여 프리팹을 등록, 수정, 제거할 수 있다.
브러쉬 사이즈, 나무 밀집도 등을 수정할 수 있고,
나무의 높이와 방향을 랜덤으로 설정해줄 수 있다.
[Paint Details]
텍스처 기반의 디테일을 지형에 페인팅한다.
풀, 덤불, 바위,. 작은 식물 등을 표현하는 데 사용된다.
Add Detail Mesh, Add Grass Texture, Edit, Remove의 기능을 이용하여 등록, 수정, 제거할 수 있으며
Detail Mesh는 Prefab등의 단일게임오브젝트를 등록하며
Texture에는 Texture타입만 등록할 수 있다.
Target Strength는 현재 페인팅하려는 텍스처와 기존 텍스처의 비율을 조정하는데 사용한다.
0~1의 비율을 가지고있으며
0: 현재 페인팅하려는 텍스처가 전혀 적용되지않음
(기존 텍스처만 표시)
1: 현재 페인팅하려는 텍스처가 완전히 적용
(기존 텍스처는 덮어쓰임)
0.5: 현재 페인팅하려는 텍스처와 기존 텍스처가 50% 씩 혼합
LOD그룹은 Detail Mesh로 등록할 수 없고
단일 게임오브젝트만 Detail Mesh로 등록할 수 있다.
[Paint Trees와 Paint Details의 차이점]
- Paint Trees:
- 개별 나무 모델을 직접 지형에 배치합니다.
- 각 나무는 고유한 위치, 회전, 크기, 속성을 가질 수 있습니다.
- 밀도, 최소/최대 높이, LOD (Level of Detail) 설정을 사용하여 제어 가능합니다.
- 자연스러운 삼림 환경을 표현하는 데 적합합니다.
- Paint Details:
2. 성능:
- Paint Trees:
- 개별 나무 모델은 폴리곤 수가 많아 렌더링 부하가 높아질 수 있습니다.
- 많은 나무를 배치하면 성능 저하를 초래할 수 있습니다.
- 로드맵 및 인스턴싱 기술을 활용하여 최적화 가능합니다.
- Paint Details:
- 텍스처 기반 디테일은 렌더링 부하가 상대적으로 낮습니다.
- 많은 디테일을 추가해도 성능 저하가 적습니다.
- 로드맵 및 인스턴싱 기술을 활용하면 더욱 효율적입니다.
3. 표현력:
- Paint Trees:
- 다양한 종류의 나무 모델을 사용하여 사실적인 삼림 환경을 표현할 수 있습니다.
- 개별 나무의 위치, 회전, 크기를 조절하여 자연스러운 무작위감을 연출 가능합니다.
- 풍부한 디테일과 생동감을 표현하는 데 강점이 있습니다.
- Paint Details:
- 텍스처 기반 디테일은 다양한 종류의 디테일을 표현할 수 있지만, 개별 모델만큼의 사실성은 부족할 수 있습니다.
- 넓은 영역에 일관된 디테일을 표현하는 데 적합합니다.
- 성능과 표현력 사이의 균형을 제공합니다.
4. 적합한 상황:
- Paint Trees:
- 사실적인 삼림 환경을 표현해야 하는 경우 (예: 숲 속 RPG, 시뮬레이션 게임)
- 특정 종류의 나무를 정교하게 배치해야 하는 경우
- 제한된 영역에 나무를 배치해야 하는 경우
- Paint Details:
- 넓은 영역에 풀, 덤불, 바위 등을 표현해야 하는 경우
- 성능 저하를 최소화하면서 풍부한 디테일을 표현해야 하는 경우
- 다양한 종류의 디테일을 균일하게 배치해야 하는 경우
5. 결론:
Paint Trees와 Paint Details는 각각 장단점을 가지고 있으며, 상황에 따라 적절하게 선택해야 합니다.
- 사실적인 삼림 환경 표현과 풍부한 디테일을 우선시한다면 Paint Trees를 사용하는 것이 좋습니다.
- 하지만, 넓은 영역에 균일하게 디테일을 표현하거나 성능 저하를 최소화해야 하는 경우 Paint Details를 사용하는 것이 효율적입니다.
참고:
- Unity Terrain 문서
- HDRP 및 URP의 새로운 Unity 터레인 데모 씬 살펴보기
[Terrain Settings]
마지막으로 Terrin Settings이다. Terrain에 대한 다양한 Setting들을 조절할 수 있다.
1. Basic Terrain
Grouping ID: 여러 터레인을 하나의 그룹으로 묶을 때 사용하는 ID입니다.
Auto Connect: 주변 터레인과 자동으로 연결할지 여부를 설정합니다.
Draw: 터레인을 렌더링할지 여부를 설정합니다.
Draw Instanced: 인스턴싱을 사용하여 터레인을 렌더링할지 여부를 설정합니다. 인스턴싱은 터레인의 성능을 향상시키는 데 도움이 될 수 있습니다.
Enable Ray Tracing Shadows: 레이 트레이싱을 사용하여 터레인의 그림자를 표현할지 여부를 설정합니다. 레이 트레이싱은 현실적인 그림자를 만들 수 있지만 성능이 많이 소모될 수 있습니다.
Pixel Error: 터레인 렌더링의 정확도를 설정합니다. 값이 높을수록 정확도가 낮아지지만 렌더링 오버헤드가 낮아집니다.
Base Map Dist.: 터레인 하이트맵과 텍스처 사이의 거리를 설정합니다. 값이 높을수록 거리가 멀어져 텍스처 왜곡이 발생할 가능성이 높아집니다.
Cast Shadows: 터레인이 다른 오브젝트에 그림자를 드릴지 여부를 설정합니다.
Reflection Probes: 터레인이 리플렉션 프롭에 반영될지 여부를 설정합니다. 리플렉션 프롭은 주변 환경을 반영하는 사실적인 표면을 만드는 데 사용할 수 있습니다.
Material: 터레인에 사용할 머티리얼을 설정합니다.
2. Tree & Detail Objects
Draw: 나무와 디테일 오브젝트를 렌더링할지 여부를 설정합니다.
Bake Light Probes For Trees: 나무에 대한 라이트 프롭을 베이킹할지 여부를 제어합니다.
Remove Light Probe Ringing: 라이트 프로브를 사용할 때 발생하는 시작적인 아티팩트로 텍스처 명암 간의 명확한 경계가 나타나는 것 처럼 보이게 해줍니다.
Preserve Tree Prototype Layers: 트리 프로토타입 레이어를 유지할지 여부를 결정합니다.
Detail Distance: 디테일 오브젝트가 렌더링되기 시작하는 카메라와의 거리를 설정합니다. 값이 높을수록 디테일 오브젝트가 더 멀리 표시됩니다.
Detail Density: 주어진 면적에 표시되는 디테일 오브젝트의 수를 설정합니다. 값이 높을수록 더 많은 디테일 오브젝트가 표시됩니다.
Tree Distance: 나무가 렌더링되기 시작하는 카메라와의 거리를 설정합니다. 값이 높을수록 나무가 더 멀리 표시됩니다.
Tree Density: 주어진 면적에 표시되는 나무의 수를 설정합니다. 값이 높을수록 더 많은 나무가 표시됩니다.
Max Tree Distance: 나무가 렌더링되는 최대 거리를 설정합니다.
Tree LOD: 나무의 LOD (Level of Detail)를 설정합니다. LOD 값이 높을수록 나무가 더 멀리 표시될 때 더 단순한 모델로 표시됩니다.
Wind Speed: 나무가 바람에 흔들리는 속도를 설정합니다.
Wind Strength: 나무가 바람에 얼마나 많이 흔들리는지 설정합니다.
Billboard Transition: 나무가 빌보드로 전환되는 거리를 설정합니다. 값이 높을수록 나무가 더 멀리 표시될 때 빌보드로 전환됩니다.
Max Billboards: 렌더링될 수 있는 최대 빌보드 수를 설정합니다.
Instanced: 인스턴싱을 사용하여 나무를 렌더링할지 여부를 설정합니다. 인스턴싱은 성능을 향상시키는 데 도움이 될 수 있지만 나무가 덜 사실적으로 보일 수 있습니다.
Use Simple Billboard: 빌보드를 사용할 때 더 간단한 모델을 사용할지 여부를 설정합니다.
Billboard Size: 빌보드의 크기를 설정합니다.
Detail Object Prefabs: 디테일 오브젝트로 사용할 프리팹을 설정합니다.
Tree Prefabs: 나무로 사용할 프리팹을 설정합니다.
1. 풍력 설정 (풀)
Speed: 풀이 바람에 흔들리는 속도를 설정합니다.
Size: 풀 움직임의 크기를 설정합니다.
Bending: 풀이 바람에 구부러지는 정도를 설정합니다.
Grass Tint: 풀의 전체적인 색상을 설정합니다.
2. 메시 해상도
Terrain Width: 터레인의 너비를 설정합니다.
Terrain Length: 터레인의 길이를 설정합니다.
Terrain Height: 터레인의 높이를 설정합니다.
Detail Resolution Per 32: 텍스처 맵의 해상도를 설정합니다. 값이 높을수록 해상도가 높아지지만 메모리 사용량이 늘어납니다.
Detail Resolution: 텍스처 맵의 총 해상도를 설정합니다.
3. 구멍 설정
Compress Holes Text: 구멍 텍스처 압축 여부를 설정합니다. 압축하면 메모리 사용량을 줄일 수 있지만 텍스처 품질이 저하될 수 있습니다.
4. 텍스처 해상도
Heightmap Resolution: 하이트맵 텍스처의 해상도를 설정합니다.
Control Texture Resolution: 컨트롤 텍스처의 해상도를 설정합니다.
Base Texture Resolution: 기본 텍스처의 해상도를 설정합니다.
5. 조명
Contribute Global Illumination: 터레인이 글로벌 일루미네이션에 기여하는지 여부를 설정합니다.
Receive Global Illumination: 터레인이 글로벌 일루미네이션을 받는지 여부를 설정합니다.
Lightmaps: 터레인에 라이트맵을 사용할지 여부를 설정합니다. 라이트맵은 성능을 향상시키는 데 도움이 될 수 있지만 렌더링 시간이 길어질 수 있습니다.
6. 라이트매핑
Terrain is chunked up into 4 instances for baking: 라이트매핑을 위해 터레인을 4개의 인스턴스로 나누는지 여부를 설정합니다. 이는 렌더링 시간을 줄일 수 있지만 라이트매핑 품질이 저하될 수 있습니다.
Scale In Lightmap: 라이트맵에서 터레인의 크기를 조정합니다.
Lightmap Parameters: 라이트맵 품질을 설정합니다.
7. 품질 설정
Ignore Quality Setting: 품질 설정을 무시할지 여부를 설정합니다.
아직 Terrain Settings 부분은 만져본 내용이 크기밖에 없어 Unity 공식문서 내용으로 대체하였다.
'Unity 개발' 카테고리의 다른 글
[Unity] Generic Singleton(제네릭 싱글톤) (2) | 2024.06.13 |
---|---|
[Unity] SoundManager로 간단하게 BGM과 효과음 넣기! - 1 - (1) | 2024.06.10 |
[Unity] SkyBox로 낮과 밤 구현하기 1 (0) | 2024.05.28 |
[Unity] RayCast(레이캐스트) (0) | 2024.05.27 |
[Unity] 충돌에 대해 알아보자 (0) | 2024.05.24 |