불과 얼마 전만 해도 게임 업계에서는 전문가 몇 명이 상업용 비디오 게임의 프로그래밍에 필요한 지식을 독점하고 있었다. 마이클 아브라쉬(Michael Abrash)의 『Graphics Programming Black Book』 같은 기념비적인 책이 있었다 해도, 그 당시 AAA 게임(대작 게임)에 쓰이는 실전 알고리즘은 마치 흑마법이나 금단의 지식처럼 베일에 싸여 있어서 배우기가 쉽지 않았다. 정규 교육 과정을 통해 게임 프로그래밍을 배우려면 소수의 전문 직업학교밖에 선택지가 없었다. 하지만 지난 10여 년간 비디오 게임 교육은 큰 변화를 겪어 왔다. 이제 유명 대학 중에도 비디오 게임 프로그래밍에 관한 과정과 학위를 제공하는 학교가 생겼으며 그 수는 매년 늘고 있다.
비디오 게임 교육 과정이 늘어나면서 게임 회사가 신입 프로그래머에게 바라는 기대치가 너무 높아지는 부작용도 생겼다. 2000년대 초만 해도 초보 프로그래머에게 컴퓨터 과학에 관한 확고한 배경지식과 비디오 게임 제작에 관한 열정 이상을 기대하는 회사는 없었다. 단지 탄탄한 기초를 바탕으로 실무를 통해 더욱 수준 높은 게임 프로그래밍 기법을 배워 나가길 바라는 정도가 고작이었다. 요즘은 중점적으로 게임에 관한 교육을 받을 수 있는 훌륭한 교육 기관이 많으므로 신입 프로그래머라도 게임 프로그래밍에 관한 다양한 경험을 지니고 있을 것이라고 기대하는 회사가 늘고 있다.
굳이 또 게임 프로그래밍 책을 쓴 이유
비디오 게임 과목이 늘어나면서 대학 수준에 맞는 책의 수요도 늘어났다. 하지만 현재 시중에 나와 있는 게임 프로그래밍 책은 대부분 취미로 게임 제작을 배워보려는 개발자나 이미 게임 업계에 수년간 종사해온 전문 개발자를 대상으로 하고 있다. 양쪽 다 대학 수업에 쓰기에는 무리가 있었다. 취미용 개발서는 대학생에게 가르치기에 너무 수준이 낮았고 전문가용 개발서는 대학생이 제대로 이해할 수 있는 수준을 넘어서기 일쑤였다.
'ITP 380: 비디오 게임 프로그래밍'은 내가 서던 캘리포니아 대학교(USC)에서 가르치는 과정 중 하나다. 수업에 들어오는 학생은 보통 프로그래밍의 기본을 잘 알고 있는 2, 3학년이다. 게임 메이커(Game Maker)나 유니티(Unity) 같은 게임 엔진을 사용해서 간단한 게임을 만들어봤던 학생도 있지만, ITP 380을 통해 실질적인 비디오 게임 프로그래밍을 처음 접하는 학생이 대부분이다. 이 책이 내 수업은 물론, 다른 대학의 비슷한 수업에서 지금껏 미흡했던 부분을 메꿔주는 참고서 역할을 할 수 있으면 좋겠다. 대학생을 대상으로 쓴 책이지만 게임 프로그래밍에 흥미가 있는 사람이라면 이 책의 진가를 알아볼 수 있으리라 믿는다.
이 책의 앞쪽 열두 장은 플랫폼, 프레임워크와 상관없는 내용이다. 즉 프로그래밍 언어나 타깃 플랫폼에 상관없이 다양한 2D 게임과 3D 게임에 적용할 수 있는 내용이 대부분이다. 특정 프레임워크의 특정 버전에 단단히 얽혀서 몇 년만 지나도 쓸모가 없어지는 다른 책과 확연히 다른 특징이다. 미래를 내다볼 수는 없지만 적어도 이 책은 꽤 오랜 시간 동안 가치를 지닐 것으로 생각한다. 또 학교마다 수업에 사용하는 언어와 프레임워크가 다르다 해도 큰 상관없이 유용하게 쓰일 수 있는 책이다. 그렇다고 예제 코드가 쓸모없다는 뜻은 절대로 아니다. 이와 같은 이유로 마지막 두 장에서는 두 종류의 프레임워크로 작성한 두 개의 게임을 소개한다. 물론 예제 코드도 제공한다.
오늘날 비디오 게임은 가장 인기 있는 엔터테인먼트 중 하나다. 게임 전문 조사 기관인 뉴주(Newzoo)의 「세계 게임 시장 보고서(Global Games Market Report)」에서는 2017년 게임 매출액이 1,000억 달러를 상회한다고 평가했다. 이 엄청난 금액은 비디오 게임이 얼마나 인기 있는지를 보여준다. 그만큼 비디오 게임 시장은 거대하고, 게임 프로그래머의 수는 항상 부족하다.
게임의 폭발적인 인기와 더불어 게임 기술의 장벽은 낮아졌다. 이제 한 명의 개발자가 여러 유명한 게임 엔진이나 툴을 사용해서 상을 받거나 히트 게임을 제작할 수 있게 됐다. 특히 게임 디자이너에게 이러한 툴은 많은 도움이 된다. 그렇다면 여기서 C++로 게임을 프로그래밍하는 방법을 배운다는 것은 어떤 가치가 있을까?
여러 게임이나 툴을 한 걸음 뒤에서 보면 핵심 코어가 C++로 작성된 것을 확인할 수 있다. 즉, C++는 툴이나 게임 엔진을 사용해서 제작된 게임의 모든 배후에 있는 근본적인 기술이다.
또한 <오버워치>, <콜 오브 듀티>, <언차티드> 등 오늘날 가장 인기 있는 게임들을 출시한 일류 개발자는 아직도 C++를 사용한다. 왜냐하면 C++는 성능과 편리함이라는 훌륭한 조합을 제공하기 때문이다. 그래서 앞에서 예시로 든 게임들을 개발한 회사 중 한 곳에서 일하고 싶은 개발자라면 특히 C++를 깊이 있게 이해해야 한다.
이 책에서는 실제 게임 개발자가 사용하는 여러 기술과 시스템을 파고든다. 이 책의 많은 내용은 거의 10년 동안 서던캘리포니아대학교(USC, University of Southern California)에서 가르친 비디오 게임 프로그래밍 강의에서 비롯됐다. 이 책에서 사용한 접근법은 많은 학생이 비디오 게임 산업에서 성공할 수 있도록 도움을 줄 것이다.
또한 이 책은 게임 프로젝트 데모에 통합된 코드의 실제 동작 구현에 특히 집중한다. 게임처럼 다양한 시스템이 어떻게 작동하는지 이해하는 것은 중요하다. 이런 이유로 이 책을 읽는 동안에는 소스 코드를 언제든지 참조할 수 있도록 가까이 둬야 한다.