게임 제작을 하면서 몇 년간 대학과 학원에서 강의도 했던 게임 업계 아재입니다.
제가 학생들 가르칠 때 말씀 드렸던 몇 가지 내용입니다.
수학:
다 알 필요는 없어요. 정석 책 볼 필요 없습니다. 도움 된다는 분들 있지만 제 생각은 별 도움 안됩니다. 고등학교 때 안 좋은 기억이 떠오를 수 도 있고...
암튼 클라이언트 게임프로그래머가 가장 많이 수학이 삼각 함수, 벡터, 행렬입니다. 정석보다 대학에서 가르치는 선형 대수학이나 대학 수학 책이 더 도움이 됩니다.
책을 구입한다면 연습문제가 많은 책을 추천합니다. 그리고 혹시 선형 대수학에서 미적분 나오면 건너 뛰세요. 미적분 알면 좋지만 써 볼일 거의 없을 것입니다.(10만줄에 한번 나온다고 생각하시면 됩니다.)
제가 본 책 중에서 제 생각과 가장 근접한 책은 "3D 게임 프로그래밍 & 컴퓨터 그래픽을 위한 수학 -류광, 정보문화사" 입니다.
이 책을 지옥에서라도 구할 수 있다면 구하세요.
물리:
실제 게임에서 다루는 물리는 고전 역학(뉴턴 역학)입니다. 제 생각은 고등학교 물리 교과서는 좀 떨어집니다. 이유는 3차원 벡터를 제대로 이용하지 않기 때문입니다.(이 부분은 수학도 마찬가지 입니다.)
대학에서 배우는 일반 물리 서적 중에서 힘과 운동에 관련한 부분에서 문제가 많은 책을 고르세요.
간혹 폭격기, 견인포 또는 잠수함 어뢰로 선박 격침 시키는 것을 계산하는 문제가 있는 책이 있습니다. 이런 문제들이 게임 프로그램에 도움이 됩니다. 그런 책을 구입하세요.
게임 엔진:
혹시 엔진 만들고 싶다는 분들 있을 텐데요, 이론이라면 참 많이 들어 갑니다. 제 생각은 평범한 사람이 이론을 공부했다고 에디터에서 엔진을 바로 코딩할 수 있는 분들은 별로 없다고 봅니다.
엔진은 남들이 만든 것을 보는 것이 제일 많이 공부가 됩니다.
저는 쫌 오래 됬지만 irrlicht를 강력히 추천합니다. 꽤 오래 전에 ogre도 봤었는데 뭔가 지우고 바꿔보고 떼내어 보고, 쪼물락 거리기가 irrlicht 엔진이 게임 업계 초보 였을 때 참 좋았습니다.
제가 몇 년전에 근무했던 어떤 외국계 회사는 이 엔진을 개량해서 쓰고 있더군요.
엔진 개발한다면 자료 구조, 그래프, 추상화 등 컴퓨터 공학 과목에서 중요한 이론들 여기서 빛을 발합니다. 아 그렇다고 엔진 만드는데 자료구조 먼저 봐야지 할 필요는 없습니다. 공부는 필요에 의해서 하는 것이니까 그 때 그때 하세요.
프로그래밍 실력:
뭐든지 많이 만들어 보세요. 한만큼 실력이 는다는 것은 다들 인정하실 것입니다. 저는 그 중에서 툴을 많이 만들어 보라고 합니다. 툴은 만들면, 특히 설계, 자료구조, 자인 패턴 등에 대해서 실력이 많이 늡니다.
맥스나 포토샵 등의 플러그인도 꼭 제작해 보세요.
다른 언어들:
현재 사용하고 있는 언어를 2년 이상 써서 익숙해져 있다면 다른 언어 써볼 기회가 있다면 하세요. 저는 php, java, c#, visual basic, php, lua 등 대충 쓸 줄압니다.
어떻게 알게 되었는 가 생각해보면 php는 대학원생 여자 후배 좋아해서 봉사활동을 했었고, java 는 혹시 sun 자격증이 있으면 도움 될까 해서 땄었는데, 써 본적 없다가 안드로이드에서 외부 라이브러리 jni관련 작업 땜에 쓰고 있습니다.
visual basic은 c# 나오기 전 excel exporting 할 때 c로 고생했는데 몇시간 만에 필요한 프로그램 나오더군요. 한 동안 잘 썼고..., lua는 스크립트를 프로그램에 내장시키기 위해서 사용했었습니다.
c#은 유니티로 몇년간 밥 벌어 먹고 살았기 때문에... 이래다보니 늙다리인데도 암튼 현 직장에서 이것 저것 잡부처럼 그냥 다 합니다.
암튼 다른 언어 써보면 그들 언어의 목적과 장점을 볼 수 있구요, 어떤 경우에는 언어들간 공통점이 많이 보이기도 하고, 주류로 사용하는 언어의 깊이를 높이기도 합니다. 그리고 또 다른 새로운 언어 배우는 데 부담감이 많이 사라집니다.
그냥 쓰게 된다고나 할까... 그런 것이 보입니다.
책:
책 많이 읽으세요. 저는 예전에 관련 기술을 구할 때가 마땅치 않을 때 단 한 줄이라도 도움이 된다면 구입했었습니다.
요즘은 스택오버플로를 많이 의존 하지만 그래도 새로운 기술은 책을 먼저 구해서 읽어보는 편입니다.
어떤 책은 중요한 책인데 절판 되어서 구할 수 없을 때도 있습니다. 이길을 계속 가겠다 싶으면 중요한 책들은 구입해 놓으세요.
이런 말씀 드려도 몇 년있으면 다 낡은 기술이 될 테인데 뭣하러 돈 아깝게 버리나? 할 수 있지만 오래되니 가장 추억이 남더군요.
가끔씩 대학교 때 후배 친구 녀석 한 때 반 강제로 뺏은 강의프린트 제본한 터보씨 책 보면서 그 때의 기억을 떠올리곤 합니다.
블로그:
저는 블로그는 꼭 사용하라고 합니다. 블로그가 처음에는 별 내용이 없어서 쓸쓸하지만 자신이 연습한 짬짬히 코드 올려 놓으면 몇 달만 지나도 꽤 도움이 많이 됩니다.
일단 블로그 올리는 행위가 내 코드를 정리한다는 과정이 있기 때문에 기억이 잘 됩니다.
저 같은 경우도 게임 프로그래밍 독학할 때 사설로 홈페이지 만들어서 정리해서 올려 놓곤 했었는데(아.. 이 때도 php 했네요) 강의할 때 많은 도움이 됬었고 기억력이 떨어진 지금도 저 스스로에게 많이 도움이 되었습니다.
기타:
마지막으로 모든 것을 다 이해해야 게임을 만들 있는 것은 아닙니다. 프로그램을 잘 모르는 고등학생도 게임 만드는 것을 본적이 있었고(그것도 c 언어로), 서울에 있는 상당히 좋은 대학교 나왔어도 시작 조차 하지 못하는 사람도 봤습니다.
제 생각은 게임프로그래밍은 응용이 아주 강하기 때문에 알고 있는 지식을 조합해서 최대한 활용하려는 궁리를 하는 것이 더 중요하다고 생각합니다.
산업계가 원하는 것이 T형 인재라 하는데 그딴 거 필요 없고 게임 업계에서 "지식은 빈대떡 붙이듯 넓고 얇게."
이론을 깊이있게 물으면 내가 그걸 이해하면 기술 이사나 교수하지 이거 하겠냐 라는 반문도 꼭 하시길...