게임 엔진 개발하기 (2023.01.29)
여러 게임 개발 관련 서적들을 읽고 실제로 게임 엔진을 개발하는 과정을 책처럼 기록할 예정입니다.
1. 게임 엔진이란?
게임 엔진이라는 것은 게임을 만들 때 좀 더 간편하게 만들게 하기 위해서 제작하는 기반이라고 생각하면 됩니다. 게임을 개발할 때, 좀 더 게임 그 자체에 집중하기 위해서 렌더링 기능, 사운드 기능, 애니메이션 기능 등등을 미리 구현해두고, 최종적으로 게임을 만들 때에는 이미 구현된 함수만 호출하는 식으로 해줄 수 있는 도구입니다. 예를 들어 젤다의 전설을 직접 구현한다고 했을 때, 3D 모델, 배경음악, 효과음 등의 리소스를 넣기만 하면 알아서 잘 렌더링하고 재생해주면 매우 간편하겠죠? 물리 처리나 렌더링 처리에 신경 쓸 시간에 게임 디자인에 집중할 수 있으니까요!
그렇다면 게임 엔진이라는 것을 직접 개발해보도록 하자.
솔직히 이 글을 읽어서 이해하려면 기초적인 컴퓨터 과학 지식이 충분해야 한다. C/C++, 자료구조, 운영체제, 컴퓨터 구조 등등 말이다. 하지만 최대한 그렇다 하더라도 이해하기 쉽도록 비유를 들어 자주 설명하도록 하겠다.
1.1. 개발이란?
기본적으로 프로그램을 만든다는 것은 공장을 만든다는 것과 동일하다. 공장에서 제품을 만들 때 무에서 유가 창조되는 것이 아니다. 전기 사오고, 물 끌어오고, 기계 사오고, 사람 고용하고…
게임 엔진 개발도 마찬가지다. 단순히 당신이 있다고 개발이 되는 것이 아니다.
그렇다면 게임 엔진 개발이라는 것은 무엇일까?
육하원칙에 따라 기술해보자:
1.1.1. 누가 개발하는가?
바로 당신!
물론 만약 당신이 취업을 준비하고 있는 대학생/취준생이라면, 협업을 하는 것을 매우 추천한다. 커뮤니케이션 능력은 그 어떤 회사든, 조직이든, 프로그램 개발이든 매우 매우 중요하다.
개발 능력이 매우 뛰어나도 커뮤니케이션 능력이 형편 없다면 회사에서 사랑 받기 어렵다 ㅠㅠ
회사라는 것은 결국 사람들의 집합이기 때문에 사람 간에 잘 지내는 사람이 회사 생활을 잘 할 수 밖에 없다!
“그럼 난 회사에 다니기 싫어요!” 라고 하는 분들도 있을 것이다. 그렇다면 화이팅이다. 혼자서 게임 엔진을 개발한다는 매우 고된 길을 걷는 것이다. 물론 즐겁겠지만 때때로 그 일의 용량에 짓눌려 힘들 수도 있다 ^_^…
1.1.2. 언제 개발하는가?
개발자는 건강이 제일 중요하다 ^^ 밤에 개발 잘 된다고 부엉이 되지 말자. 여러분 곰곰이 생각해보면 인생의 대부분을 오전에 일어나고 밤에 자는 루틴으로 살아 왔었다. 이제 와서 몸을 망치지 말도록 하자. 개발은 밤/새벽이 아닌, 오전~저녁 중에 하고, 삼시세끼 잘 챙겨 먹고 잘 때 자자.
1.1.3. 어디서 개발하는가?
당연히 개발하기 가장 편한 곳에서 개발하면 된다. 집이면 집, 카페면 카페.
1.1.4. 무엇을 개발하는가?
우리가 개발할 것은 게임 엔진이고, 궁극적으로는 게임 엔진으로 게임을 개발할 것이다. 게임 엔진을 먼저 개발하고 게임을 개발하는 것이 아닌, 애초에 게임 개발을 목적에 두고 필요성에 따라 게임 엔진을 개발하는 방법으로 진행할 것이다.
그렇다면 무슨 게임을 개발할 것인가?
지금으로써는 불분명하지만, 일단은 간단한 3D 오픈월드 게임을 개발하지 않을까 싶다. 레퍼런스를 두자면 베데스타 스타일의 1인칭 오픈월드여도 좋고, 마인크래프트 스타일의 복셀형 오픈월드여도 좋고, GTA 스타일의 3인칭 오픈월드여도 좋다.
일단 확실한 것은
- 개발자 중심의 개발
- 아티스트에 의존하는 기술은 최대한 배제
- 최대한 많은 것들을 동적으로 생성
- Procedural?
- 모든 것이 동적인 세상
- Lighting / Shadow도 동적. 최대한 baking 단계 없도록
- 렌더링도 래스터화 완전 배제하고 RT만 사용할 수도…
- 물리 / 충돌 처리도 동적.
- 시네마틱 또한 완전 동적.
- Lighting / Shadow도 동적. 최대한 baking 단계 없도록
1.1.5. 어떻게 개발하는가?
일단 위에서 개발할 게임을 보니 대충 다음과 같은 소요가 필요해보인다:
- 고성능이어야 함
- Windows 기반이지만 멀티 플랫폼이어야 함
- MacOS
- Linux
- Android / iOS
- (가능하다면) Console
- 재미 삼아 과거 콘솔 기반으로 개발해볼 수도…
일단 고성능에 Windows 기반이라는 것부터 이미 C/C++은 필수적이다. Windows에서는 Direct3D를 기반으로, MacOS와 iOS에서는 Metal을 기반으로, Linux와 Android에서는 Vulkan을 기반으로 갈 것 같다.
Windows에서 이미 Visual Studio를 활용하여 Windows나 Android 개발은 가능하다.
MacOS나 iOS 개발은 Visual Studio도 가능은 한데, 아마 XCode를 주로 활용하지 않을까 싶다.
Linux 개발은 Linux 플랫폼에서 진행할 것 같다. 마찬가지로 wsl을 통해 Visual Studio로 개발 가능하면 그 쪽에서 하고.
1.1.6. 왜 개발하는가?
재미 있기 때문이다 ^_^
2. Win32
Win32 API를 사용하기 위해서는 우선 Visual Studio가 설치 되어있어야 한다. 이 글에서는 Visual Studio 2022를 사용한다. 설치할 때 반드시 Desktop development with C++ 옵션을 선택하여 설치하도록 하자.
설치가 끝났다면 Visual Studio로 새 프로젝트를 생성할 때 Windows Desktop Wizard 혹은 Windows Desktop Application 프로젝트를 통해 빈 Win32 프로젝트를 만들 수 있다.