메뉴 바로가기 검색 및 카테고리 바로가기

한빛미디어

게임 엔진 블랙 북 : 울펜슈타인 3D

한빛미디어

번역서

판매중

  • 저자 : 파비앙 상글라르
  • 번역 : 박재호
  • 출간 : 2020-10-30
  • 페이지 : 340 쪽
  • ISBN : 9791162243299
  • 물류코드 :10329
초급 초중급 중급 중고급 고급
4.5점 (13명)
좋아요 : 613

최초의 FPS 게임 <울펜슈타인 3D> 엔진 개발의 모든 것 

 

386 시절 PC 하드웨어는 파편화에 시달렸고 여러 한계가 존재했지만, 이드 소프트웨어는 이를 극복하고 <울펜슈타인 3D>로 FPS의 문을 활짝 열어젖혔다. 이 책은 <울펜슈타인 3D>가 만들어진 모든 과정을 밝히며 게임 엔진 소스를 낱낱이 파헤친다. 당시의 하드웨어와 개발 환경부터, 엔진 개발 중 직면한 다양한 문제와 해결 방안까지 체계적으로 정리했다. 전설이 된 개발자들이 온갖 제약 아래에서도 게임성을 높이기 위해 설계와 구현을 어떻게 했는지 생생히 확인할 수 있다.

 

 

[출판사 리뷰]

386의 한계를 극복하고 전설이 된 최초의 FPS <울펜슈타인 3D> 

이드 소프트웨어 천재 개발자들의 엔진 개발 비법을 파헤치다 

 

오래된 게임 개발자들 사이에선 CPU가 달린 기기를 보기만 하면 <울펜슈타인 3D>를 포팅할 수 있을지부터 떠올린다는 이야기가 있다. 당시로서 혁신적인 3D 게임플레이와 부드러운 애니메이션을 선보이며 FPS의 기념비적인 효시로 평가받는 이 게임의 탄생 뒤에는, 열악한 386 PC 하드웨어의 제약을 극복하기 위해 소프트웨어를 한계까지 밀어붙인 이드 소프트웨어의 천재 개발자들이 있었다. 

 

이 책은 <울펜슈타인 3D>가 누구에 의해 어떻게 만들어졌는지 모든 과정을 낱낱이 공개하며, 수많은 그림과 함께 게임 엔진 소스를 파헤치고 분석한다. 당시 하드웨어와 개발 환경부터, 엔진 개발 중 직면한 다양한 문제와 해결 방안까지 체계적으로 정리했다. 더블 버퍼링 없는 VGA, 정수 연산만 가능한 CPU, 파편화된 사운드 카드 등 당시 386 PC 하드웨어에서 초당 70프레임을 뽑는 게임을 만들기란 지극히 어려웠다. 이드 소프트웨어 개발자들이 이러한 한계를 어떻게 극복하여 장점으로 승화했는지, 엔진 설계 결정과 개발 과정, 그리고 ‘트릭’에 가까운 프로그래밍 기법까지, 이 책은 모든 디테일을 정교하게 추적하고 기록했다. 

 

주어진 제약 내에서 최대한의 성능을 이끌어내는 것은 모든 개발자의 과제다. 하드웨어가 아무리 발달해도 이 목마름은 멈추지 않는다. 심지어 사무기기에 불과했던 386에서 부드럽게 돌아가는 3D FPS를 꿈꿨던 사람들이 있다. 대화 상자 하나 띄우는 데에도 프레임워크의 온갖 보일러플레이트 코드에 매몰되는 오늘날, 우리는 게임 개발의 핵심이 무엇인지 잊고 있는 것은 아닐까? 불가능해 보이는 제약 속에서도 타협하지 않고 게임성을 높이기 위해 갖은 방법을 동원해 꿈을 현실로 만든 하드코어 개발자들의 개발 비법에서 통찰을 얻기 바란다. 

 

 

[추천사]

 

초보 개발자가 읽기 좋은 훌륭한 책입니다. 현대 게임의 프로그래밍 방법은 가르쳐주지 않지만, 게임 엔진 전반에 대한 가치 있는 통찰력과 기초를 제공합니다. <울펜슈타인 3D>가 만들어졌을 때 PC는 사무용 비즈니스 기계일 뿐이었어요. 이드 소프트웨어는 <울펜슈타인 3D>를 만들기 위해 많은 기술을 개발하고 요령을 사용했고, 저자는 이 모든 비밀들을 조명합니다.

- Mr. J. MCCAFFERTY (아마존 독자)

 

그저 놀랍습니다! 어떻게 386 시대에 존재했던 수많은 장벽을 깨뜨리고 문제를 해결했는지 자세히 묘사한 책입니다. 이드 소프트웨어의 팀원들과 함께 게임을 개발하고 있는 듯한 기분이었죠. 이 책을 읽으면 1990년대의 FPS, 불가능에 가까웠던 게임 엔진에 대한 지식과 더 넓은 시야를 가질 수 있습니다.

- Chrism (아마존 독자)

 

<울펜슈타인 3D>는 물론이고 DOS의 모든 즐거움과 함께했던 어린 시절이 떠오릅니다. 그야말로 환상적이었던 추억의 게임을 뜯어보며 추억에 잠겼죠. 게임을 더 자세히 이해하고 깊이 느끼고 싶은 사람이라면 이 책을 읽으세요. <둠>에 대한 비법서도 코앞에 다가왔다고 기대하겠습니다.

- John (아마존 독자)

저자

파비앙 상글라르

15년 차 베테랑 개발자. 프랑스에서 컴퓨터 과학 석사학위를 취득했다. 영어를 배우러 캐나다에 갔다가 로저스(Rogers)와 퀵플레이(QuickPlay)를 거쳐 2014년부터 구글 본사에서 소프트웨어 엔지니어로 일한다.

역자

박재호

