1994년 조너선 멘도사의 『DOOM Survivor’s Strategies & Secrets』 출판을 위해 이드소프트웨어의 세 구성원은 자신의 전문 분야에 대한 에세이를 작성했다. 존 카맥은 엔진에 대해, 샌디 피터슨은 지도 디자인에 대해, 케빈 클라우드는 컴퓨터 아트에 관해 썼다. 조너선 멘도사의 허락으로 그 글들을 소개한다.
· · ·
1. 게임엔진 by 존 카맥
1.1 목표
빠른 속도
<둠>은 인터랙티브 게임이므로 최소한 10fps 이상의 속도로 재생해야 마땅하다. 우리의 대상 고객은 386/33보다 빠른 컴퓨터를 보유한 사람들이다. 선택 가능한 세부 사항과 화면 크기를 사용하면 속도가 느린 컴퓨터라고 할지라도 시각적 충실도를 희생해 괜찮은 속도를 얻을 수 있다. 고성능 컴퓨터로 가면, 빠른 펜티엄 컴퓨터는 대다수 상황에서 최대 속도인 35fps로 <둠>을 실행할 수 있다.
자유로운 형태의 기하학적인 구조
모든 직전 게임은 ‘타일 기반’으로, 이는 세계가 미리 만들어진 데이터에서 선택된 고정 크기 블록으로 나누어져 있음을 의미한다. 타일 기반 세계의 장점은 단순한 타일을 여러 번 반복하는 방법으로 빠르고 쉽게 만들 수 있다는 것이다. 그러나 독특한 영역이나 각진 복도를 가진 레벨을 만들려면 수천 개의 작은 기하학 타일이 필요할 수 있다. 우리는 블록 기반 세계에 제약을 받지않고 레벨을 디자인할 수 있는 능력을 원했다.
무한한 시야 거리
대다수 3D 게임은 특정 거리 내의 물체만이 그려진다. 이것은 렌더링 알고리즘을 단순화하지만, 시야의 수평선이 급속도로 희미해지거나(<울티마 언더월드>와 <섀도캐스터>) 또는 원거리에서 점으로 보이다 점점 커지는 대신 물체가 시야에 갑자기 들어오는 바람에 당황하게 만드는(대다수 비행 시물레이터와 자동차 게임) 문제를 야기했다.
1.1 목표
빠른 속도
● 게임 세계의 환경을 그리기 위한 렌더링 엔진 개발
● 게임용 데이터를 만드는 데 사용되는 유틸리티 개발
● 게임 세상에서 사물의 상호작용을 지배하는 세계 모델 개발
● 새로운 상황이 발생할 경우 코드 조율과 수정
핵심 게임 코드는 C 코드 30,000줄 미만으로 구성된다. 도스 버전에는 어셈블리어로 만든 세 개의 함수(수평 텍스처 맵, 수직 늘이기, 조이스틱 읽기)가 존재한다. 사운드 코드는 외부 계약 개발자가 개발했다. 거의 모든 프로그래밍 작업을 위해 넥스트스텝 시스템을 활용했다는 것이 개발 전략의 핵심이다. 도스에서 작업했다면 제약이 있었을지도 모르는, 상당히 풍부한 작업을 가능하게 만들었다.
이 게임은 넥스트스텝의 윈도에서 쉽게 디버깅하거나 도스에서 전체 화면으로 실행되도록 재 컴파일할 수 있게 구성되었다. 실제로 렌더링 엔진은 주로 집에 있는 흑백 넥스트스테이션에서 개발되었다. 그래픽은 그레이스케일grayscale, 8비트 컬러 또는 12단계 두 색 컬러(넥스트스테이션 전용 컬러)로 그릴 수 있게 구성했다. PC 화면 크기에 국한되지 않고 어떤 해상도에서도 새로 고침이 가능하다. 이식 가능한 코드 개발이라는 원칙을 도입함으로써 더 나은 게임 아키텍처에 대한 통찰력을 얻었다.
나는 보통 게임 렌더링 엔진을 속도, 기능, 이미지 충실도라는 세 축으로 분류한다. 속도는 뷰 윈도 크기와 프레임 레이트 사이의 관계다. 기능은 90도 벽 지원, 경사 바닥, 가변 조명, 시야 높이 변동 등 세계 모델에 대한 제약 사항을 다룬다. 충실도는 텍스처 매핑의 정확성, 속도 향상을 위해 수행된 모든 조작, 에일리어싱 제거 등을 포함한다.
우리의 게임 디자인은 목표 플랫폼에서 게임 속도를 선택하는 작업부터 시작하여 가능한 많은 기능과 높은 충실도를 얻으려 시도한다. <둠>의 세계 형상은 벽, 평면 바닥, 천장 높이를 나타내는 2차원 선 배열로 제한된다. <둠>은 경사진 바닥, 겹치는 통로, 기울어진 벽을 그릴 수 없다. 시점에는 앞/뒤, 왼쪽/오른쪽, 위/아래, 시계 방향/반시계 방향의 네 가지 자유 축이 있다. 네 방향의 축은 예를 들어 건축 체험 프로그램에서는 중요한 제약 사항일지도 모르지만, 게임 디자인 분야에서는 엄청난 자유도를 제공했다. <둠 2>의 작업이 진행됨에 따라 이런 기능을 활용할 수 있는 새로운 방법을 계속 찾고 있다. 나는 <둠> 엔진의 충실도를 자랑스럽게 생각한다. 텍스처 매핑은 하위 픽셀 정확도를 자랑하며 거리에 따라 절충되지 않는다.
<둠>에 부과된 기하학적인 제약 때문에, 숨겨진 표면 제거 문제는 벽만 다루는 2차원 문제로 줄일 수 있다. 벽을 적절히 그린 다음, 남은 공간에 바닥과 천장을 채웠다. 이것은 임의의 3차원 렌더링 체계보다 훨씬 더 빨랐다. 숨겨진 표면 제거를 위해 <둠>이 사용한 핵심 알고리즘은 2차원 BSP 트리 탐색이다. 지도를 그린 다음에, 선을 그룹지어 섹터로 묶고, 재귀적으로 전체 지도를 볼록한 영역으로 나누는 독자적인 유틸리티에 넘긴다. 이와 같은 선행 작업에는 시간이 오래 걸리지만, 게임 실행 시간에 드는 계산 작업을 줄일 수 있다. 이런 방식을 택할 경우 게임 도중에 세계를 구성하는 선의 종단점을 조정할 수 없다는 단점이 있다. 그래서 <둠>에는 회전문이 없다.
우리에게는 게임 디자이너가 거의 1년 동안 매일 사용한 지도 편집기가 있다. 따라서 생산성을 높이기 위해 큰 노력을 기울였다. DoomEd는 세계를 구축하고 수정하기 위해 만든 넥스트스텝 애플리케이션이다. DoomEd는 하향식 관점에서 세계의 기하 구조를 디자인하고 벽, 바닥과 천장에 매핑할 그래픽을 선택할 수 있다.
게임 세계 모델은 처음부터 네트워킹을 지원하기 위해 개발되었다. 세계의 각 객체는 보너스 아이템, 괴물, 네트워크 플레이어 모두에서 동일한 루틴을 통해 처리된다. 총알 목표와 추적 호출과 같은 몇몇 세계 유틸리티 루틴은 실제로 3D 렌더링 루틴보다 훨씬 더 어렵다.
전체 프로젝트의 조율은 즐거운 게임을 만들기 위한 가장 중요한 단계다. 애니메이션 타이밍, 사운드 효과의 피치 또는 폭발하는 몸체의 움직임과 같은 미묘한 요소는 모두 사용자의 게임 경험에 영향을 미친다. 적절한 조율에는 오랜 시간이 걸리고 많은 테스트가 필요하지만 세부 사항은 정말 중요하다. 우리는 <둠>에서 흥미로운 시너지 효과를 경험했다. 이동, 전투, 환경과 관련된 여러 가지의 게임 요소가 서로를 보완해 게임이 원래보다 더 좋아졌다는 사실이 드러났다. 게임 디자인의 정상적인 과정은 영광스러운 비전에서 시작해 프로젝트가 진행됨에 따라 느리게 찢기고 천천히 현실이 된다. 원래 계획이 크게 변경되고 일부 기능이 사라졌지만 최종 제품은 초기의 기대를 넘어섰다.
1.2.1 나중에 든 생각
<둠>은 내가 작업하면서 끝까지 자랑스러웠던 첫 번째 프로젝트다. <울펜슈타인 3D>는 출시 시점까지도 만족하지 못했고, <섀도캐스터> 엔진 구현은 실망스러웠기 때문이다. 몇 가지 결함을 목격하긴 했지만, 여전히 <둠> 작업에 만족한다. 새롭게 살린 코드에는 해결되기가 쉽지 않을 버그가 몇 가지 있다. 때때로 화면 상단에서 하단으로 1픽셀 너비의 열이 늘어나는 모습을 볼 것이다. 이것은 두 종단점이 거의 동일한 극좌표의 편각으로 변형된 선을 그린 결과다. 열의 축척을 계산하는 고정 소수점 산술은 때때로 오버플로 현상이 발생하므로 열은 정상 높이의 최대 64배까지 커진다. 또한 바닥이나 천장을 거의 수직으로 자르면 때때로 오류를 보여준다.
지도 분할기에는 반올림 오류가 있기 때문에 선의 픽셀 크기 세그먼트가 먼저 등장하는 바닥과 천장 텍스처의 좁은 곳에서 잘못된 순서로 그려진다. 몇몇 그림은 게임 물체의 실제 너비보다 넓게 그려지므로 스프라이트 조각이 특정 상황에서 벽을 뚫고 보일 가능성도 있다. 저수준의 인텔 아키텍처에 더 많은 관심을 기울여 <둠>을 약 15% 더 빠르게 만들었다. 우리는 <둠>을 개 발하는 동안 많은 것을 배웠으며 다음 프로젝트에서 해야 할 새로운 일이 많다. 앞으로도 관심을 갖고 지켜봐주기를 바란다!
2. 지도 디자인 by 샌디 피터슨
<둠>의 레벨은 한 사람이 설계한 것이 아니다. 존 로메로는 1.8 단계를 제외하고 에피소드 1 ‘Knee-Deep in the Dead(무릎까지 죽음에 잠겨)’의 모든 레벨을 처음부터 만들었다. 남은 모든 레벨은 혼자서 또는 다른 사람의 초기 작업을 더 세련된 형태로 변환하는 방식으로 내가 수행했다. 다음 단락은 남은 레벨에 기여한 사람들의 이름을 언급한다.
괴물 배치를 포함하고, 벽 텍스처를 바로잡고, 수많은 작은 세부 사항을 변경하는 등. 톰 홀과 숀 그린(한 명은 전직 이드소프트웨어 기여자, 다른 한 명은 여전히 이드소프트웨어에 남아 있다)이 레벨에 상당히 많은 변화를 가했지만, 기본 아키텍처는 변경되지 않은 상태로 남아 있다.
<둠>의 통찰력 있는 플레이어라면 각 디자이너가 만든 레벨 사이에서 뚜렷한 성격 차이를 감지할 수도 있다고 믿는다. 톰 홀과 숀 그린의 경우, 이러한 차이가 살짝 흐릿해졌을지도 모른다. 레벨을 과할 정도로 편집하는 바람에, 두 사람의 독특한 스타일이 내 스타일과 어느 정도 합쳐졌기 때문이다.
존 로메로의 특별한 광기는 멈출 수 없는 괴물 무리가 플레이어 주변에 넘쳐나고, 다음에는 어떤 공포가 닥쳐올지 숙고하게끔 오랜 시간 팽팽한 침묵을 플레이어에게 수놓을 때 느껴졌다. 존 로메로는 종종 괴물을 멀리 떨어진 유리한 지점에 배치했는데, 이곳에서 괴물들은 비교적 안전한 상태에서 플레이어를 저격할 수 있었다. 존 로메로의 레벨은 특별히 유리한 지점, 교활한 비밀 영역, 다단계 액션으로 가득 차 있다.
존 로메로는 플레이어의 아드레날린이 흐르도록 하기 위해 항상 악몽 같은 피바다로 레벨을 시작했다. 맹공격에서 살아남은 후에야 휴식을 취하고 다음에 갈 곳을 결정할 수 있었다. 존 로메로의 또 다른 경향은 레벨을 선형으로 만드는 것이다. 여기저기에 존재하는 비밀 통로를 알아 내지 못했다면 존 로메로가 규정한 순서대로 레벨을 거쳐야만 했다.
내가 직접 만든 레벨은, 존 로메로의 가끔 발생하는 한바탕 공포와는 달리 등장하는 괴물을 지속적으로 조금씩 플레이어에게 제공했다. 따라서 존 로메로의 극악무도한 비밀 터널과 플랫폼 대신, 나는 부비트랩과 올가미로 플레이어를 공격하곤 했다. 전형적인 예는 E2M6에 존재하는 잘못 들어서게 만드는 출구였다. 출구처럼 보이고 출구 같은 냄새가 나지만 실제로는 출구가 아니었다.
나의 레벨은 플레이어가 혼자 남겨진 상태에서 조용히 시작되었다. 일반적으로 모서리 근처에 한두 마리의 괴물이 있었지만 존 로메로의 레벨처럼 군침을 삼키는 괴물 무리는 없었다. 내가 만든 몇몇 레벨은 상당히 선형적이지만(예를 들어 E3M1 또는 E3M4), E3M2, E2M5, E3M6 과 같은 다른 레벨은 플레이어가 원하는 곳 어디나 탐사할 수 있도록 넓게 개방된 상태로 두었다. 일부 플레이어들은 이런 유형의 자유 형식 경험을 정말로 좋아했지만, 어떤 플레이어들은 올바른 방향을 찾을 때까지 길을 잃고 혼란스러워했다.
플레이어를 위한 레벨을 디자인하는 동안에는 언제나 다음 세 가지 사항을 명심해야만 한다.
1. 어떻게 보이는가?
2. 재미있는가?
3. 정리하는 것을 기억했는가?
2.1 어떻게 보이는가?
내가 배우기 어려워했던 부분은 레벨 디자인이었다. 내가 일하고 또 일해야만 하는 동안 존 로메로는 자연스럽게 이를 터득한 듯이 보였다. 기본적인 문제는 <둠>을 위한 멋진 방을 디자인하기 위해 건축 관점으로 생각해야만 했다는 사실이다. 즉, 지도에서 선으로 이뤄진 집합이 아닌 공간 측면에서 방을 바라봐야 했다. 방에 애니메이션과 색상을 제공하기 위해 사용되는 정확한 벽 텍스처는 종종 방에 존재하는 실제 구조 구성 요소의 보조 역할을 했다. 몇몇 방은 정말 매우 좋아 보였고, 다른 방은 색상과 구조에도 불구하고 인상적이지 않았다. 예를 들어, 우리는 E1M4의 대형 입구 홀에 대해 만족하지 못했다. 그럴싸했고 재미있는 게임이 펼쳐졌지만, 왜인지 활기가 없어 보였다. 지붕에 열린 구멍을 만들고, 회의실 장식을 변경했지만, 완전히 고치지는 못했다. 결국, 우리는 고만고만한 게임이 가능하다고 결정했고 이를 그대로 두고 다른 사안으로 넘어갔다.
<둠>의 초기 디자인에서는 꼬여버린 작은 미로가 발생하곤 했다. 게임 테스트가 시작되면서, 우리는 이런 작은 미로들이 그다지 재미없다는 사실을 발견했고 대다수가 버려졌다(몇 가지 예외가 있는데, 대부분 톰 홀의 예전 레벨에 존재했다). 심지어 남아 있는 작은 미로도 대부분 변경되거나, 단순화된 형태로 남거나, 밀실공포증과 두려움을 느끼게 만들 목적으로 제공되었다(E1M4의 훌륭한 최종 미로, E3M3의 위층 미로, E3M7의 용암 미로를 확인해보자).
2.2 재미있는가?
당연한 말이지만 게임을 보기 좋게 만드는 것보다 더 중요한 것은 재미다. 재미있는 게임을 즐길 수 없다면, 얼마나 잘 보이는지는 크게 중요하지 않다. 내게 레벨의 재미를 주는 것은 초기 전체 계획과 지속적인 게임 테스트의 조합이었다.
나는 레벨을 처음 만들 때 나는 그 레벨의 전반적인 주제, 즉 플레이어가 레벨에서 얻으리라 기대하는 것이 무엇인지를 열심히 생각했다. 예를 들어, E3M5에서는 플레이어들에게 대칭적이고 이해하기 쉬운 구조를 통해 신전이나 사원에 대한 환상을 주고 싶었다. 처음 이 레벨에 들어 선 플레이어들은 순간이동, 풀려난 괴물 등으로 혼란스럽다. 하지만 곧 레벨의 전체 구조를 이해하고 쉽게 게임을 풀어갈 수 있었다. 일단 플레이어들이 배치를 이해하고 나면, 과학적이고 합리적인 방식으로 E3M5에 접근할 수 있다. 거대한 성당 레벨이 주는 감성과 괴물을 죽이는 자신의 행위 사이에서 흥미로운 대조가 발생했다.
이와 달리 E3M1의 목표는 단순히 지옥에서 기다리고 있는 경이로움으로 플레이어들을 압도하는 것이었다. 레벨은 시작부터 불길하고 무서운 이미지로 가득 차 있었고, 붉게 물든 하늘 아래 에는 임프가 쫓아왔다. 탈출구처럼 보이는 문을 여니 카코데몬이 풀려났다. 샷건을 얻을 수 있는 장소로 이어지는 다리가 무너지는 등 난관은 계속된다. 플레이어는 레벨을 돌아다니며 불길하고 이상한 광경과 공포를 계속해서 마주하고(합리적으로 구성된 에피소드 1과 2의 레벨과 비교할 때) 이는 지옥의 본성을 빠르게 가르쳐주었다.
일단 테마를 다 짜고 나서, 레벨의 작은 영역을 완성했고, 그 후 재빠르게 게임 테스트를 진행했다. 효과가 있고 괜찮아 보인다면 다음 영역을 완성하고 완성된 두 영역을 함께 테스트했다. 전체 레벨이 끝날 때까지 이 작업을 계속 반복했다.
2.3 정리하는 것을 기억했는가?
레벨이 좋아 보이고 게임이 제대로 동작한다고 해도 아직 완성된 것은 아니다. 이제 모든 것을 정리하고 확인할 차례다. 플레이어에게 충분한 탄약과 무기가 있는가? 보너스 아이템은 어떤가? 플레이어들은 무기와 보너스를 기대하며, 어려움이 닥치면 쉽게 그만둔다. 비밀 영역 표시는 했는가? 플레이어들을 즐겁게 만들기 위한 충분한 함정과 속임수를 배치했는가?
연민을 자아낼 만큼의 작은 세부 사항을 다룬 후에는 더 깊이 조사해야만 한다. 영리한 플레이어들이 전체 레벨의 모든 행동을 우회할 방법이 있을까? 그렇다면 그래도 괜찮을까? 당신이 똑똑하다면 E3M6의 거의 모든 부분을 건너뛸 수 있지만 많은 무기와 재미있는 전투를 놓칠 수도 있다. 앞의 레벨과 어떻게 어울리게 할까? B 레벨의 시작 방에 외로운 카코데몬이 한 마리 있고 A의 출구 방에서 로켓 발사기를 집어 올릴 기회가 주어지더라도 큰 문제는 없다. 반면에 로켓 발사기가 레벨 A의 맨 처음에 있는 경우 로켓을 조심스럽게 들고 있어야만 레벨 B에서 사용할 수 있어야 한다. 다시 말해, 당신은 인색함에 대한 보상을 받아야 마땅하다.
최종 레벨이 완료되면 몇 번 더 게임을 해보고 결함과 실수를 찾은 다음(나는 많은 실수를 찾았다) 진부한 변명과 함께 전달한다. 이드소프트웨어의 다른 멍청이들 말이다. 그들은 나의 불쌍한 걸음마 레벨에서의 끔찍한 잘못들을 빠르게 찾아냈고, 내가 해당 영역에 쌓아놓은 결함이 드러날 때 팀원들의 고약한 논평이나 비웃음을 피하기 위해 최대한 빨리 문제를 해결하곤 했다. 내가 씁쓸해 보이는 데에는 다 이유가 있다.
3. 컴퓨터 아트 by 케빈 클라우드
게임에서, 좋은 컴퓨터 아트는 보통 ‘아름다운 렌더링 또는 세부 사항’으로 언급되고는 한다. 그 이유는 대다수의 좋은 컴퓨터 아트가 마치 손으로 꼼꼼하게 그린 듯 보이기 때문이다. 하지만 유감스럽게도, 아름답게 렌더링된 세계는 현실보다는 종종 무대처럼 보인다. 우리는 <둠>을 통해 아름다운 세상이 아니라 더럽고 현실적이고 어두운 세상을 창조하고 싶었다. <둠>에는 아름다운 것이 없었다. 우리는 무섭고 어두운 것들을 <둠> 세계에 전달하기를 원했다.
의도한 효과를 달성하기 위해 스캔한 이미지와 손으로 렌더링한 이미지를 조합했다. 존 카맥은 비디오 이미지를 캡처해 PC 그래픽 형식으로 변환하는 퍼지 펌퍼 팔레트 숍Fuzzy Pumper Palette Shop이라는 프로그램을 만들었다. 그런 다음 이미지를 PC 미술 애플리케이션에 직접 로드해 재미있는 그래픽을 위해 필요한 모든 것(즉, 편집, 크기 조정, 색상 지정, 결합)을 수행할 수 있었다. 전반적인 효과가 다소 왜곡되어 있었지만 그게 바로 <둠>이다.
<둠>의 등장인물들은 다양한 방법(손으로 그린, 스캔한 점토 모델, 마지막으로 인조 고무와 금속 모델)을 사용해 만들었다. <울펜슈타인 3D>를 작업할 때, 우리는 등장인물의 모든 애니메이션에 대해 회전된 뷰를 생성하는 과정에서 좌절을 느꼈다. 대다수의 등장인물은 정면을 그리기는 쉬웠지만 45도 회전한 모습을 그리는 건 조금 복잡했다. 작은 나무 마네킹과 점토 500g를 사용해 모델을 직접 만들기 시작했다. 완벽한 기법은 아니었지만 우리가 일반적으로 그리지 않는 자세로도 등장인물의 형태를 잡을 수 있었다.
프로젝트가 끝나갈 무렵, 우리는 두 발 달린 동물이 아닌 괴물을 만들고 싶었다. 우리는 얼굴에 체인건이 내장되어 있으며 두뇌가 큰 생물체에 대한 아이디어를 얻었고 괴물의 몸통에는 다리가 네 개 달린 금속 기계에 큰 금속 고리 여러 개가 붙어 있으면 좋겠다고 구상했다. 우리는 이 괴물을 점토를 사용해 만들 수 없었다. 그때 그레그 펀차츠와 연락이 닿았다.
그레그 펀차츠는 모델 작성에 대한 광범위한 배경지식을 보유하고 있었다. <나이트메어>와 <로보캅> 등 영화의 클래식 세트를 작업하면서 그레그 펀차츠는 모델을 만들기 위해 필요한 도구와 재능을 키웠다. 몇 주 안에 그레그 펀차츠는 우리의 스케치를 완전히 움직일 수 있는 괴물로 만들었다. 결과물은 잘 작동했다. 비록 셰어웨어 버전의 <둠>은 그레그 펀차츠의 작품 중 하나만 사용했지만, 판매 버전은 그레그 펀차츠의 재능을 완전히 활용할 것이다.
· · ·