30년 전 GTA 차량 물리엔진, 자바스크립트로 부활
원제 2D Vehicles
190 포인트댓글 45

Key Point
게임 물리 엔진의 실무적 구현 방식을 1990년대 접근법부터 현대적 재현까지 투명하게 공개한 사례로, 게임 개발자나 물리 시뮬레이션에 관심 있는 개발자에게 실질적인 설계 참고가 된다.
핵심 요약
- 개발자 Pat Kerr가 1996년 8월 아타리 ST 컴퓨터에서 GFA BASIC으로 작성한 2D 물리 시뮬레이션을 JavaScript로 재현하여 30주년 기념으로 공개했다.
- 원본은 나중에 C로 포팅되어 GTA의 차량 시스템 기초가 되었으며, 현재 'Motion Lab'이라는 이름으로 웹에서 플레이 가능하다.
- 기본 '카' 모드 외에 '우주선'(우주 비행 게임 Thrust 스타일)과 '벽돌' 모드를 제공하며, 터치/키보드 조작으로 제어할 수 있다.
- 시스템의 핵심은 토크를 포함한 본격적인 2D 강체 물리 시뮬레이션으로, 당시 게임에서 흔했던 단순 점 물리(F=ma)와 임시방편 회전 처리보다 일관성 있게 회전을 다룬다.
- 그 위에 타이어 동작에 대한 근사 모델을 얹었는데, 물리적으로 완전히 정확하지 않지만 게임 목적에는 충분했다.
- 차량은 강체 위에 시각 형태와 충돌 기하학을 정의하는 셸, 그리고 특정 행동(카의 경우 4개 타이어 위치에서 엔진력과 조향)을 제공하는 동역학 객체를 결합한 구조다.
- 강체는 위치·속도와 각도·각속도를 추적하고, 중심을 통과하는 힘은 이동을 바꾸며, 중심 밖의 힘은 회전까지 유발한다.
- 장벽 충돌 시 시뮬레이션은 객체를 안쪽으로 이동시키고, 빗장벽에 미치는 경우 접촉 임펄스를 적용하며, 비중심 충돌은 속도와 스핀을 모두 바꿀 수 있다.
- 타이어 시뮬레이션은 각 위치의 속도를 휠의 진행 방향과 횡방향 성분으로 분해하고, 굴림 저항과 훨씬 강한 횡방향 저항을 적용하는 방식이며, 핸드브레이크는 후륜의 굴림 저항을 증가시키고 횡 그립을 감소시킨다.
- 속도에 비례한 저항력은 현실적인 타이어 마찰 모델이 아닌 편의상의 감쇠 모델이지만, 최소한의 메커니즘으로 휠이 횡방향 이동에 저항하는 느낌을 잘 구현한다.
- 우주선과 벽돌 모드도 동일한 물리 코어를 공유하되, 힘을 적용하는 방식만 다르다.