Opus 5를 사용해 3D 달 탐사 로버 게임을 만들었습니다.
I created a 3D moon rover survey game with Opus 5.
핵심 요약
Claude Opus 5를 활용해 빌드 도구 없이 순수 코드로만 구현한 3D 달 탐사 로버 게임 개발기.
- 개발 방식 — 빌드 도구 없이 WebGL2와 three.js만 사용함
- 기술적 특징 — 모든 텍스처와 사운드를 로드 시점에 코드로 생성함
- 물리 엔진 — 달 환경에 맞춘 탄도학 및 Lommel–Seeliger 광도 측정 적용
- 개발 비용 — Claude Opus 5 사용 시 약 600달러 상당의 API 비용 소요
엔진도 없고, 빌드 단계도 없고, npm install 할 것도 없음. WebGL2 컨텍스트 하나, three.js 복사본 하나, 자바스크립트 약 6,300줄, 그리고 바퀴랑 셰이더가 똑같은 높이 맵(height field)을 읽기 때문에 바퀴 자국이 그대로 남는 지형까지.
물리, 렌더러, 지형, 세계관, 사운드 디자인, 인터페이스까지 전부 다 들어감.
시작은 Claude Code(Opus 5, ultracode)에 던진 프롬프트 하나였음:
그 프롬프트로 바로 플레이 가능한 빌드가 나왔음. 물론 지금 이 버전은 아님. 그 이후로 계속된 "수정"의 연속이었지. 조향 반대로 되고, 바퀴는 차체에서 붕 떠 있고, HUD는 폰 화면 절반을 가리고, 설정 패널은 첫 커밋 때부터 2px짜리 줄로 찌그러져 있었음. 설계 문서? 그런 거 애초에 없었음.
이게 뭔데?
미션 5개짜리 캠페인이랑 자유 탐사 모드. 코덱스 항목 12개, 샘플 종류 9개, 그리고 214일 전부터 응답 없는 기지 하나. 데스크탑, 폰, 태블릿 다 돌아감. 브라우저는 2023년 이후 버전이 필요함. 번들러를 안 써서 네이티브 import map에 의존하거든.
어떻게 만들었냐고?
텍스처, 바위, 별, 사운드 전부 로딩할 때 코드로 생성함. 게임이 불러오는 에셋 파일은 하나도 없음. 레포에 있는 이미지라고는 README에 올린 스크린샷뿐임. 그래서 gzipped 기준으로 380KB 정도밖에 안 되고, 실행하면 몇 초 만에 바로 뜸.
혁신적인 게 있냐고?
뭐 대단한 걸 발명했다는 의미의 혁신은 아님. Lommel–Seeliger 측광은 1880년대 거고, 지오메트리 클립맵은 2004년 논문임. 진짜 흥미로운 건 이 모든 게 빌드 단계 없이 탭 하나에서 서로 완벽하게 맞물려 돌아간다는 점임:
- 바퀴랑 셰이더가 똑같은 높이 맵을 읽음. GPU가 높이 값을 다시 계산할 일도 없고, CPU의 이선형 필터(bilinear filter)도 GL이랑 똑같이 작동하게 짰음. 둘이 조금이라도 안 맞으면 로버가 붕 뜨거나 땅으로 꺼지는데, 아무리 튜닝해도 답이 없음. 바퀴 자국은 그냥 데칼이 아니라, 양쪽 다 읽어 들이는 실제 지오메트리임.
- 먼지는 탄도학을 따름. 공기가 없으니 저항도 없음. 그래서 먼지 알갱이에 작용하는 힘은 중력뿐이고, 그 궤적은 포물선 방정식의 해 그대로임. 이 사실 하나 때문에 흙먼지 날리는 게 더트 바이크가 아니라 진짜 달 표면처럼 보임.
- 지면은 Lambert 대신 Lommel–Seeliger를 씀. 여기에 역산란 효과(opposition surge)까지 더했음. 그래서 달이 입체적인 공이 아니라 평평한 원반처럼 보이고, 태양을 등지고 달릴 때 지면이 하얗게 날아가는 거임.
- 리얼리즘 모드도 있음. 실제 월면차(LRV) 속도(13km/h), 45초짜리 코어 샘플링, 그리고 지구까지 왕복 2.56초 걸리는 통신 지연까지 적용됨. 게임 내에서 측정해보면, 가속 페달 뗐을 때 11m가 아니라 21m를 관성으로 굴러감. 느낌보다 3배는 일찍 브레이크를 밟아야 함, 안 그러면 이미 멈췄다고 생각한 바위에 그대로 들이박음.