포항공과대학교 컴퓨터공학과 학부와 대학원을 졸업했다. 임베디드 시스템 개발, 기업용 백업 소프트웨어 개발, 방송국 콘텐츠 수신 제한 시스템 개발과 운영 지원, 클라우드에서 동작하는 서비스 개발에 이르기까지 다양한 실무 경험을 토대로 고성능 고가용성 시스템을 설계한다. 코스닥 상장사 엑셈 CTO로 인공지능과 스마트팩토리 관련 개발을 총괄했으며, 전 아이콘(ICON) 치프 아키텍트로 퍼블릭 블록체인 개발과 운영에 대한 경험이 풍부하다. 집필과 번역한 책이 40여 권에 이른다. 최근에는 유튜브 채널(https://www.youtube.com/c/박재호dev)을 열고 개발자를 위한 다양한 지식을 전달하고 있다.

머리말 (존 카맥) 

머리말 (톰 홀) 

머리말 (존 로메로) 

이 책에 대하여 


Chapter 0 프롤로그

 

Chapter 1 들어가며


Chapter 2 하드웨어

2.1 CPU: 중앙처리장치 

__2.1.1 개요 

__2.1.2 인텔 80386 

__2.1.3 부동 소수점 

2.2 램 

__2.2.1 도스 제한 

__2.2.2 악명 높은 리얼 모드: 1MiB 램 제한 

__2.2.3 악명 높은 리얼 모드: 16비트 세그먼트 주소 지정 

__2.2.4 확장 메모리 

2.3 비디오 

__2.3.1 비디오 어댑터 역사 

__2.3.2 VGA 아키텍처 

__2.3.3 VGA 2차원이라는 광기 

__2.3.4 VGA 모드 

__2.3.5 VGA 프로그래밍: 메모리 매핑 

__2.3.6 VGA 프로그래밍: 모드 12h 

__2.3.7 VGA 프로그래밍: 모드 13h 

__2.3.8 더블 버퍼링의 중요성 

2.4 오디오 

__2.4.1 애드립 

__2.4.2 사운드 블라스터 

__2.4.3 사운드 블라스터 프로 

__2.4.4 디즈니 사운드 소스 

2.5 버스 

2.6 입력 

2.7 요약 

 

Chapter 3 팀

3.1 조직 

3.2 프로그래밍 

3.3 그래픽 애셋 

3.4 애셋 워크플로 

3.5 지도 

3.6 오디오 

__3.6.1 사운드 

__3.6.2 음악 

3.7 배포 

 

Chapter 4 소프트웨어

4.1 소스 코드 얻기 

4.2 첫 만남 

4.3 큰 그림 

__4.3.1 펼쳐진 루프 

4.4 아키텍처 

__4.4.1 메모리 관리자(MM) 

__4.4.2 페이지 관리자(PM) 

__4.4.3 비디오 관리자(VL & VH) 

__4.4.4 캐시 관리자(CA) 

__4.4.5 사용자 관리자(US) 

__4.4.6 사운드 관리자(SD) 

__4.4.7 입력 관리자(IN) 

4.5 시작 

__4.5.1 사인온 

__4.5.2 VGA 문제 해결 

__4.5.3 엄청난 대학살 

4.6 메뉴 단계: 2D 렌더러 

4.7 액션 단계: 3D 렌더러 

__4.7.1 프레임의 수명 

__4.7.2 3D 프레임의 수명 

__4.7.3 3D 설정 

__4.7.4 화면 지우기 

__4.7.5 CPU 문제 해결 

__4.7.6 어안 효과 교정 

__4.7.7 벽 그리기 

__4.7.8 스프라이트 그리기 

__4.7.9 무기 그리기 

__4.7.10 인공지능 

4.8 오디오와 심장박동 

__4.8.1 IRQ와 ISR 

__4.8.2 PIT와 PIC 

__4.8.3 심장박동 

__4.8.4 오디오 시스템 

__4.8.5 음악 

4.9 사운드 효과 

__4.9.1 사운드 효과: 애드립 

__4.9.2 디즈니 사운드 소스 시스템: PCM 

__4.9.3 사운드 블라스터 시스템: PCM 

__4.9.4 사운드 블라스터 프로 시스템: 스테레오 PCM 

__4.9.5 PC 스피커: 사각파 

__4.9.6 PC 스피커: PCM 

__4.9.7 PC 스피커: PWM 

4.10 사용자 입력 

__4.10.1 키보드 

__4.10.2 마우스 

__4.10.3 조이스틱 

4.11 속도 높이는 기법 

__4.11.1 cos/sin 테이블 참조 

__4.11.2 피즐페이드 

__4.11.3 팔레트 

4.12 의사 난수 생성기 

4.13 성능 


Chapter 5 속편

5.1 운명의 창 

 

Chapter 6 이식

6.1 슈퍼 닌텐도 

6.2 재규어 

6.3 아이폰 

__6.3.1 아이폰 개발 노트 (존 카맥) 

6.4 울펜슈타인 3D-VR 


Chapter 7 에필로그

7.1 그들은 지금 어디에 있을까? 

 

부록 A <울펜슈타인 3D> 이전 

부록 B XMS와 EMS 

부록 C 640KB 장벽 

부록 D CONFIG.SYS와 AUTOEXEC.BAT 

부록 E 팬들의 이메일 

부록 F 존 카맥의 출시 노트 

부록 G 20주년 기념 해설 

  • KakaoTalk_20201123_205113834.jpg

    저는 대한민국의 99%중학생이 그러듯이 게임광이였고 거기서 한발 나아가 나만의 게임을 만들어 보는것에 관심이 많았습니다. 그래서 틈날때마다 게임 프로그래밍을 했고 졸라맨 파이터같은 간단한 2D게임도 만들어보았습니다. 제가 이 책을 선택한 이유는 언젠간 한번 3D게임도 만들어보고 싶다는 생각을 했었고 이 책의 저자분이 3D게임 제작자들의 표본같은 분이시기에 내용이 알차고 많은 학습을 할 수 있을것 같아서 선택을 하게되었습니다.

     

    이 책의 특성은 게임 제작자들이 알아야 할 게임 제작환경 설정이라든가 하드웨어적으로나 소프트웨어적으로 게임 제작에 필요한 사항을 자세하게 알려주는 말 그대로 게임 제작자들의 교과서같은 책이라는 점입니다. 그래서 게임 제작자를 꿈꾸는 청소년들이나 게임 제작업계로 진출하시고자 하시는 개발자이라면 한번쯤은 읽어야 하는 책이라고 생각합니다.

     

    이제 21세기는 단순한 2D를 넘어서 3D, 4D로 영화나 게임을 즐기는 시대입니다. 과거에는 게임 캐릭터 및 캐릭터가 행동하는 모션등이 단순한 그림체가 움직이는 것였다면 3D는 캐릭터 및 캐릭터가 행동하는 모션을 다양한 각도에서 볼수 있다는 장점이 있습니다. 그렇기에 더 화려하고 다양한 모션과 볼거리를 제공하기에 유저들이 3D게임을 좀더 환호하는 이유입니다. 그래서 이제 게임회사들은 간단한 게임이라도 기본적으로 3D를 기본으로 게임을 만드는 추세입니다.

    따라서 게임 개발자를 꿈꾸시는 분들이라면 3D를 기본적으로 하여 게임을 만드실줄 아셔야합니다.

     

    구성

    Chapter 1: 들어가며

    Chapter 2: 하드웨어

    Chapter 3: 팀

    Chapter 4: 소프트웨어

    Chapter 5: 속편

    Chapter 6: 이식

    Chapter 7: 에필로그

    부록 A~G

     

    파트별로 나누어 봤을때 2장은 하드웨어적으로 모든 설정 및 요소에 대해 설명하고 있고 3장은 그래픽과 오디오에 대해 4장은 소프트웨어적으로 모든 설정 및 요소에 대해 설명하고 있습니다.

    그리고 나머지장은 저자의 어떻게 게임 업계로 들어오게 된 이유와 게임을 제작하면서 있었던 에피소드 등 자신이 게임업계에서 일하면서 겪었던 인생 스토리와 그어 관한 조언들을 나타내고 있습니다.

     

    개인적인 생각으로 학습은 게임 개발자에 관해 게임 개발자가 정확히는 무엇이고 정확히 어떻게 게임개발을 하는건지 과정이 1부터 10까지 궁금하신 분들은 1장부터 찬찬히 보시면서 학습하시는걸 추천드리고 기능적인 부분만 학습하시고자 하시는 분들은 2, 3, 4장을 집중적으로 학습하시는 것을 추천드립니다.(제가 봤을때는 2, 3, 4장이 이 책의 기능적인 핵심부분이자 전부라고 생각합니다.). 저는 개인적으로 기능부분을 좀더 추구하기 때문에 2, 3, 4장을 집중적으로 학습하였습니다.

     

    그리고 개인적으로 단점이 이 책이 게임 개발자들의 교과서라고 제가 말했지만 정말 너무 교과서같이 딱딱한 느낌이 많이 있습니다. 게임 개발자들의 애환이나 저자의 경험담을 애기하는것은 좋다고 생각하나 이러한 내용이 책의 내용구성의 절반이나 차지하고 기능적인 부분도 게임 개발자들이 더 필요로 하는 심화적인 내용이 아닌 정말 너무 기초적인 부분이 많다는 점이 어느부분에서는 지루할 수도 있다는 느낌을 줄 수도 있을것 같습니다. 책의 내용 구성에서 좀더 기능적인 부분이나 실습할 수 있는 내용으로 구성되었으면 더 좋았을것 같습니다.


  • 오래된 기억인데, 학창시절 나를 무척 흥분 시킨 게임이 있었다. 기지 구석구석을 돌아다니며, 나치와 괴물들을 찾아 무찌르는 게임, 울펜슈타인 3D가 그것이다. 지금 기준으로 하면, 이게 무슨 3D야 할 수 있을지 모르겠으나, 당시에는 1인칭 시점의 긴장감 최고의 게임이었다. 좌우 정신없이 돌아다니다 보니, 오바이트 유발 게임으로도 유명했던 기억이 있다. 

     

    '게임 엔진 블랙 북 : 울펜슈타인 3D'은 바로 오래된 레트로 게임 울펜슈타인 3D의 개발과정, 뒷이야기를 담은 책으로 '나 때는 말이야'하며 조용하게 옛이야기를 들려주는 것과 같은 느낌이 드는 책이다. 그렇다고 눈치 없는 꼰대 부장이 하는 따분하고 재미없는 이야기가 아니다. 당시 개발자의 모습, 게임 제작 당시의 컴퓨터 하드웨어와 소프트웨어의 상황에 각종 개발 난제, 그 극복 과정이 고스란히 책에 담겨 있어 마치 인간극장과 같은 다큐멘터리를 보는 재미를 준다.

     

     

     

    나처럼 연식이 좀 있는 분들이 이 책을 본다면, 최면에 걸리듯이 옛 추억에 쉽게 빠져들 것이다. 지금은 게임도 4K, 8K의 해상도를 얘기하고 있지만, 당시에는 640x480, 320x200였다. 컬러도 트루컬러가 아니었다. 256, 16컬러로 게임들이 만들어지던 시절이었다. 사운드도 애드립, 사운드블라스터가 막 나오고 있던 시절이었다. 우리가 아는 옥소리 카드는 그 뒤에 등장을 했었다. 

     

    5.25인치, 3.5인치 플로피 디스크라는 것도 있었다. 이것을 조금이라도 싸게 사려고 남대문 시장을 갔던 기억도 나고, 돈 없는 학생 신분에 프로그램 구할 길이 없어, 송탄 미군부대 근처까지 가서 불법 복제품을 구한 기억도 떠오른다. 80메가 하드를 80만 원 넘게 주고 샀던 기억도 난다. 80테라가 아니다 80메가다. 당시에는 친구들이 그걸 보고 그 많은 용량을 어디에 쓰냐고 했다. 지금 생각하면 웃기는 말이다. 무손실 음악파일 flac 하나만 해도 20메가가 넘는데 말이다. 

     

     

     

    '게임 엔진 블랙 북 : 울펜슈타인 3D'에는 이러한 당시 PC 환경을 책 초반에 담고 있다. 당시 컴퓨터 상황에 대한 이해가 없으면, 뒤에 나오는 코드를 왜 그렇게 만들었는지 전혀 이해할 수 없기 때문이다. 386 CPU 경우 당시에는 하드웨어 부동 소수점 장치가 없었다. Float 연산이 있긴 했지만, 소프트웨어로 하는 거라 속도가 많이 느렸다. 그 때문에 필요한 경우 수치 연산을 위한 값비싼 코프로세서라는 것을 별도로 꽂아야 했다. 당시 개발자도 코프로세서를 구경도 못한 사람이 많다는 게 웃기는 일이다.

     

    그뿐만이 아니다. 지금도 전자기기에 들어가는 마이콤 개발에는 메모리나 용량 제한이 큰데, 당시 컴퓨터도 마찬가지였다. 현재 아두이노나 라즈베리파이만도 못한 성능이라 해도 될 정도이다. 나도 한참 프로그램 공부를 하던 시절이라, 그놈의 640kbyte 제한 때문에 무척 고생했던 기억이 있다. 뭐 좀 멋지게 짜려고 하면, 메모리 초과로 에러가 나고 작동하다 멈추기 일쑤였다. XMS, EMS 메모리 기술이 등장한 이유기도 하다. 책에서는 이런 확장 메모리를 당시 개발자들이 사용했는지 어떤 고충이 있었는지 잘 설명하고 있다.

     

    그리고 요즘 프로그램은 하드웨어에 대한 이해가 많이 필요하지는 않지만, 과거에는 하드웨어에 대한 이해는 필수였다. 게다가 도스나 윈도우 구조 또한 제대로 알지 못하면, 한계 극복은 할 수 없었다. 인터럽트, 어셈블리에 대한 이해도 필요했다. API 함수의 지원도 지금처럼 많지 않은 데다, 함수에 따라 속도 차이가 많이 나서, 개발자가 일일이 시간  테스트하며 직접 개발하곤 했다. 유니티나 언리얼 같은 도구는 있지도 않았다. 그러다 보니 책을 보면, 울펜슈타인 게임을 만들기 위해 얼마나 별별 짓을 다 했는지 알 수 있다. 곳곳에 어셈블리 코드가 나오고 있고, 기발한 방법들이 펼쳐진다. 볼랜드 C++로 개발을 했지만, 스케일, 텍스처, 각종 움직임, 효과음 등에서 어셈블리 코드들이 등장하고 있다.

     

     

     

    현재는 컴퓨터 사양이나 개발 프로그램이 고사양화되어 있다 보니, 별거 아닌 것도 컴파일하고 보면, 엄청난 크기의 파일들이 쏟아져 나온다. 난 옛사람이라서 그런지 사이즈를 보면, 내가 잘못 짠 게 아닌가 하는 걱정이 들곤 한다. 최적화에 대한 고민을 하게 된다. 개발 일정에 쫓기다 보면, 최적화가 더러 무시되는 경향이 있는 거 같다. 그런데 이 책은 우리가 자꾸 망각하는 최적화에 대한 노력, 기발한 아이디어에 대한 영감을 자극한다. 

     

    그렇기 때문에 '게임 엔진 블랙 북 : 울펜슈타인 3D'는 코드 리뷰라는 관점에서도 참 좋은 책이다. 개발자에게 코드 리뷰는 자신의 실력을 좀 더 업그레이드할 수 있는 계기가 된다. 코딩 기술도 습득하고, 생각을 확장할 수 있게 돕는다. 비록 울펜슈타인 3D가 오래된 게임이지만, 책에 나온 코드 설명들을 보면서, 지금의 개발자에게도 도움이 되는 요소들이 많다고 느꼈다.

     

    이 책에는 울펜슈타인 3D 개발에 관한 모든 것들이 나온다. 연필로 그린 인물 스케치도 나오고, 회색 박스에 존 카맥과 같이 당시 게임 개발과 관련된 사람들의 생생한 증언도 담고 있다. 이 게임은 당시 대학살 등급 PC-13이었다고 한다. 게임에서 워낙 많은 적을 죽이고, 화면도 빨갛게 변하곤 했으니 당시 기준으로 그럴 만도 하다.

     

    그 밖에 책에서는 토막상식을 통해 용어 설명이나 내용 설명을 보강하고 있고, 당시 기술적 정황, 참고할 것들도 다루고 있으며, 참고할 인터넷 주소나 문헌도 주석에 잘 추가되어 있다. 



     

    '게임 엔진 블랙 북 : 울펜슈타인 3D'은 역사 기록과 같은 책이다. 울펜슈타인 3D의 모든 것을 잘 정리해서 담은 책이다. 내가 프로그램 공부하던 시절에 이런 책이 있었다면, 아마도 게임 개발 쪽에 심취했을 것이다. 당시에 몰랐던 많은 것들을 알 수 있었다. 아울러 레트로 감성에 빠져 추억 소환도 되었고, 보는 내내 재미있었다. 예전이나 지금이나 개발자의 삶은 확실히 쉽지 않은 거 같다. 변한 건 개발 환경과 컴퓨터 사양뿐이다. 

     

    아무튼 언제나 비슷한 프로그래밍 책에 지쳤다면, '게임 엔진 블랙 북 : 울펜슈타인 3D'을 읽어보라고 하고 싶다. 분명 다른 느낌을 받을 것이다. 머리 식히기도 좋고, 내가 어떤 개발자가 될지 고민도 하게 만드는 책이다. 적어도 난 그랬다.

  • 게임 엔진 블랙 북 울펜슈타인 3D.jpg

     

    이 글은 <게임 엔진 블랙 북 : 울펜슈타인 3D>을 읽고 서평을 작성했습니다.

    대한민국에서 만든 실시간 FPS 게임인 배틀 그라운드, 게임이 초대박이 나면서 배틀 그라운드 챔피언을 가리는 대회까지 개최되고 있습니다. 여기 최초의 FPS 게임을 만든 사람들이 있습니다. 바로 이드 소프트웨어 직원들입니다. 최초의 FPS 게임을 만들 당시에 컴퓨터는 대부분 사무용으로 사용되고 있었습니다. 게임용 모듈이 있긴 했지만 숫자 처리 성능이 사무용 컴퓨터에 비해 빈약했습니다. 이드 소프트웨어는 원하는 성능을 만족하는 게임을 만들기 위해서 사무용 컴퓨터에서 돌릴 수 있는 게임을 만듭니다. 그 게임이 바로 울펜슈타인 3D입니다.

    게임 개발은 많은 공부가 필요한 영역입니다. 소스코드의 베이스인 C언어 문법에 통달해야 합니다. 사람이나 물체의 움직임을 생동감있게 표현하기 위해 물리학을 알아야 합니다. 게임 내 몬스터 공격 기능, 상점 기능, 아이템 기능을 구현하기 위해서 수학을 알아야 합니다. 유려한 사용자 인터페이스를 위해 그림을 잘 그리는 방법을 알아야 합니다. 게임은 종합 예술입니다.

    FPS는 총을 들고 던전을 탐험하면서 몬스터나 적을 찾아서 죽이는 게임입니다. <게임 엔진 블랙 북 : 울펜슈타인 3D>에서는 FPS를 만드는 데 사용한 초기 버전 소스코드를 분석합니다. 소스코드를 분석하다 보면 게임 속 기능을 구현하기 위해 사용한 알고리즘을 알게 됩니다. 이 알고리즘은 새로운 게임을 만들거나 소프트웨어를 만드는 데 활용할 수 있습니다. 게임을 내 손으로 만들어보는 것은 프로그래밍 실력 향상에 도움을 줍니다.

    <게임 엔진 블랙 북 : 울펜슈타인 3D>은 이드 소프트웨어가 만든 최초의 FPS 게임 코드에 대한 설명을 들려줍니다. 다만 아쉬운 점은 FPS 게임이나 울펜슈타인3D를 좋아하는 사람에게는 흥미로울 수 있으나 FPS 게임을 잘 모르거나 흥미가 없는 사람은 읽기가 함듭니다.

    게임을 만들고 싶고 프로그래밍 실력을 향상시키고 싶은 그대에게 <게임 엔진 블랙 북 : 울펜슈타인 3D> 책을 추천합니다!

  • SE-3e112057-9773-424d-9a3d-4a51d7fa8c5a.png

     

     

    어린 시절부터 컴퓨터 프로그래밍에 관심이 많았다. 아니 그 보다는 컴퓨터로 하는 무엇인가가가 늘 즐거웠다. 없는 형편에 며칠밤낮을 조르는 아들의 성화에 못이겨 적금을 깨어 용산 전자상가에 가서 S사의 ㅇㄹㄷ 386SX 컴퓨터를 구해주신 부모님(이 자리를 빌어 다시 감사의 말씀을...). 그 컴퓨터를 만지며 며칠밤을 제대로 잠도 못잤던 기억이 있다.

     

    KakaoTalk_20201122_112435099.jpg

     

     

    앨범을 뒤져보니 운 좋게도 그 시절 사진이 몇 장 남아 있었다. CRT 모니터, 플로피 디스크, 책장에는 터보C 관련 책들도 보인다. 비록 지금은 컴퓨터 프로그래머의 길을 걷고 있지도, 30년 동안 초보 코더 수준을 못 벗어나고 있지만 그 때는 멋진 컴퓨터 프로그래머가 되는 꿈을 꾸었드랬다.

     

    KakaoTalk_20201122_112421078.jpg

     

     

     

    <게임 엔진 블랙 북 - 울펜슈타인 3D>이번 책을 읽으면서 어린 시절의 추억이 많이 소환되었다. 지금은 상상하기도 어려운 사양을 가진 컴퓨터 안에서 그것을 극복하기 위한 프로그래머들의 도전과 노력들이 이 책에 가득 담겨 있다.

     

    ​어렴풋이 기억을 떠올려보자면 93~94년 저 당시에 가지고 있던 컴퓨터의 사양은 이랬다.

     

    - 386SX(16비트?) CPU

    - 5.25인치 FDD(1.2MB였나?)

    - 옥소리 사운드카드(이건 나중에 추가로 샀던 것 같다.. 삐 소리 나는 PC 스피커 였던듯...)

    - 40MB 하드(40기가 아니다.. 40메가다..), 나중에 560메가 바이트 하드로 업그레이드 했다...

    - 14인치 CRT 모니터

    - 16색이었는지?256색이었는지? VGA 카드, 다행히 Hercules는 아니었다. 컬러였다.

    - 1MB 메모리....

    - MS-DOS 5.0 한글판

    - MDIR, NCD 같은 프로그램들도 어렴풋이 떠오르고...

     

     

    책에서 게임 개발을 하던 당시의 극악의 하드웨어 상황들을 이야기하는 데 자꾸만 어린 시절이 떠올라서 신이 났다! 요즘 사람들은 저 사양의 컴퓨터를 상상이나 할 수 있을까?

     

     


     

    <게임 엔진 블랙 북 - 울펜슈타인 3D>은 이 당시에 출시되어 커다란 반향을 일으켰던 울펜슈타인 3D라는 게임을 개발하던 이야기를 다루고 있다. 극악의 컴퓨터 환경 속에서 3D 게임이라는 전설적인 작품을 선보였던 과정을 소개한다.

     

     

    maxresdefault.jpg

     

    "페르시아 왕자"라는 게임이다. 당시에는 이런 수준의 게임이 주류를 이루고 있었다. 그러다 <울펜슈타인 3D>가 등장했다. 1인칭 FPS 게임. 지도가 3차원으로 움직인다.

     

     

    223259425512409620.jpg

     

    어린 시절에 접했던 이 게임은 정말 충격이었다! 골목(?)을 돌아서자 갑자기 나타타는 적들은 현실감이 넘쳤다. (물론 지금 보기에는 아무것도 아닐 수 있지만...)

     

     

    당시에는 어렸기 때문에 이렇게 게임을 개발하는 것이 얼마나 어려운 일인지는 잘 몰랐다. 그저 신기하기만 했지... 그러나 프로그래밍을 공부하면서(Turbo C, Borland C) 이건 정말 보통일이 아님을... 게임 프로그래밍에 관한 책들도 몇 권 사서 읽어보면서 이건 정말 대단한 일임을 알았다.

     

    KakaoTalk_20201122_115634704.jpg

     

     

     

    1992년은 지금부터 거의 30년 전이다. 당시로서는 상상하기 어려운 혁신적인 게임이었다. 이런 혁신이 있었기에 지금의 놀라운 수준의 게임들이 만들어질 수 있었을 것이다.

     

    책은 이어서 "하드웨어", "소프트웨어"에 대한 이야기들을 하나하나 다루고 있다. 당시의 CPU 연산 체계가 어떠했는지, 그것을 극복하기 위해 어떤 방법들을 고민했는지를 다루고 있다. 램에 대해서, VGA에 대해서, 오디오에 대해서도 다루고 있다.

     

    일례로 당시에는 메모리가 1MB이든 2MB이든 4MB이든 기본메모리로 쓸 수 있는 공간은 640KB 뿐이었다. 나머지는 확장메모리다 뭐다 하면서 다른 곳에서 사용했고 심지어 640KB 조차도 설치된 다른 드라이버(.SYS와 .COM)들이 야금야금 갉아 먹고 있었다. 그래서 어떤 게임들을 실행하기 위해서는 메모리를 최대한 아끼는 자체 부팅 디스크를 만들어 쓰기도 했다... (아~ 옛날이여.. Autoexec.bat, config.sys를 아시면 뇐네...)

     

     

    KakaoTalk_20201122_120345007.jpg

     

    물론 당시에는 이유를 몰랐다. 그냥 옆에 있는 친구가 "이 게임을 하려면 이 도스가 필요해" 하면서 건네주었던 디스켓을 복사해서 썼던 기억밖에 없다. 그러나 이 책을 읽으면서 "아! 이런 문제들을 이렇게 풀어나갔구나!"라는 것을 30년이 지나고서야 조금은 알게 되었다.

     

     

    KakaoTalk_20201122_120556863.jpg

     

     

    이 책에 나온 내용들이 현대의 프로그래밍에 얼마나 적용이 될 지는 잘 모르겠다. 요즘은 컴퓨터 사양이 넘치고 넘치기 때문에 메모리를 아끼기 위해, 하드웨어 사양을 최대한 끌어쓰기 위해 얼마나 노력을 해야 하는지 잘 모른다. 프알못의 한계!! 어린 시절 터보C를 공부할 때에는 메모리를 아끼기 위해 변수 타입을 int로 하느냐 float로 하느냐를 고민하고, 연산 속도를 위해 뭘 선택하는지... 등등 아주 작은 것도 아껴썼던 기억이 있다. 지금도 그런지는 잘 모르겠다. 파이썬 공부하면서는 그런 고민을 별로 안해본 것 같다..

     

     

    그런데!

     

    이런 문제들을 맞딱뜨렸을 때, 그걸 극복해 나갔던 여러 과정들을 보며, 한계를 뛰어넘는 것은 작은 생각의 차이에서 비롯된다는 것을 느낄 수 있었다. 앞으로 30년 뒤에는 어떤 형태의 프로그램들이 등장할 지 알 수 없다. 30년 전에 이 게임을 만든 사람들은 지금 이 시대의 모습을 상상할 수 있었을까? 지금은 모바일 3D 게임도 수준이 엄청나니...

     

    아마도 내가 모르는 어떤 세상에서는 가능한 적은 사양을 활용하여 가능한 더 리얼한 게임, 엔진들을 개발하기 위해 노력하고 계신 분들이 있을 것 같다. 비슷한 과정으로 문제들을 해결해 나가는 과정을 겪고 계시지 않을까?

     

    게임 개발의 또 다른 면을 볼 수 있어서 좋았고, 어린 시절의 추억을 소환해볼 수 있어서 행복했다.

     

    게임 개발 역사서(?)로 보기엔 개발 지식이 없으면 어려운 책으로 느낄 수 있고, 게임 개발 전문서(?)로 보기엔 현대 개발 내용은 아니어서 실용적이지는 않을 수 있다.

     

     

    그런데 둘 다 적당히 발을 걸쳤던(?) 나로서는 100% 만족했다. 90년대 게임 개발의 전설적인 이야기를 들어보고 싶다면 추천!!

     

    KakaoTalk_20201122_121555030.jpg

     

     

     

    심저어 <울펜스테인 3D>는 소스도 오픈되어 있다고 하니 정말 놀랍다!!

     

    이 리뷰는 한빛미디어 출판사의 "나는 리뷰어다" 활동을 통해 도서를 제공받고 작성한 후기입니다. 리뷰어 활동과는 별개로 개인 스터디를 위해 꼼꼼하게 읽었고 느낀 이야기를 솔직하게 적었습니다.



  • [한줄평]

    게임 엔진 개발에 관심이 있는 개발자라면 꼭 한번 읽어 보면 좋을 것 같습니다.


    [목차구성]

    Chapter 0 프롤로그

    Chapter 1 들어가며

    Chapter 2 하드웨어

    Chapter 3 팀

    Chapter 4 소프트웨어

    Chapter 5 속편

    Chapter 6 이식

    Chapter 7 에필로그


    [서평]

    30-40대의 게임 매니아라면 울펜슈타인을 아마 알고 있을겁니다. 그시절에는 지금 같은 폴리곤 그래픽 기술이 없어 2D로써 3D 시각 효과내는 놀라운 기술을 볼수 있습니다. 열악한 하드웨어 에서 어떻게 그런 명작 게임을 만들수 있는지 하나하나 노하우를 배울수 있습니다. 


    지금은 유니티, 언리얼같은 훌륭한 게임 엔진들이 있어 게임에만 집중 하면 되었지만 20-30년전에는 게임을 개발 할때 필요한 부수적인 것들을 개발자가 모두 만들어야 했습니다.


    지금 시대에 이 책에 나온 코드는 쓸모가 없지만 하지만 그시절에 혁신 적인 게임 개발을 어떻게 했는지 불가능한 기술을 어떻게 극복하고 해결 했는지를 배울수 있습니다.

     

    현재 고성능 피씨에서 개발한 게임을 모바일 같은 저성능 하드웨어에서 구동할때 발생하는 문제를 어떻게 해결 할까 하시는분이라면 이책에서 그 해답을 찾을 수 있을것이라 생각하여 추천 드립니다. 그리고 옛날 명작을 기억 하시는분들 중에서 어떻게 게임을 만들었는지 궁굼해하는 인디 게임 개발들에게 추천 합니다.

  • KakaoTalk_20201122_051057368.jpg

     

    유니티와 언리얼엔진이 보급화가 잘 되어있기에 게임엔진을 만들고자 하는 사람은 별로 없을 것이다.

    오죽하면 프로그래머 유영천님께서도 엔진 가져다 쓰는 개발이 대부분인 시대에

    DirectX를 학습하려는 사람은 거의 없을거라고 말씀하셨을까

    네, 그런 사람이 여기 있으며 기술 덕후까지는 아니지만 원천 기술에 흥미가 많기에 이 책이 매우 끌렸다.

     

    책은 울펜슈타인 게임이 만들어졌을 당시의 컴퓨터 하드웨어 사양부터 시작된다.

    어이없게도 이 때 당시에는 부동소수점을 연산할 장치가 없다고 한다.

    그래픽을 공부하고 있는 입장에서 float 사용할 수 없는 상황에서 float/int를 계산하라고 한다면,

    지금의 나로썬 절대 못한다고 말할 것 같다.

    이런 상황을 해결하기 위해 고정 소수점 산술로 ALU를 속이는 방법이 등장하다니...

     

    그래픽 프로그래머라면 어셈블리어를 건드릴 줄 안다는 말이 이래서 사용되는구나를 확실하게 알 수 있었다.

     

    사실 책에서 소개한 소스코드는 현재로썬 그렇게 많이 활용할 것 같지않다.

    그러나 제약조건이 있는 상황에서 어떻게 타개했는지는 확실하게 유용하였다.

    아무리 컴퓨터 성능이 더욱 발전한다고 하더라도 무어의 법칙에 따라 점점 발전이 더디고 있다.

    따라서 미래에서도 제약조건이 있는 상황에서 구현하고자 싶은 것이 막히는 상황이 등장할 것이다.

     

    게임 엔진을 만들고자 하는 사람이라면 필독서라고 생각한다.

    부디 이 책에 흥미를 갖고 읽는 사람들이 많아졌으면 한다.

    훗날 다같이 모여 이 책을 논하면서 엔진을 만들고 있을거라 믿는다.

     

  • > 진행에 앞서

    게임회사에서 근무하는 입장으로서 이번에는 흥미로운 책을 발견하였다.

    사실 요즘 나오는 엔진들은 너무나 고차원적이기 때문에 범접하기 어려운 대상들이라고 생각했으며,

    간간히 유튜브를 통해 고전게임의 개발에 힘써온 사람들에 대한 이야기를 듣고 선망이 되는 분들을 발견하기도 하였다.

    이 책이 그간 쌓아왔던 여러 지식들을 좀 더 전문적인 지식으로 보태줄 것 같다는 기대감으로 접하게 되었다.

     

    > 책에 대한 간단한 정보

    이 책은 존 카맥과 존 로메로 등 id 소프트웨어를 이끌었던 자들의 대표작인 울펜슈타인 3D를 주 재료로 삼아 게임엔진에 대한 설계 및 구현, 그 배경에 대한 이야기를 담은 책이다.

    절대 추상적이지 않으며, 오히려 공개된 소스를 매우 보기 어려워 하는 사람들에게 잘 분석할 수 있도록 돕는 가이드 역할을 하는 책이다.

     

    > 첫 느낌 및 목차

    사실 책의 겉 모습을 보았을 때에는 너무 두려움이 있었다.

    무거워 보였기 때문이다.

    사실 내용도 가볍지는 않다.

    하지만, 접근하기 꺼려질 정도는 아니다. 다행히 나의 예전 시절은 이 울펜슈타인 3D가 흥행했던 시절과 맞아 떨어졌으므로 향수를 불러 일으키는 DOS부터 시작하여 그시절 CPU와 사운드 등 각종 하드웨어 장비들이 추억을 불러 일으키게 만들었다.


    목차는 심플하다고 생각된다.

    1. 들어가며

    2. 하드웨어

    3. 팀

    4. 소프트웨어

    5. 속편

    6. 이식

    7. 에필로그

    순이다.


    정말 표지부터 블랙북이다.
    하드웨어를 설명하는 챕터의 내용 중 하나. 향수가 듬뿍 담겨있다.
    이드 소프트웨어의 정신을 보여주는 듯 하다.
    소스에 대한 설명. 전체가 나오지는 않지만, 그래도 친절하다.
    옛 엔진이지만, 그래도 기본이 되는 엔진임을 알려주는 뒷 표지.

     

     

    > 인상깊은 부분들

    일단, 게임 개발업계의 대단한 위인으로 칭송받을 수 있을만한 존 카맥의 이야기였기에 흥미를 끌었다.

    게다가 그 당시의 소스 분석에 대한 이야기라니.

    그리고 그 스텝을 밟아가는 데 있어서 하드웨어부터 차근히 접근하는 방식이 마음에 들었다.

    분명 어려운 기술을 말하고 있음에도 불구하고, 점차 걸어가다보면 어느덧 깊은 물 속에 들어와 있는 느낌을 받게 해주었다.


     

    > 괜찮은 부분

    1. 어디서 쉽게 접근할 수 없는 이야기를 담고 있다.(완전한 개발이야기도, 역사 이야기도 아닌 적절한 혼합)

    2. 필요한 곳곳마다 도표를 적절하게 삽입하였다.

    3. 컬러구성이다.(지루하지 않도록 소스에도 컬러를 반영하였다.)

     

    > 아쉬운 부분

    1. 담고 있는 내용에 비해 책이 얇은 느낌이다.

    2. 수학, 컴퓨터 구조 등 기본 지식이 없으면 읽다가 중단되기가 쉽다.

    3. 최신 OS 기준으로 포팅하는 방법도 실려있었다면 좋을 것 같았다.

     

    > 개인적인 평점

    - 가격: 6 / 10

    - 내용: 8 / 10

    - 디자인: 8 / 10

    - 구성: 9 / 10

     

    > 정보

    저자: 파비앙 상글라르

    옮긴이: 박재호

    출판사: 한빛미디어

    가격: 35,000원

    전체 페이지: 339페이지

     

    ** 이 리뷰는 "한빛미디어"를 통해 도서를 제공받아 작성하였습니다.

  • B4727870713_l.jpg

     

    예전에 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 많다) 익숙치 않은 분들은 책의 재미가 떨어질 있다는 생각이 든다

  • 게임은 개발의 끝판왕이라 할 수 있습니다.

     

    일반적인 개발보다 신경 쓰고 만들어야 할 부분이 상당합니다.

     

    컴퓨터가 고성능이 되면서 많은 게임도 고성능 게임까지 가능해졌습니다.

     

    컴퓨터의 과거 386 시절에는 렘이 1MB였습니다.

     

    지금은 제 PC의 렘은 16GB를 쓰고 있는데요.

    주변만 봐도 32gb 렘을 쓰는 분도 있습니다.

     

    1MB는 1,024MB 1GB이니 얼마나 차이 나는지 확인 가능합니다.

     

    오늘 알아볼 책은 386의 한계를 극복한 개발자의 책입니다.

     

    책 제목은 ‘게임엔진 블랙북 울펜슈타인 3D’입니다.

     

    이 책으로 게임엔진 개발자의 에피소드를 볼 수 있습니다.

     

    천재 개발자들의 노하우를 얻어가는 시간이 되길 바랍니다.

     

    epilog.png

     

    ◆ 오픈소스 분석

    오픈소스 분석은 어떻게 하면 될까요?

    할 수 있으면 가장 처음 버전부터 하시는 게 좋습니다.

     

    가장 첫 버전은 소프트웨어가 추구하는 목표가 담겨 있습니다.

     

    오픈소스의 경우 시간이 지날수록 기능이 더 나오게 됩니다.

     

    하지만 시간이 지나게 되면 참여 개발 인원이 늘어나는데요.

    문제가 존재합니다.

     

    사용자의 환경이나 요구에 따라 변화가 생깁니다.

     

    기능은 추가됐지만, 일관성이 깨지게 되는 겁니다.

     

    darkseed.png

     

     

    ◆ 저성능 컴퓨터 시대의 3D 게임

    저자는 컴퓨터 성능도 좋지 않은 시절 울펜슈타인 3D 게임을 만들었습니다.

     

    영상도 찾아보면 그 당시에 이런 게임은 상상도 못 할 일이었습니다.

     

    하지만 한계를 극복한 개발자들로 인해 나오게 됐습니다.

     

    지금 영상을 봐도 3D FPS 느낌이 보입니다.

     

    그래픽은 안 좋지만 개발자들의 깨어 있는 모습을 보여준 게임이라고 봅니다.

     

    게임엔진은 현재 개발에 좋은 엔진이 나왔습니다.

     

    바로 유니티와 언리얼 엔진입니다.

     

    요즘은 사용하기 비용을 내고 엔진을 사용합니다.

     

    큰 회사의 경우 자체 엔진을 사용하겠죠.

     

    엔진을 사용하는 것도 좋은데요.

    엔진에 매여있는 게 아닌 더 한계를 극복하는 개발자들이 많아지길 기대해봅니다.

     

    gun.png

     

     

    끝으로 저자는 15년 차 베테랑 개발자입니다.

     

    로저스와 퀵플레이에서 일을 했었는데요.

    2014년부터 구글 본사 소프트웨어 엔지니어로 일하고 있습니다.

     

    컴퓨터가 현재의 성능이 되기 전까지는 제약이 많았습니다.

     

    주어진 제약 내에서 최대의 성능을 끌어내야 했습니다.

     

    386 시절에는 부드럽게 돌아가는 3D FPS도 쉽지 않았습니다.

     

    이를 해결하기 위한 하드코어 개발 비법을 알려줍니다.

     

    타협보다는 게임성을 높인 이들의 집요함을 배울 수 있습니다.

     

    title.png

     

  • 1.jpg

     

    존 카맥이라고 하면 게임업계에서 최초로 3D구현을 한 인물로 유명하다. 울펜슈타인, 퀘이크, 둠 시리즈를 만들어 낸 분이시다. 여기서는 가장 먼저 구현한 울펜슈타인이 어떻게 386컴퓨터 사양 안에서 최적화 되어 동작하는지를 소개하고 있다.

     

    어셈블리어를 사용하는 것은 기본이고 각종 최적화 노하우가 담긴 트릭을 사용하여 컴퓨터의 한계를 극복하였다. 내가 알기로 당시 컴퓨터과학자들이 3D게임을 만들어 내기엔 컴퓨터 사양이 부족하다고 얘기 했다고 알고있다. 이 것이 가능하다는 것을 보여준 인물이 바로 존 카맥이다.

     

    울펜슈타인 역시 3D게임의 가장 기본이 되는 레이트레이싱 기법을 사용하여 구현이 되어 있다. 시야 각도 내의 모든 각도로 가상의 빛을 쏴서 충돌지점을 찾는 것이다. 고등학교 수학의 평면과 직선의 방정식을 이용하면 처리가 가능하다. 요즘 같이 GPU, CPU의 여건이 된다면 충돌지점에서 다시 빛의 반사 각도를 계산하여 빛을 더 쏠 수도 있다. 이것은 3D 렌더링의 기본이 된다고 알고 있다.

     

    CPU와 부동소수점의 동작방식, DOS와 MDIR을 사용한 세대라면 알 수 있는 EMS, XMS메모리, AUTOBATS.BAT 파일에서의 사운드블라스터 드라이브 설정등의 이야기도 다루고 있다. 그렇다보니 디바이스 통신을 위한 인터럽트를 처리라던가 EGA, VGA 그래픽 모드처리에 대한 이야기도 나온다.

     

    2.jpg

     

    3.jpg

     

    4.jpg

     

    5.jpg

     

    모든것을 총 망라해, 가장 대단한 것은 이 모든것이 640kb 내의 메모리에서 동작한다는 것일 것이다.

     

    내 경우 슈퍼닌텐도가 386컴퓨터 보다 더 좋은 성능을 가지고 있다고 생각했는데 슈퍼닌텐도에서 울펜슈타인을 구동하기 위해 맵을 BSP 최적화해야 했었다는 것을 읽고 슈퍼닌텐도로 재미있는 많은 게임들을 했지만 386컴퓨터가 성능이 더 좋다는 것을 처음 알게 되었다.

     

    단순히 픽셀을 찍고 직선과 평면의 방정식을 적용하여 3D게임을 만들라고 하면 울펜슈타인이 이슈가 될 일은 없었을지도 모른다. 그러나 울펜슈타인이 대단한 것은 존 카맥의 각 종 아이디어에서 비롯한 최적화 노하우가 적용되어 비로소 게임이 동작할 수 있었다는 것이 아닐까 생각된다.

     

    6.jpg

     

    7.jpg

     

    내 경우 어셈블리로 된 코드는 그냥 넘겨 읽었다. 물론 머리 싸움하며 독해를 하면 더 좋겠지만, 존 카맥이 어떤 성능 문제에 봉착했고 그것을 어떻게 해결했느냐의 이야기를 읽어가는 것만으로도 충분히 괜찮다고 생각이 들었기 때문이다.

     

    이 책을 읽고 많은 개발자 분들이 추억의 DOS 게임 개발의 향수를 느끼심과 동시에 최적화 전략의 노하우를 알아가시면 좋겠다.

     

     

  • 굉장히 호기심이 생기고 읽어보고 싶게 생긴 책인 게임 엔진 블랙북: 울펜슈타인3D를 읽었다. 한빛미디어에서 이런 Geek한 책도 번역하는구나 싶다. 울펜슈타인을 직접 해보지는 않았지만 어떤 게임인지 대충 알고 있었다. 소스코드가 깃허브에 공개되어 있어서 한번 볼려고 했었는데 그만 둔 기억이 있다.

    표지는 좀 오바스럽긴 하다. 하지만 이 책에 들어있는 내용은 진짜 엄청나다..!

    처음 엄청 놀랐던 부분이다. 이 책의 초반부분 챕터에서는 울펜슈타인이 개발되었던 당시 하드웨어 사양에 대해서 이야기하고 어떤 문제가 있는지, 어떤 식으로 구현되었는지가 설명하고 다음 챕터에서 울펜슈타인에서는 이런 하드웨어적인 한계를 어떻게 소프트웨어적으로 해결했는지를 이어서 설명한다.

    이때 당시 CPU는 80386이었고, 램은 1메가였다고 한다. 그마저도 OS와 각종 드라이버들을 로드하고나면 640kb정도 밖에 되지 않는 아주 작은 램이었다. 그래서 이때 당시에 존재했던 XMS와 EMS라는 메모리 기술을 사용해 이를 극복할 수 있었다고 한다. 이 기술에 대한 내용과 어떻게 동작하는지 설명하고 있는 부분이다.

    이것은 메모리 파편화를 막기 위해 직접 만든 메모리 메니저와 페이지 메니저에 해당하는 내용이다. 저자가 친절하게 하나씩 뜯어보고 이해할 수 있는 그림을 활용해 설명해주고 있다. 이런 그림들이 큰그림을 그리는데 아주 많이 도움되었다.

    나도 OS수업을 들으면서 힙 메모리를 미리 할당해서 링크드 리스트로 관리하는 프로그램을 만들어 본 적이 있었다. 그래서 이 부분을 보면서 참 그생각이 많이 나서 이해하는에 아주 도움이 되었다. 이런게 진짜 이렇게 쓰였다는게 참 신기했다.

     

    이부분은 진짜 미쳤다고 생각되는 부분인데, 이때 CPU에는 부동소수점을 연산할 하드웨어가 없었다고 한다. 그래서 int의 bit들을 shift해서 16:16으로 부동소수점 연산을 하는게 진짜 신기했다. float대신에 fixed라는 것을 만들어서 연산하는게 진짜 대박이었다.

     

    이밖에도 사운드카드나 괴랄한 VGA등을 고려한 여러가지 테크닉들이 많이 들어있었다. 이런것들을 보면 진짜 재밌다. 이렇게 고군분투 하는 것이 진정한 프로그래머가 아닐까 싶다. 다 읽고 보니 Github에 있는 소스코드를 보면서 이 책을 보면 매우매우 좋을 것 같다.

    * 이 책은 한빛미디어의 '나는리뷰어다' 이벤트로 제공받았습니다.


  • 이 책은 울펜슈타인 3D의 하드웨어와 팀, 소프트웨어, 속편, 이식, 에필로그의 내용을 상세한 그림들과 함께 소개하고 있다 

     

     

    당시 최고의 찬사를 받았던 울펜슈타인 3D 게임엔진을 면밀히 분석한 게임 엔진 블랙북 울펜슈타인 3D  편은 지금 봐도 많은 깨달음을 얻을 수 있는 정말 좋은 책이다

     

    그때 당시 참고할만한 자료들도 많지 않은 상황에 최초로 이런 생각을 하고 게임엔진을 만들었다는 것 자체가 정말 대단한 생각의 발상이였고 

     

    울펜슈타인 3D를 개발한 개발자들이 정말 훌륭한 개발자들이었다는걸 깨닫게 되었다

     

     

    이 책을 통해 도구나 현재 상황 그리고 여러가지 문제를 탓하지 않고 현재 상황과 현재 존재하는 것들로 문제를 해결하고 

     

    더 좋은 방법 더 나은 상황을 만들어 내고 빠르고 품질좋은 소프트웨어을 만들어 낼 수 있는 개발자들이 진정한 훌륭한 개발자들이라는 것을 알게 되었다

     

    출시된지 무려 28년이 지난 게임에서 이런 교훈을 얻을 수 있다는게 너무 신기하고 

     

    정말 품질 좋은 소프트웨어는 아무리 오랜 세월이 지나도 계속해서 화두될 수 있다는 것도 깨달았다

     

    매사에 소프트웨어 개발에 매진할때 이점을 꼭 명심하고 개발에 임할 수 있도록 해야될 것 같다

  • 이 책이 발매되었다는 안내 메일을 받자 마자 한빛에  주문해서 구입한 책입니다.

     

    IMG_1340.JPG

     

    이 책은 초보 프로그래머를 위한 책이 아닙니다. 

    또한 지금은 이 책에 나오는 내용들을 써먹을 일이 거의 없을 것 같습니다. 

     

    하지만 이 책에는 IBM PC 호환  PC 의 열악한 그래픽 어댑터(VGA)와 운영체제 DOS 에서 가로 스크롤을 구현하고  3D 게임을 만들어낸 존카멕이 만든 Wolfenstein 3D 소스에서 구현된 주요 기법들에 대한 개념들을 설명하고 있습니다. 

    기법과 개념의 설명이지 소스 분석은 아닙니다.. 단지 소스를 봤을 때 어떤 것을 이루고자 이렇게 코드를 작성했는지 알아 내는 가이드 일 뿐입니다.. 

     

    책의 서두에 나오는 존 카멕의 이야기가 얄밉습니다.. 

     

    "나는 겨우 21세였고 C로 프로그래밍한 지 1년밖에 않은 상태였으므로... "

     

    " 1년밖에... "   

     

    이전에는 뭘로 게임을 만들었을까?? 라는 생각과 함께. 난 아마도 90년도에는  Quick Basic 글적이다가 FORTRAN 으로 과제를 하고,  

    황희융교수의  책이나  Schaum's outline series 중 C  언어로 간단한 프로그램을 짜 본 기억 밖에 없는 거 같군요.  

    허긴 92년도 이 게임이 나왔을 때 임인건의 Turbo C 정복을 살펴 보고 있었으니 말입니다.  ^^;; 

     

    이 책은 그 동안 사용해 왔던 AT, 386, ... Adlib, Soundblaser 같은 하드웨어에 대한 추억도 다시 돌아 보게 만듭니다.

    그 때 괜히 국산 사용한다고 옥소리 샀다가 고생한 기억도 나고.... 

    Sound Blaster MIDI 사서 음악은 미디로 재생해 보기도 하고.. (아.. 아직도 이 장비가 어딘가에 굴러 다닌다는... )

    이 후 Quake 하기 위해서 Voodoo 3D 카드도 샀었던... 

     

    일단 이 책은 저를 90년대로 대려가 주고 연구실 건물이 문을 닫는 10시까지 빠져서 하던  Wolfenstein 3D 

    여름 방항 밤 새면서 플레이 하던 Doom 1, 2 , 

    그리고 역시나 밤새면서 옆에서 튀어 나오는 괴물들 때문에 화들짝 놀라기 까지 했던  Quake... 1, 2.... 시절을 생각하게 해 주는 책입니다.

     

    현재는 STM32 를 사용하는 개발용 프로그램을 짜고, Windows에서 MCU 와 통신하는 프로그램을 주로 작성하다 보니 

    이 책에서 사용하는 기법들은 제가 활용할 일은 없을 것 같습니다.

    하지만 저자 파비앙의 설명 방식은 지금 준비하고 있는 STM32  HAL 을 이용한 교재 개발에는 도움이 될 것 같습니다. 

     

    마지막으로 예전에 구입한 책 DOOM  과 함께 한 컷 으로 이 글을 마무리 합니다. 

     

    IMG_1344r.jpg

     

