최근 인터넷 산업 분야에서 메타버스라는 키워드가 새로운 화두로 떠오르게 되면서 3차원 가상 공간과 가상 캐릭터 제작에 사용된 기술이 더 큰 주목을 받고 있다. 이러한 기술은 그동안 주로 게임 산업에서 발전되어 왔는데, 메타버스의 급부상과 함께 게임 제작뿐만 아니라 영화, 드라마, 방송 미디어는 물론, 콘서트, 쇼핑몰 같은 다양한 분야에 널리 활용되는 등 오늘날 팬데믹 시대에 걸맞는 미디어 제작 도구로 활용되면서 이제는 정치, 경제, 사회, 문화의 모든 방면으로 확산되고 있다.
게임 엔진은 가상 세계와 가상 캐릭터에 관련된 기술을 가장 효과적으로 집약한 최첨단 소프트웨어다. 최근 추이에 따라 게임 엔진의 활용범위가 넓어지면서 더욱 정밀하고 고도화된 가상 공간에 대한 요구도 한층 높아지고 있다. 또한 이러한 환경에서 많은 실무 개발자들이 실감하는 것이 바로 수학의 필요성이다. 그런데 막상 수학에 대해 즐겁게 이야기하는 사람은 그리 많지 않다. 학창 시절 주입식, 암기식 수학 교육으로 인해 학습을 중도 포기했거나, 학창 시절에는 수학 실력이 그럭저럭 평균 이상이었지만, 현업에서 패턴화된 개발을 반복하다 보니 어릴 적 쌓아둔 수학 지식마저 점점 쇠퇴해가는 현실을 느끼는 사람이 많을 것이다. 나 또한 그랬다.
희미해진 수학에 대한 기억을 되살리기 위해 중고등학교 때 배웠던 수학 교과서를 다시 펼쳐봐야 한다는 사실은 막막하기도 하다. 학창 시절 수학을 좀 더 열심히 공부하지 않았던 과거의 나 자신을 탓하게 된다. 하지만 이는 과거의 내가 잘못한 것이 아니라, 입시만을 위한 주입식 교육으로 점철된 수학 교육 시스템 탓이다. 나의 경험을 이야기해보자면, 게임 엔진에서 콘텐츠 만드는 일을 반복하는 것에 지루함을 느껴, 나만의 게임 엔진을 만들어보자는 결심을 하면서 수학의 필요성을 자각하게 됐다. 이때부터 수학에 관련된 다양한 책과 위키피디어 사이트, 인터넷 정보를 통해 굳어버린 뇌를 하나씩 풀어나갔다. 나름의 방법으로 수학에 대한 감각을 회복하자, 깨닫게 되었다. 과거의 나는 딱히 잘못한 것이 없었다. 굳이 나의 잘못을 꼽자면, 수학을 어떻게 활용해야 할지 몰랐으며, 남이 시키는 대로 문제의 답만 구하려 했다는 점이다. 지금 생각해보면 순서가 잘못된 것이었다. 수학을 배우기 전에 내가 무엇을 해야 할지 정하는 것이 가장 중요했다.
그렇기에 이 책은 전반적인 수학 이론을 다루는 교양서도, 특정 분야를 심도 있게 다루는 전문 수학 서적도 아니다. 수학 서적에서 흔히 볼 법한 복잡한 방정식의 해를 구하는 문제는 이 책에서 등장하지 않는다. 게임 제작, 컴퓨터 그래픽스에 관심 있는 사람이 모니터 화면에 무언가를 표현할 때 필요한 수학 개념을 실용적인 방법으로 소개하는 것이 이 책의 가장 큰 목표다. 이는 다시 수학을 공부하려 했을 때 막막했던 과거의 내 심정을 반영한 것이다.
이 책을 쓰기 위해 가상 공간의 가상 캐릭터를 가장 단순한 형태로 보여주는 CK소프트렌더러라는 예제를 먼저 제작했다. 그 후에는 역순으로, 예제를 만드는 데 필수적인 수학 요소를 정리해 기록하면서 가장 밑바닥에 있는 수학적 공리까지 도달한 후에야 비로소 책의 목차를 만들 수 있었다. 게임 제작에 관련된 재미있는 움직임과 화려한 예시를 얼마든지 담을 수도 있었지만, 수학적 원리와 응용 방법을 설명하는 데 이미 많은 지면을 할애했을 뿐더러 이 책의 주제가 게임 수학이다 보니 무엇보다도 근본적인 원리에 집중하기 위해 실습 예제는 최대한 간단하게 고안했다(사실적이고 역동적인 움직임을 구현하고 화려한 비주얼을 만드는 컴퓨터 그래픽스의 원리가 궁금한 독자들은 다른 서적을 참고하기 바란다).
이 책의 초고를 작성하면서 책 내용을 바탕으로 틈틈이 두 학기 동안 강의하면서 나의 노력이 헛되지 않았음을 확인할 수 있었다. 내심 수학을 두려워 했던 학생들이 더 이상 수학을 어려워하지 않게 됐으며, 학습한 수학 이론을 활용해 가상 공간의 캐릭터를 제손으로 마음껏 창조해낼 수 있게 됐으니 말이다.
이 책의 내용이 매우 쉽다고 과장하지는 않겠다. 책 내용을 모두 이해하고 자기 것으로 만드는 과정은 험난할지도 모른다. 쉽지 않은 여정이겠지만 독자 여러분이 이 책을 통해 수학에 대한 해방감을 만끽해볼 수 있다면 저자로서 큰 보람이겠다. 여러분의 건승을 기원한다.
언리얼 엔진 프로그래밍 책을 저술하는 것은 상당한 자신감을 필요로 한다. 20년간 최고의 게임 엔진이라는 찬사를 받아온 언리얼 엔진이라는 이름의 무게 때문이다. 언리얼 엔진 프로그래밍을 이해한다는 것은 게임 엔진 기술의 최고봉을 정복한다는 상징성을 지니므로 프로그래밍 이상의 큰 의미를 가진다.
그래서 나는 언리얼 엔진을 몇 년 동안 공부해왔고, 이제서야 언리얼 엔진을 잘 모르는 사람들에게 소개할 정도가 됐다고 생각해 책을 집필하기로 마음먹었다. 이 책은 언리얼 엔진을 공부하고 싶은 학생과 아직 언리얼 엔진을 경험하지 못한 프로그래머를 대상으로 한다.
에픽게임즈 홈페이지에는 많은 문서와 튜토리얼 영상이 있으며, 이를 통해 언리얼 엔진의 다양한 기능을 학습할 수 있다. 하지만 들여다볼수록 언리얼 엔진은 엔진이 제공하는 각각의 훌륭한 기능보다 게임 개발을 어떻게 설계해야 하는지 전체적인 가이드를 제시하는 엔진이라는 점에서 더 매력적이라는 느낌을 강하게 받았다.
비유하자면 언리얼 엔진은 개발자가 숲과 나무를 모두 바라보고 개발할 수 있도록 설계한 엔진이고, 여기에는 에픽게임즈의 개발 철학이 담겨 있다. 아쉽게도 에픽게임즈 홈페이지에서는 이러한 철학을 찾아볼 수 없다. 그렇기 때문에 언리얼 엔진 소스 코드를 분석하고, 그것들이 왜 만들어졌는지를 개인적으로 유추할 수밖에 없었다. 이 책은 내 나름대로 언리얼 엔진을 분석해 정리한 것이다.
프로그래머 관점에서 언리얼 엔진 프로그래밍을 본격적으로 시작하려면, 다음과 같은 시스템을 이해하고 사용할 수 있어야 한다. 이 모든 것을 한 번에 익히기에는 학습할 분량이 많으므로, 쉬운 내용부터 단계별로 예제를 구성했다.
■ 언리얼 엔진의 빌드 시스템
■ 언리얼 엔진의 모듈 시스템
■ 언리얼 엔진 실행 환경(런타임)
■ 언리얼 오브젝트의 선언과 관리
■ 언리얼 엔진 C++의 유용한 기능
콘텐츠 제작자 입장에서 언리얼 엔진으로 게임 콘텐츠를 제작할 때는 다음에 제시한 각 요소를 설정하고 설계하는 능력을 갖춰야 한다. 이 또한 프로그래밍 난이도에 맞춰 단계별로 학습할 수 있도록 예제를 구성했다.
■ 게임 콘텐츠를 수용하는 환경인 월드(World)
■ 게임 콘텐츠의 기본 단위 액터(Actor)
■ 게임플레이가 진행되는 배경 레벨(Level)
■ 게임에 입장한 플레이어(Player)에게 부여되는 액터
■ 게임의 승패를 결정하는 룰, 게임 모드(GameMode)와 관련 액터
■ 게임 제작에 필요한 각종 보조 기능
이 책을 읽고 위에 언급한 모든 요소를 이해하길 바란다. 언리얼 엔진을 충분히 이해한다면, 그 지식은 앞으로 다른 엔진을 사용하거나 스스로 엔진을 만드는 경우에도 게임 콘텐츠를 어떻게 설계하고 만들어가야 하는지 알려주는 유용한 나침반이 될 것이다.