The Ultimate Fog of War System For Your Next Godot RTS!
- Godot RTS 게임에서 맵의 미탐색 영역을 숨기고 유닛의 이동에 따라 점진적으로 드러내는 포그 오브 워(Fog of War) 시스템 구현 방법을 다룹니다. 🎮
- 맵의 탐색 상태를 나타내기 위해 흑백(또는 회색)의 2D 이미지 마스크를 생성하고 업데이트합니다. 🔳
- 각 유닛은 이동하면서 '포그 오브 워 마스크 스탬프'(흐릿한 흰색 원)를 사용하여 2D 마스크 이미지를 업데이트합니다. 👣
- 포그 오브 워 업데이트는 성능 최적화를 위해 0.1초 간격으로 설정하는 등 약간의 지연을 허용할 수 있습니다. ⏱️
- 3D 월드 좌표를 2D 포그 오브 워 이미지 좌표로 정확하게 변환하기 위해 맵 크기(map size) 변수가 핵심적인 역할을 합니다. 🗺️
- 마스크 스탬프 스프라이트는 투명하고, 흰색 모양이며, 압축되지 않은 올바른 이미지 형식이어야 합니다. ✨
- 3D 씬에 포그 오브 워를 적용하기 위해 뎁스 텍스처를 활용하는 포스트 프로세싱 셰이더 기법을 사용합니다. 💡
- Godot 4의 셰이더 전역 변수(Shader Global Variables)를 통해 FOW 텍스처와 맵 크기를 모든 셰이더에서 쉽게 접근할 수 있도록 합니다. 🌐
- 복잡한 워터 셰이더와 같은 특정 객체는 포스트 프로세싱 대신 셰이더 자체를 수정하여 FOW를 수동으로 적용해야 할 수 있습니다. 🌊
- 전형적인 RTS의 직교 투영(orthographic view)을 모방하기 위해 원근 투영(perspective projection) 카메라의 FOV를 낮추고 카메라를 멀리 배치하는 트릭을 사용할 수 있습니다. 📐
- '탐색되었지만 현재 보이지 않는' 중간 상태를 표현하기 위해 마스크에 회색 픽셀을 도입하여 씬을 어둡게 만듭니다. 🌓
SubViewport 및 SubViewportContainer 노드를 활용하여 '기본 탐색 마스크'와 '현재 시야 마스크'를 동적으로 결합하여 세 가지 FOW 상태를 효과적으로 지원합니다. 🖼️
데브허브 | DEVHUB | The Ultimate Fog of War System For Your Next Godot RTS!