1996년 8월의 어느 주말, 한 개발자가 아타리 ST 홈컴퓨터에서 취미로 짠 2D 물리 시뮬레이션이 훗날 전 세계적으로 유명해진 게임 “Grand Theft Auto(GTA)”의 차량 시스템 기반이 되었습니다. 이 코드를 만든 Pat Kerr가 30주년을 기념해 당시의 와이어프레임 데모를 자바스크립트로 다시 구현해 웹에서 직접 플레이해볼 수 있도록 공개했습니다. 게임 역사에 관심 있는 개발자라면 GTA라는 거대한 프랜차이즈의 핵심 기술이 어떻게 시작됐는지 원형을 들여다볼 수 있는 흥미로운 사례입니다.
GFA BASIC 데모에서 GTA 차량 시스템으로
원작자는 이 프로젝트가 아타리 ST용 프로그래밍 언어인 GFA BASIC으로 작성한 작은 와이어프레임 데모에서 시작됐다고 설명합니다. 이후 실제 게임 개발 과정에서 C 언어로 포팅되어 GTA의 차량 움직임을 구현하는 데 쓰였습니다. 즉, 지금 우리가 아는 GTA 시리즈 특유의 차량 조작감은 1996년 한 주말 동안 만들어진 개인 프로젝트에서 출발한 셈입니다.
다만 글쓴이는 이 재현 프로젝트가 저작권이나 상표권을 침해하지 않는 방식으로 만들어졌다는 점을 명확히 밝히고 있으며, “Grand Theft Auto” 프랜차이즈와 퍼블리셔 Take-Two, 개발사 Rockstar Games와는 전혀 관계가 없는 독립적인 작업임을 별도로 고지하고 있습니다.
단순한 점 물리가 아닌 강체 역학을 택한 이유
이 시뮬레이션의 핵심은 고전적인 2D 강체(rigid body) 역학입니다. 원작자에 따르면 1996년 당시 대부분의 게임은 F=ma 같은 고등학교 수준의 “점 물리(point physics)”로 물체의 움직임을 계산하고, 회전은 여러 임기응변적인 꼼수로 처리하는 경우가 많았다고 합니다. 반면 이 프로젝트는 토크(torque)를 포함한 제대로 된 강체 역학을 적용해 회전 움직임을 훨씬 일관되게 표현했습니다.
이 강체 역학 위에 추가로 얹은 것이 타이어가 어떻게 움직이는지를 단순화해서 근사한 모델입니다. 글쓴이 스스로 “물리적으로 정확하지는 않은, 반쯤 교육적인 추측”이었다고 인정하면서도, 당시 목적에는 “충분히 괜찮았다”고 회고합니다. 정밀한 타이어 물리 공식 대신 경험적으로 그럴듯하게 느껴지는 근사치를 사용했다는 점이 이 시스템의 독특한 지점입니다.
브릭, 쉽, 카 세 가지 모드로 보는 개발 과정
재현된 데모에는 세 가지 모드가 있습니다. 키보드 숫자 1, 2, 3 또는 설정의 모드 선택기로 전환할 수 있습니다.
- Brick(벽돌): 가장 단순한 형태로, 포인터 드래그로 힘을 가하는 기본 강체 모델입니다. 원작자는 원래 시뮬레이션도 이와 비슷한 형태에서 출발했다고 설명합니다.
- Ship(우주선): 특정 지점에 추진력을 더한 형태로, 1986년 고전 게임 “Thrust”를 의도적으로 연상시키도록 만들었다고 합니다.
- Car(자동차): 엔진 힘과 조향, 그리고 네 바퀴 위치에서 저항력을 적용해 실제 차량처럼 느껴지도록 마지막에 추가된 단계입니다.
이 세 모드는 단순한 변형 옵션이 아니라, 하나의 범용 강체 시스템에 기능을 단계적으로 얹어가며 “자동차답게” 만들어간 개발 과정 자체를 보여주는 구성입니다.
입력, 시뮬레이션, 렌더링을 분리한 구조
이번 자바스크립트 재현 버전은 역할을 세 영역으로 분리해 설계했습니다. 브라우저 인터페이스가 컨트롤 입력을 담당하고, 시뮬레이션은 고정된 시간 간격(fixed time step)으로 진행되며, Canvas 렌더러가 그 결과를 화면에 그립니다. 이렇게 역할을 나누면 버튼 입력이 어떻게 힘으로 바뀌고, 그 힘이 어떻게 움직임으로 이어지는지 흐름을 따라가기 쉬워진다고 글쓴이는 설명합니다.
차량 객체 자체도 구조적으로 나뉘어 있습니다. 화면에 보이는 형태와 충돌 영역을 정의하는 “셸(shell)”과 강체, 그리고 행동 방식을 결정하는 “다이내믹스(dynamics)” 객체로 구성됩니다. Brick은 드래그 입력을 받고, Ship은 특정 지점에서 추력을 더하며, Car는 엔진 힘과 조향에 더해 네 개 타이어 위치에서 저항을 계산하는 식으로 모드마다 다이내믹스 레이어만 달라지는 구조입니다.
직접 조작하며 체감할 수 있는 요소들
실제 플레이 화면에서는 모바일 터치 컨트롤도 지원하며, 몇 가지 설정을 토글할 수 있습니다. “B” 키는 플레이필드 가장자리의 충돌 벽을 켜고 끄고, “G” 키는 수직 중력을 토글합니다(이 옵션은 Ship과 Brick 모드에서 의미가 있습니다). 카메라 쪽에서는 “Z” 키로 카메라가 차량을 따라가기 시작하는 기준 범위인 “데드존”을 바꿀 수 있고, “X” 키는 속도에 따라 카메라가 뒤로 빠지는 줌 기능을 켜고 끌 수 있는데, 이는 실제 GTA에서 볼 수 있는 연출과 동일한 아이디어라고 설명되어 있습니다.
한국의 게임 개발자나 물리엔진에 관심 있는 프로그래머 입장에서는, 거대한 상용 게임의 핵심 메커니즘이 사실은 개인이 만든 단순한 강체 시뮬레이션에서 출발했다는 점, 그리고 완벽하게 정확한 물리 공식보다 “적당히 그럴듯한” 근사 모델이 실제 게임 플레이감에는 더 중요할 수 있다는 점을 참고할 만합니다. 소스 코드 공개 여부는 발췌 내용만으로는 확인되지 않으므로, 직접 사이트에 방문해 구조도와 데모를 확인해보는 것이 가장 정확합니다.
원문: 2D Vehicles

답글 남기기