저자: 『IT EXPERT, 3D 게임 프로그래밍』의 저자 김용준(
http://3dstudy.net)
스타크래프트, 리니지2, A3, 디아블로…
현재 대한민국을 뒤흔들고 있는 게임들이다. 상당수의 사람들이 게임을 하고, 이런 게임을 하다보면 자연스럽게 "아! 이런 게임을 한번 만들어 보고 싶다"라는 생각을 하게 된다. 필자 역시 어릴적 Apple2라는 컴퓨터의 울티마라는 게임에 심취해서 며칠밤을 꼬박 새곤 했으니 그 심정은 누구보다도 잘 알고 있다. 그렇다면 지금 게임개발자가 된 나의 입장에서 게임개발자가 되고 싶어하는 사람들을 위해서 어떤 것들을 준비하고 공부해야 하는지 얘기해 보고 싶다.
가장 인기 있는 게임 중에 스타크래프트라는 것이 있다. 스타크래프트는 DirectX라는 도구(SDK)를 사용해서 개발된 게임으로 여기에는 다양한 수학적 지식들이 녹아들어 있다. 가장 대표적인 예로 유닛(마린이라 가정하자)이 헌터맵 1시에서 11시 방향으로 이동한다고 가정하자. 이때 마린은 다양한 길을 찾게 되는데, 그 중에서 가장 최단거리를 선택하게 된다. 이를 길찾기(path finding)라 하고, 인공지능기법의 하나이며, 다양한 수학적 기법이 동원된다. 테란의 골리앗이나 프로토스의 드라군의 동작이 어색한 것은 이 길찾기 기법 중 다른 기법보다 일부러 조금 행동이 둔한 기법을 사용했기 때문이다. 이들 유닛들이 너무 덩치가 커서 길찾기 기법을 사용해도 그다지 좋은 답이 나오지 않는 것도 이유가 되겠다. 길찾기 기법의 세계챔피언은 A*([에이 스타]라고 읽음)라는 알고리즘이 있다.
[그림 1] 스타크래프트에서 길을 찾아가는 모습
용어정리
꼭지점(Vertex): 2차원이나 3차원 공간에서 위치(position)를 나타내는 점(point). 점을 나타내는 용어로 수학적인 연산에서는 "점"을, 프로그래밍에서는 "정점"이라는 용어를 많이 사용한다. 화면상에 실제로 보이게 되는 물리적인 점은 화소(pixel)라고 한다.
폴리곤(Polygon): 3개의 정점이 모이면 하나의 면(face)을 만들 수 있는데, 이렇게 3개의 정점으로 만들어진 삼각형을 폴리곤이라 한다.
출처: 『IT EXPERT, 3D 게임 프로그래밍』 1장 1절 기초용어 중에서
|
화제를 바꿔서 최근의 3차원 게임들을 살펴보도록 하자.
3차원 게임이란 정확히는 3차원 그래픽을 지원하는 게임으로, 대표적인 예가 철권, 버추어 파이터 등이 되겠다. PC에서는 언리얼이나 퀘이크 같은 것들이 있으며, "리니지2" 역시 3차원 그래픽 게임이다. 3차원 게임은 스타크래프트 등의 2차원 게임과는 표현방식이 근본적으로 다르다. 2차원의 경우 게임 개발시 그래픽 디자이너들이 그린 그림을 정확한 크기로 잘라서 화면에 찍어주기만 하면 된다(이를 "스프라이트"라 부름). 그러나 3차원의 경우는 실제로 보이지는 않지만 공간상에 꼭지점(Vertex)들을 찍어놓고 이들 꼭지점을 연결하는 폴리곤(polygon)이라는 기법을 사용한다. 철권등의 게임에서는 이들 폴리곤 데이터만을 가지고 필요할 때 즉시 "화랑"이나 "진" 등의 등장인물을 그려낸다. 따라서 2차원 게임보다 더욱 고난이도의 기술이 필요한 것이다. 이때 폴리곤을 화면에 보이게 하거나, 각종 기술을 표현하기 위해 애니메이션을 시킬 때 3차원 게임에서는 행렬(matrix)을 사용한다. 행렬은 가장 큰 특징으로 교환법칙은 성립하지 않지만, 결합법칙이 성립한다는 점이 있다. 실제 게임에서는 이 점을 활용해서 수천개의 폴리곤에 애니메이션 행렬을 10번 이상 곱해야 하지만, 결합법칙이 성립한다는 점을 이용해서 단 한번의 곱셈만으로 처리한다. 수학이 없었다면 지금 우리는 현란하게 움직이는 화랑의 태권연무를 볼 수 없었을 것이다.
[그림 2] 행렬연산을 통해 그려진 폴리곤 캐릭터
단순히 게임뿐만 아니라, 컴퓨터 소프트웨어 개발에 필요한 모든 기술의 밑바닥에는 "수학"이라는 논리가 기본으로 깔려있다. 현대적 컴퓨터의 구조를 설계하고 만들어낸 사람이 수학자 "폰 노이만"이라는 사실만으로도 수학과 컴퓨터의 연결관계는 그 뿌리가 깊다고 할 수 있다.
프로그래머가 된다는 것!
그 중에서도 게임 프로그래머가 된다는 것은 다른 어떤 종류의 프로그래머 보다 월등히 많은 능력과 노력을 요구한다.
다른 프로그램이라면 Visual Basic 등의 쉬운 개발도구도 있지만 게임의 경우 전통적인 C/C++을 사용하는 것이 대부분이며, 요즈음 게임의 추세에 맞춰 온라인 게임을 개발한다면 네트워크나 데이터베이스 프로그래밍도 할 수 있어야 한다. 그리고 각각의 게임특성에 맞게 인공지능이나 자료구조 등의 기법과 3차원 그래픽을 처리하기 위한 기초적인 수학능력이 있어야 한다. 행렬, 삼각함수 정도는 흔하게 사용된다. 이 모든 것이 준비가 되면 윈도우 프로그래밍 기술과 다이렉트X 프로그래밍 기술을 익힐 차례이다. 여기까지가 게임 프로그래머가 되기 위한 기본적인 요구사항이다. 최근에는 하프라이프2로 촉발된 물리엔진의 가능성도 중요시 되고 있다. 게임개발자가 이제는 물리학도 연구해야 하는 셈이다.
자신이 머리속에서 상상했던 것들이 현실로 나타날 때의 즐거움은, 오늘도 이땅의 수많은 게임 개발자들을 모니터 앞에 붙들고 밤새우게 만들고 있다. 그 즐거움을 다른 곳에서는 느낄 수 없기에 이 밤도 하얗게 지새우고 있는지 모를 일이다.