초파리를 훈련시켜 3D 브라우저 탱크 게임을 플레이하게 만들었습니다
I trained a fruit fly to play my 3D browser tank game
핵심 요약
실제 초파리의 신경 회로 모델을 기반으로 3D 탱크 게임을 조종하는 가상 초파리 시뮬레이터를 개발했습니다.
- 초파리 신경망 — 124개의 뉴런과 1,106개의 해부학적 연결을 활용해 탱크 조종 로직 구현함
- 게임 메커니즘 — 조준, 사격, 탄약 교체 및 수리 기능을 초파리의 움직임과 연동함
- 개발 도구 — Claude와 Codex를 활용해 기존 탱크 게임 코드베이스에 시뮬레이션 환경을 구축함
- 웹 기반 데모 — Three.js와 TypeScript를 사용하여 브라우저에서 실시간으로 신경 활동을 관찰 가능함

몇 주 전에 내가 만든 멀티플레이어 Three.js 탱크 게임인 Claude of Tanks를 올렸었지. 120개가 넘는 절차적 생성 차량에 장갑 시뮬레이션, 파괴 가능한 맵, 유도 미사일까지 다 때려 박은 놈이야.
그 뒤로 좀 병맛 섞인 포크 버전인 CoTFly를 작업 중인데, 이건 작은 탱크 헬멧을 쓴 초파리 한 마리가 미니어처 조종석에서 게임을 조종하는 방식이야! 이 녀석이 직접 운전대를 돌리고, 조준경으로 목표를 잡고, 발사 버튼을 누르고, 탄종을 바꾸고, 장비 수리까지 다 한다고. 그냥 뒤에 앉아서 파리의 신경 활동을 구경하면서 전투가 돌아가는 걸 지켜보면 진짜 개꿀잼임!
신경 시뮬레이션은 Fruitless의 축소된 MaleCNS 회로에서 확인된 124개의 초파리 뉴런과 1,106개의 해부학적 연결을 사용했어. 1ms 단위로 leaky integrate-and-fire 모델을 돌리면서 막 전위, 스파이크, 억제, 불응기를 추적하는 방식이지. P1 관련 개체군의 발화율이 모터 컨트롤러의 구동 게인을 조절하고, 별도의 24채널 순환 신경망이 목표물 방향과 장애물 입력을 조향, 가속, 사격 명령으로 변환해. 이 역학이랑 게임 플레이 매핑은 게임을 위해 특별히 맞춤 제작한 건데, 보기에도 엄청 재밌어!!
파리가 탄 작은 조종석이 보일 텐데, 이게 사실 파리가 탱크를 조종하는 방식이야. 사격하려면 포탑 정렬이 돼야 하고 파리 앞다리가 조준이랑 사격 컨트롤러에 닿아야 해. 재장전할 때는 발사 버튼에서 손을 떼기도 하지. 탄약 선택이나 수리는 규칙 기반 로직을 따르고, 일반 게임 플레이랑 똑같이 자원 제한이랑 쿨타임도 적용돼.
15초짜리 설탕 자극도 추가했는데, 이게 신경 모델로 들어가는 입력을 바꿔서 컨트롤러의 교전 거리를 125m에서 70m로 줄여버려. 그래서 목표물에 더 바짝 다가붙게 되지.
Three.js랑 TypeScript로 만들었고 브라우저에서 바로 돌아가! 탱크랑 맵을 고르고 테스트를 시작하면, 게임이 돌아가는 동안 개별 뉴런의 전압, 발화율, 스파이크 기록을 다 확인할 수 있어. 물론 중간에 멈추거나 직접 탱크를 뺏어서 조종할 수도 있고.
Claude랑 Codex를 써서 기존 Claude of Tanks 코드베이스 위에 파리 시뮬레이션을 얹었어. 이미 이동, 장갑, 탄도학, 탐지, 탄약, 수리 같은 건 다 구현돼 있었으니까, AI한테 파리 컨트롤러를 그 시스템들에 연결하고 조종석이랑 신경망 뷰어를 만들라고 시켰지. 작업 과정은 대충 이래: 앱 켜놓고 실제 전투를 보면서 AI한테 구체적인 수정 사항을 던지는 거지. "파리한테 운전대 쥐여줘", "쏘기 전에 다리가 발사 버튼에 닿게 해", "재장전할 땐 버튼에서 손 떼", "조준할 땐 진짜 스코프 모드로 들어가게 해" 이런 식으로. 스크린샷으로 레이아웃이랑 애니메이션 다듬고, 포탑 정렬이나 버튼 접촉 타이밍, 수동 조종 전환 같은 건 자동화 체크로 검증했어. AI가 구현이랑 수정하는 걸 도와줬고, 실제 게임 플레이 중에는 LLM 호출 없이 로컬 신경 모델이랑 제어 로직만으로 파리가 알아서 움직여.
데모: https://fly.kevinliu.studio/
코드: https://github.com/Kevin-Liu-01/CoTFly
회로 소스:

