<게임 엔진 블랙 북:둠> 을 읽고 개인적인 감상을 남긴 독후감입니다.
'게임 엔진 블랙 북: 둠'은 예전에 선물 받아 잠시 읽다가 덮어 놓았던 책이다. 이 책은 1993년 12월 출시해 전 세계적인 히트를 쳤던 게임 '둠(DOOM)'의 개발 환경과 그것으로부터 파생된 게임 내부 엔진의 구조, 개발 비화 등을 상세히 설명한 책인데 당시의 물리적/시간적 제약 속에서 이드 소프트웨어 개발자들이 어떠한 고민을 했고, 그 결과를 어떻게 코드에 담아냈는지를 알 수 있는 책이었다.
90년대의 소프트웨어 개발 환경은 지금과는 상상도 할 수 없을 정도로 열악했다. 메모리는 한 자리수의 MiB단위가 당연한 시대였고, 16MiB 램이 꽃혀 있던 넥스트사의 워크스테이션은 초 고성능 컴퓨터로 여겨졌다. 둠을 개발하기 직전 출시한 인텔의 486 CPU에는 그제서야 최초로 캐시라는 아이디어가 도입되었고, CPU의 주파수는 MHz단위였다. 여전히 성능을 요하는 코어 시스템은 어셈블리어를 이용해 개발해야 했으며, CPU/VGA 아키텍처의 춘추전국시대와도 같던 환경은 코드 호환성과 컴파일러에 많은 신경을 쓰도록 강제했다. 심지어 CPU는 부동 소수점 연산 자체를 지원하지 않았고 이를 지원해 주는 보조 프로세서도 없었으며(따라서 개발자들은 실수 연산을 위해 정수 연산을 그럴듯하게 실수 연산으로 꾸며 수행할 필요가 있었다. 그리고 이를 해결하는 대표적인 방법이 고정소수점 연산이다), 그래픽 시스템에는 더블 버퍼가 존재하지 않고 유일한 버퍼마저도 모니터와 종횡비가 달라 이미지 왜곡이 일어나기 일쑤였다.
그러다 보니 PC 게임을 개발한다는 것은 매우 힘든 일이었고, 거의 모든 게임이 콘솔 기반 게임으로만 개발되던 시기였으며, 그렇기 때문에 PC 게임 개발을 위한 문서는 더더욱 찾기 힘들던 시대였다.
그렇지만 당시 이드 소프트웨어 개발자들은 이러한 환경 속에서도 뛰어난 게임을 만들어 냈다. 맵 렌더링 속도 향상을 위해 종이 논문을 뒤져 가며 이진 공간 분할법(BSP)을 적용하고, 멀티스레드나 멀티프로세스를 지원하지 않던 MS-DOS 환경에서도 비디오와 오디오 동시 출력을 달성하기 위해 tick count를 기반으로 오디오 재생 인터럽트를 생성해 이를 지원할 수 있도록 했다.
전자는 지금 보아도 감탄을 자아내는 훌륭한 기술 적용의 사례이고, 후자는 어떻게 보면 일종의 꼼수와도 같은 사례이다. 이러한 사례들에 대해 당시 이드 소프트웨어의 리드 프로그래머 존 카맥은 다음과 같은 말을 남겼다.
"<둠>에는 여러 교묘한 꼼수가 똑똑하게 배치되어 있었고 이것들은 <둠>을 최대한 멋져 보이게 했다.
많은 플레이어가 실제보다 더 많은 것이 동작한다고 착각했다는 사실은 의사결정의 품질이 좋았음을 뜻하는 증거다.
이것이 바로, 오늘날에도 여전히 중요하게 여겨져야 할 핵심 교훈이다. 제약에 비해 엄청난 이점을 얻을 수 있는 트레이드오프(tradeoff)가 종종 존재하는데, 이 제약은 훌륭한 디자인을 통해 성공적으로 덮을 수 있었다."
-존 카맥
그렇다면 이 책을 읽는 현대 시대의 프로그래머는 당시의 훌륭한 기술과 소비자들을 매료시킨 기술적 꼼수들을 어떻게 받아들여야 할까?
실시간 3D 렌더링을 넘어서 실시간 레이트레이싱까지 손쉽게 처리해내는 강력한 GPU, 기초적인 그래픽 지식마저 없어도 누구나 게임을 만들 수 있도록 도와주는 유니티, 언리얼과 같은 강력한 게임 엔진들이 등 뒤에서 꿋꿋이 버텨 주는 현대의 개발자들이 어셈블리어와 C언어, 바이트(메가바이트가 아니다. 바이트!) 단위의 메모리 공간과 씨름하며 추상화의 가장 낮은 밑바닥에 켜켜이 쌓인 기술들을 이해할 필요가 있을까?
컴퓨터공학의 길을 걸어가는 모든 개발자들은 본인들에게 주어진 자원이 무한하지 않다는 것을, 그리고 앞으로도 그렇지 않을 것이라는 것을 누구보다 잘 알고 있다. 당시에도, 현재에도 개발을 한다는 것은 제약과 씨름한다는 뜻이며, 이러한 제약 속에서 창의력이 발휘되기 마련이다.
사무용 컴퓨터인 IBM PC라는 제약 속에서 재미있고, 모두에게 사랑받을 3차원 게임을 돌리겠다는 목표와 열정으로 이드 소프트웨어의 구성원들은 기존과 다른 획기적인 돌파구들을 마련해냈다. 이처럼 가혹한 상황에서 창의력에는 불이 붙고 제약을 뛰어넘기 위한 기발한 아이디어가 꼬리에 꼬리를 물고 떠오르기 마련이다.
같은 맥락에서, 당시 이드 소프트웨어의 프로그래머였던 데이브 테일러는 머리말에 이러한 제약과 창의력에 대해 다음과 같은 말을 남겼다.
"나는 위대한 제품 뒤에 숨겨진 기술을 매력적이라고 생각하지만, 그 기술로 이어지게 된 '조건'에 더욱 매료되는 편이다."
-데이브 테일러
또, 개발 이전에 게임이라는 그 자체에 대해서도 생각해보자. 게임을 만들 때의 핵심은 '재미있는가?'이다.
아무리 좋은 그래픽 카드와 넉넉한 메모리를 등에 업고 훌륭한 그래픽과 사운드의 게임을 만든다 해도 재미가 없다면 그 누구도 그 게임을 사랑하지 않을 것이다. <둠>의 각 레벨에는 이러한 것들을 끝없이 신경쓰며 고민한 당시 제작자들의 철학이 담겨 있다.
그리고 그 철학이 녹은 레벨 하나하나는 지금 <둠>을 플레이해도 전혀 게임이 촌스럽게 느껴지지 않게 하는 이유가 된다.
이 책의 옮긴이는 이 책으로부터 독자가 가장 우선적으로 얻어야 할 것을 다음으로 꼽았다.
"기술에 매몰되지 않으면서도 원하는 게임을 구현하기 위한 기술을 중요하게 생각하는 자세, 이것이 바로 이 책에서 얻어야 할 가장 큰 교훈이다."
현재의 CPU는 GHz의 클럭 속도로 명령어를 수행한다. 슈퍼스칼라는 당시와는 비교도 할 수 없게 정교하게 동작하며, GPU는 인공지능의 트레이닝에도 이용할 수 있을 정도로 빠르고 강력한 병렬 성능을 가지게 되었다. 모든 가정용 컴퓨터라면 무릇 16GiB이상의 램은 장착해야 한다는 것이 컴퓨터 하드웨어에 무지한 사람들에게도 당연한 생각이 되었다.
따라서 나는 이렇게 생각한다. 단순히 기술에 대해 공부할 목적이라면 이 책을 읽는 것은 현 시대에 큰 도움이 되지 않을 것이다. 그러나 '제약'속에서 자신들의 열망을 구체화하기 위해 치열하게 고민하고 노력한 이드 소프트웨어 개발자들의 분투와 그 철학이 녹아든 제품의 면면을 살펴본다는 것은 이 책이 독자에게 선사하는 가장 매력적인 선물이 아닐까라고.
앞서 말했듯 <둠>은 비평가와 플레이어 모두에게 사랑을 받았고, 엄청난 성공을 거뒀다. 9달러 정가의 게임은 한 때 전 세계에서 마이크로소프트의 윈도우 운영체제보다 더 많은 컴퓨터에 설치되었고, 이드 소프트웨어의 개발자들은 서로 자신들의 길을 향해 흩어졌지만 <둠>이라는 게임은 그들 모두에게 인생의 업적으로 남게 되었다.
이드 소프트웨어는 그 당시 규모가 크진 않지만 훌륭한 기술력을 가진 회사였다. 전설적인 프로그래머 중 한명으로 컴퓨터공학의 역사에 남을 존 카맥이 리드 프로그래머로 존재했고, 게임 디자인계에서 그와 비등할 정도로 걸출한 게임 디자이너이자 프로그래머인 존 로메로도 그와 함께했다.
그러나 이 책의 글쓴이는 기술력만으로 <둠>의 성공을 모두 설명할 수 없다고 주장하며, 그 근거를 480쪽에 가까운 이 책을 통해 제시한다.
이 책의 머리말을 장식해 준 당시 <둠>의 리드 디자이너였던 존 로메로는 다음과 같이 말했다.
"...1993년은 다른 어느 때보다 마법 같은 해였다. 우리가 상상한 그 이상의 좋은 게임을 만들기 위해 팀으로서 도전한 유일한 시간이었다. <둠> 이전에도, 그 이후에도 이처럼 치열하게 도전한 적은 없었다. 야망을 품을 적절한 시점이었다."
-존 로메로
로메로의 말을 직접 빌려 누구보다 원하는 목표를 위해, 그리고 좋아하는 일을 위해 열정을 가지고 도전하는 것, 그것이 당시 이드 소프트웨어 개발자들 모두가 공유한 마음가짐이었기에 어떤 지구상의 게임보다 <둠>이 성공할 수 있었던 것이라고 책에서 말하는 글쓴이는 <둠>의 소스 코드 만큼이나 자신의 개발 인생에 큰 영감을 준 『그래픽 프로그래밍 블랙 북』의 저자인 마이클 아브라시의 말을 책의 마지막에 옮겨 놓았는데, 나 역시 이 문장을 마지막으로 옮긴 후 글을 마치겠다.
"사랑하는 일에 임하고, 가능한 한 최선의 노력을 다한다면, 결국에는 좋은 일이 생길 겁니다. 쉽거나 빠르지 않다고 해도, 끝까지 버틴다면 좋은 일은 반드시 다가오는 법이니까요."