관심있는 것들 정리

[리뷰] 게임엔진 블랙 북: 울펜슈타인 3D 본문

카테고리 없음

[리뷰] 게임엔진 블랙 북: 울펜슈타인 3D

내공강화 2020. 11. 22. 01:01

예전에 Virtua Fighter라는 게임이 처음 나왔을 때, 3D 그래픽이 정말로 놀랍다 생각했었다. 그러면서 점점 더 게임 그래픽이 발전해 요즘 나오는 게임들을 보면, 이렇게 잘 구현할 수도 있구나 하는 것을 느낄 때가 많다. 그럴 때마다 드는 생각은, 이렇게 구현을 하려면 얼마나 많은 사람들이 게임 엔진을 수정하고, 그래픽 작업을 하며, 여러가지 버그를 잡기 위해 밤을 새며 작업을 했을까 이다. 사실, 게임뿐만 아니라 다른 분야에서도 프로그램 작성을 하고 나서 성능 최적화를 위해 많은 고민을 하며 코드를 수정하는 일을 한다. 정해진 성능을 맞추기 위해, 많은 아이디어를 도출해 어떻게든 요구사항을 맞추는 것이 정말 어려운 일이다. 이 책을 읽으면서, 당시 이드 소프트웨어 개발자들도 동일한 과정을 겪으며 많은 노력이 있었을 것이라는 생각이 들어, 재미없는 이야기로 리뷰를 시작했다.
이 책을 읽기 시작하면서, 오래전 구조는 모르지만 어떻게든 게임을 실행하기 위해, 640K밖에 되지 않던 메모리를 늘려보겠다고, batch 파일의 내용을 최소화 하거나 EMM386을 실행하여 메모리를 확보하려고 했던 생각이 났다. 당시에 리얼모드, 프로텍티드 모드와 같은 것도 몰랐고, 왜 프로그램이 메모리가 없다고 동작을 안하는 지도 모르고 무작정 여기저기 잡지를 보며, 친구들에게 물어가며 게임 실행하는 방법을 익혀서, 불법 소프트를 돌리곤 했었다. 이 책은 그런 시절에 주를 이루던 2D게임이 아닌 당시에 생소했던 3D 게임을 구현하기 위해 많은 노력을 한 내용들이 포함되어 있다.
이 책은 전반적으로, i386이라는 느린 CPU, 적은 메모리, 그리고 느린 그래픽 카드를 이용해 프로그램을 작성하였는 지에 대해 많은 양을 할애하고 있다. 당연한 이야기이겠지만, 그러기 위해서는 하드웨어에 대한 지식이 필수이고, 지금과 같은 최신 하드웨어와는 다른 오래전 구조에 대한 이해를 위해 여러가지 친절한 그림을 이용해 왜 이렇게 구현을 해야만 했는지 설명이 잘 되어 있다. BIOS 서비스를 이용하거나 video card의 동작 구조에 맞춰 화면을 그리는 방법, 부동 소수점 연산을 빠르게 처리하기 위한 트릭 등 느린 하드웨어를 극복하기 위한 방법 뿐만 아니라, 제한된 성능 상에서 ray tracing을 어떤 식으로 구현을 한다 던지 그에 대한 문제점을 극복하기 위한 또 다른 방안에 대해서도 다루고 있다.  또 이 책을 읽으면서 안 사실이지만, PC 뿐만 아니라 여러 콘솔 게임기와 아이폰에도 울펜슈타인이 포팅되었고, 포팅 시, 각 플랫폼에 따라 문제점을 어떤식으로 해결해 나갔는 지에 대해서도 책에서 언급을 하고 있다.
이 책을 읽으면서 흥미로웠던 또 다른 부분은, i386 시절 PC 하드웨어를 제어하는 방법을 어느 정도 함께 이해할 수 있는 부분이다. 그래픽 카드의 제어 뿐만이 아니라, ISR에 대한 내용도 그렇고, 애드립이나 사운드 블래스터와 같은 사운드 카드 제어에 대해서도 일부 다루고 있다. 키보드와 마우스 그리고  간단한 조이스틱 제어에 대해서도 다루고 있다. 굳이 OS의 가장 원시적인 부분들을 공부하기 위해 찾아보지 않는다면, 그 다지 볼 일이 없을 수 있는 원리들일 수 있지만, 울펜슈타인 3D 자체가 골동품 수준의 오래전 게임이다보니, 이런 부분들이 함께 다루어져 있고, 관련 내용들을 그림과 설명을 통해 볼 수 있어서, 더 관심을 가지고 읽어볼 수 있었다.
이 책은 독자에 따라, 다양한 의견이 있을 수 있을 것이라는 생각이 든다. 개발을 하면서 아이디어를 얻기 위한 분이라면, 이 책은 제한된 상황에 대해 어떻게 접근을 하면서 문제를 해결해 나가는 지에 대해 또 다른 아이디어를 줄 수 있으리라 생각이 든다. 하지만 코드를 잘 모르거나, 또 C/C++, 어셈블리(특히 이 책에 실려있는 코드는 16 bit Intel assembler가 많다)에 익숙치 않은 분들은 책의 재미가 떨어질 수 있다는 생각이 든다. 

반응형