결재하기
• 문화비 소득공제 가능

배송료 안내

  • 책, 아이템 등 상품을 1만원 이상 구매시 무료배송
  • 브론즈, 실버, 골드회원이 주문하신 경우 무료배송

무료배송 상품을 포함하여 주문하신 경우에는 구매금액에 관계없이 무료로 배송해 드립니다.

닫기

리뷰쓰기

닫기
* 도서명 :
게임 엔진 블랙 북 : 울펜슈타인 3D
* 제목 :
* 별점평가
* 내용 :

* 리뷰 작성시 유의사항

글이나 이미지/사진 저작권 등 다른 사람의 권리를 침해하거나 명예를 훼손하는 게시물은 이용약관 및 관련법률에 의해 제재를 받을 수 있습니다.

1. 특히 뉴스/언론사 기사를 전문 또는 부분적으로 '허락없이' 갖고 와서는 안됩니다 (출처를 밝히는 경우에도 안됨).
2. 저작권자의 허락을 받지 않은 콘텐츠의 무단 사용은 저작권자의 권리를 침해하는 행위로, 이에 대한 법적 책임을 지게 될 수 있습니다.

오탈자 등록

닫기
* 도서명 :
게임 엔진 블랙 북 : 울펜슈타인 3D
* 구분 :
* 상품 버전
종이책 PDF ePub
* 페이지 :
* 위치정보 :
* 내용 :

도서 인증

닫기
도서명*
게임 엔진 블랙 북 : 울펜슈타인 3D
구입처*
구입일*
부가기호*
부가기호 안내

* 회원가입후 도서인증을 하시면 마일리지 500점을 드립니다.

* 한빛 웹사이트에서 구입한 도서는 자동 인증됩니다.

* 도서인증은 일 3권, 월 10권, 년 50권으로 제한됩니다.

* 절판도서, eBook 등 일부 도서는 도서인증이 제한됩니다.

닫기

해당 상품을 장바구니에 담았습니다.이미 장바구니에 추가된 상품입니다.
장바구니로 이동하시겠습니까?

자료실