spaci***
2020-11-19

386 시절 PC 하드웨어는 파편화에 시달렸고 여러 한계가 존재했지만, 이드 소프트웨어는 이를 극복하고 로 FPS의 문을 활짝 열어젖혔다. 이 책은 가 만들어진 모든 과정을 밝히며 게임 엔진 소스를 낱낱이 파헤친다.
존 카맥이라고 하면 게임업계에서 최초로 3D구현을 한 인물로 유명하다. 울펜슈타인, 퀘이크, 둠 시리즈를 만들어 낸 분이시다. 여기서는 가장 먼저 구현한 울펜슈타인이 어떻게 386컴퓨터 사양 안에서 최적화 되어 동작하는지를 소개하고 있다.
어셈블리어를 사용하는 것은 기본이고 각종 최적화 노하우가 담긴 트릭을 사용하여 컴퓨터의 한계를 극복하였다. 내가 알기로 당시 컴퓨터과학자들이 3D게임을 만들어 내기엔 컴퓨터 사양이 부족하다고 얘기 했다고 알고있다. 이 것이 가능하다는 것을 보여준 인물이 바로 존 카맥이다.
울펜슈타인 역시 3D게임의 가장 기본이 되는 레이트레이싱 기법을 사용하여 구현이 되어 있다. 시야 각도 내의 모든 각도로 가상의 빛을 쏴서 충돌지점을 찾는 것이다. 고등학교 수학의 평면과 직선의 방정식을 이용하면 처리가 가능하다. 요즘 같이 GPU, CPU의 여건이 된다면 충돌지점에서 다시 빛의 반사 각도를 계산하여 빛을 더 쏠 수도 있다. 이것은 3D 렌더링의 기본이 된다고 알고 있다.
CPU와 부동소수점의 동작방식, DOS와 MDIR을 사용한 세대라면 알 수 있는 EMS, XMS메모리, AUTOBATS.BAT 파일에서의 사운드블라스터 드라이브 설정등의 이야기도 다루고 있다. 그렇다보니 디바이스 통신을 위한 인터럽트를 처리라던가 EGA, VGA 그래픽 모드처리에 대한 이야기도 나온다.
모든것을 총 망라해, 가장 대단한 것은 이 모든것이 640kb 내의 메모리에서 동작한다는 것일 것이다.
내 경우 슈퍼닌텐도가 386컴퓨터 보다 더 좋은 성능을 가지고 있다고 생각했는데 슈퍼닌텐도에서 울펜슈타인을 구동하기 위해 맵을 BSP 최적화해야 했었다는 것을 읽고 슈퍼닌텐도로 재미있는 많은 게임들을 했지만 386컴퓨터가 성능이 더 좋다는 것을 처음 알게 되었다.
단순히 픽셀을 찍고 직선과 평면의 방정식을 적용하여 3D게임을 만들라고 하면 울펜슈타인이 이슈가 될 일은 없었을지도 모른다. 그러나 울펜슈타인이 대단한 것은 존 카맥의 각 종 아이디어에서 비롯한 최적화 노하우가 적용되어 비로소 게임이 동작할 수 있었다는 것이 아닐까 생각된다.
내 경우 어셈블리로 된 코드는 그냥 넘겨 읽었다. 물론 머리 싸움하며 독해를 하면 더 좋겠지만, 존 카맥이 어떤 성능 문제에 봉착했고 그것을 어떻게 해결했느냐의 이야기를 읽어가는 것만으로도 충분히 괜찮다고 생각이 들었기 때문이다.
이 책을 읽고 많은 개발자 분들이 추억의 DOS 게임 개발의 향수를 느끼심과 동시에 최적화 전략의 노하우를 알아가시면 좋겠다.