← 프로젝트

FC Simulation

공공 고도·건물·도로 데이터를 자동 수집해 80km 지역을 실제 지형 그대로 재현하고, 그 위를 마하 10까지 날 수 있게 만든 Godot 4 비행 시뮬레이션

NO.S-04
FIELD항공
SCALE일반
TOOLSGodot 4 · Python
DATE2026
REPOkhw1566/FC_Simulation

왜 만들었나

비행 시뮬레이터를 켜면 늘 남의 동네 위를 날게 된다. 내가 사는 울산을 실제 지형 그대로 날아 보고 싶다는 생각에서 시작했다.

조건은 하나였다. 지형과 건물을 손으로 찍어 만들지 않고, 공개된 데이터를 자동으로 모아 지도를 만드는 것. 그래야 지역을 넓히거나 다른 곳으로 옮겨도 같은 방법으로 다시 만들 수 있다. 처음에는 범위가 작은 일본 간몬 해협(약 18km)으로 시험했고, 방법이 자리 잡은 뒤 울산으로 옮겨 60km, 80km, 동남권 140km까지 넓혔다.

무엇을 만들었나

  • 실제 지형: 위성 고도 자료(30m 간격)로 만든 산·강·바다, 해안선과 방파제
  • 도시: 울산 80km 범위 건물 42만 8천여 동, 도로망, 철도·터널·교량, 공항, 댐, 공단
  • 움직이는 요소: 항구를 드나드는 선박, 철도, 바람에 흘러가는 구름, 비·번개, 낮과 밤, 고도에 따라 달라지는 대기와 지평선
  • 비행: 7단 속도 기어(시속 108km ~ 마하 10), 중력 켜고 끄기, 속도·고도 HUD, 미니맵
  • M 지도: 등고선·수계·도로를 합성한 흑백 지도. 행정구역(시·구·동·리) 검색, 지도를 클릭하면 그 위치로 순간 이동

어떻게 만들었나

크게 데이터를 만드는 Python 파이프라인 과 그것을 띄우는 Godot 4 게임 두 부분이다.

구조도

단계 하는 일
수집 (collectors) DEM, OpenStreetMap, VWorld 건물, 행정구역을 받아 옴. 건물은 80km를 2km² 이하 셀 1,520개로 나눠 요청하고, 중간에 끊겨도 이어서 받을 수 있게 캐시
가공 (processors) 고도를 16-bit 높이맵으로, 강·바다를 마스크로, 도로 아래 지형을 노반처럼 깎아 맞춤, 건물을 메시로 변환
색인 (indexer) 만든 자산마다 해시·범위·고도·해상도를 매니페스트에 기록해, 어떤 파일이 어떤 데이터에서 나왔는지 추적
실행 (Godot) 플레이어 주변 구역만 청크 단위로 불러오고, 거리에 따라 세밀도(LOD)를 바꿈

신경 쓴 부분:

  • 도로가 땅에 묻히는 문제. 고도 자료는 30m 간격이라 도로를 그냥 얹으면 언덕에 파묻히거나 허공에 뜬다. 화면에서 감추는 대신 도로를 따라 지형 자체를 미리 깎고 돋우는 방식으로 바꿨다.
  • 새 구역에 들어설 때 멈칫하는 문제. 계산은 다른 스레드에서 하지만, 완성된 지형·도로·건물을 화면에 붙이는 일은 한 프레임에 몰려 있었다. 이 작업을 작은 조각으로 나누고, 프레임마다 2ms만 쓰고 남은 일은 다음 프레임으로 넘기도록 바꿨다.

스트리밍 개선

측정 항목 (단일 실행 최댓값) 전 후
512m 지형 한 덩어리 업로드 22.3ms 2.8ms
도로 메시 2,048개 등록 중 프레임 간격 93.6ms 2.3ms
다른 타일을 읽는 동안 높이 조회 대기 21.9ms 0.04ms
  • AI 코딩 에이전트와 함께 개발. 코드 작성은 AI 에이전트에게 많이 맡겼다. 대신 파일 하나 800줄 이하, 한 파일에 한 책임, 자산을 바꾸면 색인 갱신 같은 규칙을 문서(AGENTS.md)로 정해 두고, 작업마다 원인·변경·검증을 담은 보고서를 남기게 해서 300개가 넘는 기록으로 진행을 관리했다. 무엇을 만들지 정하고, 결과를 검증하는 것은 내 몫

결과

  • 약 4주(2026.9.17 ~ 10.12) 동안 GDScript 280여 개, Python 340여 개, 셰이더 40여 개 파일로 성장
  • 울산 60km·80km, 동남권(부산~포항) 140km, 간몬 해협, 북규슈, 캠퍼스 상세 맵까지 같은 파이프라인으로 생성
  • 새 구역 진입 시 멈춤을 수십 ms에서 2~3ms 수준으로 줄임 (RTX 4070 SUPER, 분리 측정)
  • 아직 진짜 비행역학(양력·항력)은 없음 지금은 자유 비행에 가깝고, 다음 목표는 비행 모델(FM)과 구름 종류(층운·적란운 등) 다양화