[동아게임백과사전] It Runs Doom! 어디서든 돌아가는 '둠'이 주는 교훈
It Runs Doom!
이는 "이거에서 '둠'이 돌아간다." 정도의 말인데요. 게임과 아무 상관 없어 보이는 각종 기기에 '둠'을 이식해 구동하는 것이 널리 퍼지며 밈으로 자리잡았죠.
정말 게임을 즐길 수 있을 것이라 생각하지 않았던 현금 인출기나, 계산기, 전자책 리더기, 노래방 기기, 애플워치는 물론 CPU와 디스플레이 그리고 입력 장치가 달린 기기라면 둠이 돌아가는 화면이 공개되며 팬들에게 즐거움을 선사하고 있습니다. 최근 닌텐도가 공개한 알람 시계 '닌텐도 사운드 클록 Alarmo'도 둠을 돌리는 일을 피할 수 없었죠.
'둠'은 이러한 비공식 이식이 워낙 많이 이뤄지는 작품인 만큼 지난 2022년에는 가장 많은 비공식 이식 버전을 보유한 게임으로 기네스 세계 기록에 등재되었습니다. 지금도 '둠'을 돌리는 기기는 조금씩 늘어나고 있죠. 이 정도면 전자 기기라면 둠이 돌아가는 것이 당연한 일이 아닐까 생각이 들기도 합니다.
그렇다면 '둠'은 왜 다양한 전자 기기에서 돌려보는 게임으로 자리 잡게 된 것일까요? 단순히 출시된 지 30년이 지난 오래된 작품이라서 쉽게 구동되는 것은 아닙니다. 둠을 개발한 이드(id) 소프트웨어 개발진이 효율성을 극대화하는 방식으로 게임을 개발했고, 다른 기기의 이식도 가능할 수 있도록 설계했기 때문입니다.
둠이 등장한 1993년 당시 PC 시장에는 이렇다 할 3D 가속 카드도 제대로 존재하지 않았습니다. 당시 시장에 자리하고 있던 486 PC의 CPU는 50Hz로 동작했고, 486보다는 훨씬 좋았던 펜티엄도 66Hz 정도에 불과했습니다. 지금 아이들이 가지고 노는 '콩순이 컴퓨터'보다도 떨어지는 성능이죠.
이러한 열악한 PC 성능에서 3D 게임을 선보이기 위해 존 카맥이나 존 로메로 같은 전설적인 개발자는 큰 노력을 기울입니다. '둠'은 주로 C 언어로 개발되었습니다. C 언어는 당시 고성능을 요구하는 게임 개발에 적합한 언어로 꼽혔는데요. 메모리 제어와 최적화된 성능을 제공하여 둠의 빠르고 효율적인 실행을 가능하게 했습니다.
그리고 1990년대 초반의 제한된 하드웨어 성능을 극복하기 위해서는 경량화된 게임을 만들 수밖에 없었습니다. 게임은 계산 속도가 빠른 정수 연산만을 사용해 개발했습니다. '둠'은 정수 연산만을 활용해 고정 소수점 방식으로 소수 연산을 피하면서 그럴듯한 3D처럼 보이는 그럴듯한 화면을 만들어냈죠. 당시 CPU로는 부동소수점 연산 자체가 불가능했을 것입니다.
정수 연산은 1, 2, 3과 같은 정수만 사용하기에 소수점이 들어간 부동소수점 연산에 비해 속도는 빠르지만, 정밀한 계산에 조금 불리할 수 있습니다. 과학적인 계산이나 그래픽, 물리 엔진 등에서는 아주 작은 값까지 정밀하게 계산해야 하기 때문에 부동소수점 연산이 사용됩니다. 비유가 완벽할지는 모르겠지만, 원의 지름을 계산할 때 3을 곱하는 것보다 3.14나 3.141592를 곱하면 더 정확한 값을 얻을 수 있는 것처럼 말이죠.
정수 연산만을 통해 게임을 구현해야 했던 '둠'은 많은 꼼수를 사용했다고 합니다. 대표적인 것이 또 이진 공간 분할(Binary Space Partitioning) 트리 기법입니다. BSP 트리는 화면에 그려야 할 벽의 순서를 효율적으로 계산하여, 복잡한 3D 장면을 빠르게 렌더링할 수 있도록 합니다.
일종의 공간 분할 기법인데요. 3D 공간에서 하나의 벽이나 평면을 기준으로 공간을 두 개로 나눕니다. 한쪽은 앞, 그리고 다른 한쪽은 뒤로 공간을 구분합니다. 그리고 이 작업을 반복해 나가면서 큰 공간을 여러 작은 부분으로 쪼갭니다. 이 분할 과정을 트리 구조로 기록해 특정 공간에 위치한 오브젝트를 찾거나 그리는 순서를 빠르게 결정할 수 있게 합니다.
이를 활용해 '둠'은 3D 공간을 제공하는 데 필요한 연산을 줄일 수 있었습니다. 어떤 물체가 어느 공간에 있는지를 BSP 트리로 빠르게 확인하고, 플레이어가 보지 않아도 되는 부분은 그리지 않도록 하여 성능을 높였다고 하죠.
여기에 사실 Z축이 존재하지 않은 2.5D 게임이었다는 이야기와 복잡한 3D 연산을 피하고도 입체적인 느낌을 전해주는 레이캐스팅 기법을 활용해 경량화를 이뤘다는 이야기도 있지만, 매번 토론이 격하게 이뤄지는 부분인 만큼 이런 이야기도 있구나 정도로 보시면 될 것 같습니다.
고효율의 엔진 구조를 가진 것도 '둠'이 가진 강점입니다. '둠'의 개발자 존 카맥은 '둠'을 개발할 때부터 '둠'의 엔진을 사용자 수정을 염두에 두고 개발했다고 합니다. '둠'을 개발한 소스 코드 및 도구가 배포되면서 더 많은 프로그래머들이 '둠'의 엔진을 만나게 되었습니다.
소스가 공개되어 있는 만큼 프로그래머들이 다양한 플랫폼에 맞춰 수정해가며 게임을 이식해 왔습니다. 이러한 모듈화된 코드는 특정 하드웨어에 맞춰 조정하기 쉬웠으며, 개발자들이 직접 하드웨어 자원을 효율적으로 활용할 수 있도록 도왔습니다.
여기에 '둠'은 여러 해상도에 맞춰 게임을 실행할 수 있는 유연성도 갖췄습니다. 해상도와 화면 크기가 작은 기기는 물론 최신 장비에서도 '둠'을 돌릴 수 있도록 해줍니다.
오늘은 디스플레이가 달린 신형 기기가 나오면 으레 등장하기 마련인 '둠'에 대해서 함께 살펴봤는데요. 90년대 제한적인 하드웨어에서도 최고의 품질을 선보이기 위해서 노력한 이드 소프트웨어의 노력이 엿보이는 부분입니다.
최근에는 정말 뛰어난 성능을 가진 그래픽 카드를 사용해도 초당 프레임 등에서 형편없는 모습을 보여주고 있는 게임들이 많아지고 있는데요. 어디서든 돌아가는 '둠'을 보고 교훈을 좀 얻었으면 하는 바람입니다.