
머리 복잡할 때 운석 떨어뜨려 도시 부수는 게임 만들었어요
로그인도 점수도 없이 그냥 도시 만들고 운석으로 부수기만 하는 게임이에요. 3분만 부숴도 좀 시원함 ㅋㅋ
자랑 포인트
- 건물을 층·복셀 단위로 잘라, 맞은 층부터 순서대로 팬케이크처럼 무너지게 했어요. 통째로 뻥 터지지 않는 진짜 붕괴 연출이 목표였습니다.
- 서버도 로그인도 없이 전부 브라우저에서 돌아가요. 마음에 드는 도시는 시드 링크만 넘기면 어느 기기에서든 똑같이 재현됩니다.
- 파편 수백 개도 raw Rapier + 인스턴스 메시 풀로 돌리고, 잠든 파편은 정적 잔해로 구워 GPU 티어까지 자동 조정해 저사양도 커버해요.
요즘 일이 많아서 머리가 자주 터질 것 같았다. 그럴 때 뭔가 생각 없이 부수고 싶은데, 게임을 켜자니 로그인하고 튜토리얼 보고 이게 또 귀찮다. 그냥 도시 하나 띄워놓고 운석 떨어뜨려서 와르르 무너지는 거나 멍하니 보고 싶었다. 그래서 만들었다.

켜면 미니어처 도시가 하나 뿅 생긴다. 매번 다르게 생긴다. 도로 격자 깔리고 건물 서고 강이랑 다리, 공원, 나무까지 알아서 배치되는데, 이게 시드 하나로 정해지는 거라 같은 시드면 어느 기기에서 열어도 똑같은 도시가 나온다. 그래서 마음에 드는 도시가 나오면 주소창 링크만 친구한테 던지면 된다. "야 이거 부숴봐" 하고. 서버도 없고 로그인도 없어서 그냥 링크가 전부다.
부수는 건 진짜 단순하다. 아래 바에서 운석 종류랑 크기 고르고 도시 아무 데나 클릭. 그러면 그 자리에 운석이 떨어진다. 꼭대기를 맞추면 위층부터 차례로 으스러지면서 아래로 무너지고, 크레이터엔 운석이 반쯤 박히면서 불이랑 검은 연기가 치솟는다. 도로 다니던 차랑 사람들은 충격파에 튕겨나가고. 한 판 하고 나면 좀 시원하다 ㅋㅋ

운석도 네 종류 넣었다. 기본 암석형, 무겁고 치밀해서 좁고 깊게 파고드는 철운석, 각져서 삐뚤빼뚤 흩뿌려지는 파쇄형, 크고 가벼워서 넓고 얕게 터지는 혜성. 크기도 S·M·L이라 같은 운석이라도 L로 떨구면 훨씬 넓게 쓸어버린다. 충돌 순간을 슬로모로 켜놓고 보면 이게 또 은근 중독된다. 파편 하나하나 튀는 거 멍하니 보게 됨.
근데 이 "시원한 느낌"을 내는 게 생각보다 개고생이었다. 처음엔 건물이 그냥 통째로 뻥 터졌다. 그게 하나도 안 시원하더라. 실제로 건물 무너지는 영상 보면 위에서부터 팬케이크처럼 차곡차곡 내려앉잖아. 그 느낌 살리려고 건물을 층·복셀 단위로 잘라두고, 맞은 층부터 순서대로 물리를 켜서 아래로 눌러앉게 했다. 이게 되고 나서야 "아 이제 좀 부서지는 것 같다" 싶었다.
파편도 골칫거리였다. 처음엔 콘크리트 조각이 고무공처럼 통통 튀었다. 무게감이 하나도 없으니 우스꽝스러웠다. 질량이랑 마찰을 계속 만지면서 묵직하게 발밑에 쌓이도록 겨우 맞췄다. 그리고 이 파편이 수백 개씩 굴러다니면 프레임이 죽는다. 그래서 멈춰서 잠든 파편은 정적인 잔해 덩어리로 구워버리고(물리 계산에서 빼고), 파편 자체도 리액트로 하나하나 그리는 대신 raw 물리 월드 + 인스턴스 메시 풀로 돌렸다. 이 삽질 덕분에 저사양에서도 어찌어찌 돌아간다. GPU를 감지해서 알아서 품질을 낮추기도 하고.

스택은 Next.js 16에 React Three Fiber(three.js), 물리는 Rapier3D WASM 엔진을 썼다. 후처리로 틸트시프트를 넣어서 "책상 위 디오라마" 같은 미니어처 느낌을 냈는데, 이게 멍때리기엔 은근 중요하더라. 화면이 너무 리얼하면 오히려 피곤한데 살짝 장난감처럼 보이니까 부담 없이 계속 부수게 된다.
정답도 점수도 목표도 없다. 도시 만들고, 부수고, 새 도시 만들고. 그게 다다. 스트레스 받을 때 3분만 부수다 보면 좀 풀린다. 나 그러려고 만들었는데, 다른 사람도 그러면 좋겠다.