TECH 으로 돌아가기
TECH HACKER NEWS 오늘 7분 읽기 25 READS

1996년 주말에 만든 2D 물리 프로토타입, 30년 만에 웹으로 돌아오다

1996년 주말에 만든 2D 물리 프로토타입, 30년 만에 웹으로 돌아오다
SOURCE IMAGE · HACKER NEWS

게임 역사에서 특정 기술이 어디서 처음 자리를 잡았는지 추적하기란 쉽지 않다. 개발자 팻 커(Pat Kerr)가 공개한 'Motion Lab'은 그런 희귀한 사례를 직접 만져볼 수 있게 해준다. 그는 1996년 8월 말의 한 주말에 2D 물리 시뮬레이션을 작성했고, 이 코드가 훗날 대중적으로 성공한 게임 'Grand Theft Auto(GTA)'의 차량 시스템의 토대가 되었다고 설명한다. 시작은 아타리 ST 가정용 컴퓨터에서 GFA BASIC으로 짠 작은 와이어프레임 데모였고, 이후 실제 게임에 쓰기 위해 C로 포팅되었다. 이번 공개본은 그 30주년을 맞아 자바스크립트로 다시 만든, 조금 더 보기 좋은 '리마스터' 버전이다.

흥미로운 점은 저자가 GTA 프랜차이즈 및 퍼블리셔(Take-Two), 개발사(Rockstar Games)와 아무런 제휴 관계가 없음을 자발적으로, 다소 과장된 어조로 거듭 강조한다는 것이다. 즉 이 재현물은 저작권이나 상표를 침해하지 않는 독립 결과물로 제시된다. 실무자 입장에서 중요한 것은 이 작업이 '어떤 게임의 일부'라는 명성보다, 당시로서는 흔치 않았던 설계 선택이 지금도 교과서적으로 읽힌다는 점이다.

핵이 된 강체 물리

시뮬레이션의 중심에는 고전적인 2D 강체(rigid body) 동역학이 있다. 저자에 따르면 당시 게임들은 대부분 고등학교 수준의 점 물리(F = ma)에 의존했고, 회전 요소는 여러 어설픈 '핵(hack)'으로 처리하는 경우가 많았다. 반면 토크까지 포함한 제대로 된 강체 물리를 쓰면 회전을 훨씬 일관되게 다룰 수 있다. 강체는 위치·속도와 함께 각도·각속도를 추적한다. 무게중심을 지나는 힘은 운동을 바꾸고, 중심에서 벗어난 힘은 물체를 회전시킨다. 시뮬레이션은 힘과 토크를 합산해 속도를 갱신한 뒤 위치와 각도를 전진시키며, 이 과정은 고정 시간 간격(fixed time step)으로 진행된다.

그 위에 올라간 것이 저자가 '새로운' 차량 시뮬레이션 계층이라고 부르는 부분이다. 타이어 거동을 단순하고 근사적이며 기술적으로는 부정확한 모델로 표현한 것인데, 저자 스스로 물리적으로 정확하지 않다는 것을 알면서도 '그 목적에는 충분히 좋은' 반쯤 교육받은 추측이었다고 인정한다. 각 타이어에서 그 지점의 속도를 측정해 바퀴가 향한 방향과 옆 방향 두 성분으로 분해하고, 구르는 방향에는 약한 저항을, 옆 방향에는 훨씬 강한 저항을 가한다. 조향은 앞바퀴의 방향을 바꿔 그 힘으로 차체를 돌리고, 핸드브레이크는 뒷바퀴의 구름 저항을 키우고 옆 방향 접지를 줄인다.

단순함이 만든 '충분히 좋은' 감각

주목할 대목은 이 저항력이 속도에 비례하며 힘의 상한(cap)이 없다는 점이다. 저자는 이것이 실제 타이어 마찰이나 슬립, 가용 접지력을 설명하는 모델이 아니라 편의적인 감쇠 모델이라고 분명히 밝힌다. 그런데도 바퀴가 옆 미끄러짐에 저항하는 유용한 '느낌'을 아주 적은 장치로 만들어낸다. 물리적 정확성과 플레이 감각은 다른 문제이며, 적은 복잡도로 원하는 체감을 얻는 선택이 때로 더 합리적일 수 있다는 엔지니어링 교훈이 여기에 담겨 있다.

구조적으로도 참고할 점이 있다. 하나의 차량은 강체와, 표시 형태·충돌 형상을 기술하는 '셸(shell)', 그리고 거동을 공급하는 동역학 객체의 조합으로 이루어진다. 모드를 바꾸면 차체의 위치와 운동 상태는 보존한 채 셸과 거동만 교체된다. 가장 단순한 '벽돌(Brick)'은 포인터 드래그로 힘을 받고, 1986년 고전 게임 'Thrust'를 연상시키는 '우주선(Ship)'은 부착점에서 추진력을 더하며, '자동차(Car)'는 엔진력과 조향에 네 타이어 위치의 저항을 추가한다. 동일한 물리 핵을 공유하면서 힘을 적용하는 방식만 달리하는 셈이다. 브라우저 인터페이스가 입력을 공급하고, 시뮬레이션이 상태를 전진시키며, Canvas 렌더러가 결과를 그린다는 역할 분리는 버튼 입력이 힘으로, 힘이 다시 움직임으로 바뀌는 흐름을 따라가기 쉽게 만든다.

충돌 처리 역시 의도적으로 소박하다. 도형이 가장자리를 넘으면 안쪽으로 되돌리고, 벽을 향해 움직이고 있을 때만 접촉 임펄스를 가한다. 중심에서 벗어난 충격은 속도와 회전을 동시에 바꾼다. 이는 마찰이 없는 가장자리를 가진 단순한 장벽 솔버일 뿐 범용 충돌 시스템은 아니다. 다만 평평한 면이 벽에 닿을 때 한 모서리를 고르는 대신 접촉점들의 중간점을 쓰도록 해, 인위적인 회전이 생기는 것을 막은 세부 처리는 눈여겨볼 만하다.

결국 Motion Lab은 화려한 신기술이 아니라, 제약이 심했던 환경에서 핵심 모델을 바르게 고르고 나머지는 과감히 근사한 설계의 기록이다. 한국의 개발자가 얻을 것은 '정확한 물리'가 아니라 목적에 맞는 추상화의 수위를 정하는 감각이다. 책임 분리, 고정 시간 간격, 상한 없는 감쇠 같은 선택들은 한계를 분명히 인지한 상태에서 내려졌고, 저자가 그 한계를 숨기지 않고 서술한다는 점에서 오히려 더 신뢰할 만한 참고 자료가 된다. 모바일에서는 터치로도 직접 조작해볼 수 있으니, 설명을 읽는 데 그치지 말고 각 모드를 번갈아 조작하며 코드 구조를 머릿속에 그려보는 편이 이 공개의 의도에 가장 가깝다.

SOURCE · HACKER NEWS
원문 전체 보기 → https://patkerr.co.uk/2d-vehicles/
SHARE
NEXT · CHOOSE

변화를 읽었다면,
내가 만들 수익 구조를 고릅니다.

정보를 더 모으는 데서 멈추지 않고, 광고·외주·판매·중개·구독 중 내 상황에 맞는 출발점을 정해보세요.

21가지 수익 구조 살펴보기 →
처리 중...