FPS Arena에 통째로 받아 오는 GLB 맵 다섯을 붙였습니다. 절차적으로 짓던 상자 맵 여섯은 그대로 뒀습니다. 지우기 아까웠거든요.

그게 잘못이었습니다.

무작위가 반반이면 새 맵은 절반만 존재합니다

맵을 무작위로 뽑는데 목록에 열하나가 있으면, 시작할 때마다 절반쯤은 옛 상자 맵입니다. 새 맵을 다섯 개나 만들어 놓고도 그 안에서 노는 시간이 절반입니다.

두 종류가 나란히 있으면 비교도 계속 됩니다. 건물이 서 있는 도시와 상자를 쌓은 아레나가 같은 목록에서 나오면, 상자 쪽이 미완성처럼 보이지 새로운 선택지로 보이지 않습니다.

여섯을 걷어냈습니다. map_builder.gd가 2,510줄에서 1,111줄이 됐습니다.

걷어내니 딸려 나온 것들

네비메시가 늘 0개였습니다. 헤드리스에서 재면 폴리곤이 하나도 없다고 나왔습니다. 방금 붙인 콜라이더가 아직 물리 공간에 등록되지 않은 상태에서 굽고 있었습니다. 물리 프레임을 한 번 기다리게 했습니다.

상자 맵은 처음부터 끝까지 동기라 이 문제가 없었습니다. 받아 온 맵이 비동기라서 드러난 것이고, 두 종류가 섞여 있는 동안에는 "가끔 되는" 상태였습니다.

검사가 아직 안 선 맵을 재고 있었습니다. 같은 이유입니다. 스모크가 맵이 다 서기를 기다리도록 고쳤습니다.

구조물 겹침 검사를 뺐습니다. 손으로 적은 좌표를 검산하려고 만든 것이라, 작가가 만든 GLB 맵에서는 붙어 있는 건물을 전부 사고로 잡습니다. 상자 맵이 없어지면서 검사 대상 자체가 없어졌습니다.

합칠 때 20%가 사라지고 있었습니다

이건 따로 있던 문제입니다.

받아 온 맵은 오브젝트가 400~1,500개라 그대로 그리면 드로우콜이 감당이 안 됩니다. 그래서 재질별로 메시를 합칩니다. 그런데 합친 결과에서 삼각형이 20% 모자랐습니다.

한 재질 안에 UV와 정점 색을 가진 조각과 없는 조각이 섞여 있으면, 이어 붙인 배열이 정점 수보다 짧아집니다. 그러면 엔진이 그 재질을 통째로 거부합니다. 오류를 내지 않고 그냥 안 그립니다.

한국 마을이 231,900에서 278,352 삼각형이 됐습니다. 돌아온 것이 전통 대문과 기와지붕이었습니다. 없는 줄도 몰랐습니다 — 처음부터 없었으니까요.

같이 넣은 것들입니다. 미니맵 옆에 프레임 타임을 띄우고, 웹에서 어디에 시간이 나가는지 가르는 진단(?perf=1)과 주소로 맵을 고르는 길(?map=)을 뒀습니다.

남는 것

옛 맵을 남겨 둔 건 "선택지가 늘어나니까 좋다"는 생각이었습니다. 실제로는 새로 만든 것을 절반만 쓰게 만드는 장치였습니다.

그리고 두 종류가 섞여 있는 동안에는 네비메시 문제도 "가끔 나는 것"으로 보였습니다. 비동기 경로가 절반만 쓰이니 증상도 절반만 났습니다. 하나로 정리하고 나서야 늘 재현됐습니다.