2017년 쯤에 '나도 직접 게임 프레임워크를 만들어보자!'
하는 마음에 덜컥 시작해버린 프로젝트입니다.
이 게임 프레임워크가 어느정도 커지다보니 결국 게임 엔진을 만들자로 방향이 바뀌었습니다.
아래에 만들게 된 계기에 대해 설명을 합니다!
1. 처음엔...
이 프로젝트 이전까지 게임 프로젝트 몇가지를 진행했었는데
처음엔 무작정 Java와 OpenGL 또는 안드로이드 자체적으로 제공하는 Canvas 개념으로만 게임을 만들다가 유니티를 통해 게임 엔진의 편리한 '맛'을 느껴버렸습니다...
그렇게 유니티를 어느정도 다루다보니 문득 이런 생각이 떠올랐습니다.
'유니티....만 사용하면 프로그래머로써 살아남을 수 있을까..?'
물론 대부분의 모바일 게임은 유니티가 정말 압도적으로 많습니다.
그러나 유니티가 생산성으로 너무 뛰어나 유니티만 할 줄 안다면 생산성에 특화된 노예(?)로만 되지 않을까 걱정이 정말 컸습니다.
그러다 마침 주력 언어로 밀고있는 C++을 스크립트로 사용하는 언리얼을 보고 언리얼을 공부를 하게 되었습니다!
2. 언리얼 공부 시작!
유니티를 겉햝기로만 하다가 언리얼을 막상 보니 뭔가 적응하는게 좀 힘들었습니다.
그래서 언리얼을 공부하려는 친구와 같이 언리얼의 코어를 연구해보기로 했습니다.
그렇게 한달정도 언리얼의 구조를 대충 확인하며 코어와 컴포넌트 형태의 게임엔진에 흥미를 가지게 되었습니다.
3. 컴포넌트?
저는 당시에도 프로그래밍을 시작한지 4년이 지난 무렵이였음에도 당시 구조에서 본 컴포넌트라는 개념을 처음보게 되었습니다.
컴포넌트가 생산성에 있어 눈에 띄게 효과적이였기 때문에 저에겐 너무 매력적으로 다가오게 되었습니다.
그렇게 제 모든 대학 과제들을 컴포넌트화하여 제출하기 시작했습니다.
당시 컴포넌트를 향한 광기(?)는 옆의 사진과 비슷한 것 같아 사진으로 간단하게 비유를 해봤습니다.
4. 결국 이 프로젝트를 만들게 되었습니다.
이런 광기(?)는 제가 언리얼을 공부하는걸로만 끝나지 않았습니다. 이전에 제작했던 JAVA언어로 된 OpenGL기반으로 만들었던 게임 프레임워크의 경험을 기반으로 뭔가 만들어보자고 생각을 하게 되었습니다.
게다가 그래픽스에도 큰 관심을 보이기 시작할 때라서
엔진을 사용하지 않는 순수한 C++ 프로젝트 형태의 게임 프레임워크를 컴포넌트를 담는 컨테이너를 코어로 설계하여 만들기로 했습니다.
번외. 게임 엔진 제작은 너무 시간낭비가 아닐까요?
1년이란 시간은 정말 많은 것을 배울 수 있는 시기입니다.
그러나 해당 게임 엔진을 개발하는데 5년...
그런데도 아직 실제로 써먹지도 못하는 단계...
...좀 시간낭비가 아닐까요?
너무 슬프게도 이 질문은 해당 프로젝트를 진행하면서 주변에서 자주 들었습니다.
하지만 누군가 게임 엔진을 만들고 싶은데 이런 질문을 하게된다면
...이 부분에 대해 대답하기 정말 애매한 것 같습니다.🤔
사람이 어떻게 받아드리냐에 따라서가 정말 큰 영향을 주는 일이라 그런 것 같습니다.
저에게 게임 엔진은 여러 기술의 집합체라고 보고 있습니다.
렌더링도 있고, 물리도 있고, 크로스 플랫폼도 있고, 코어도 있고, 스크립트도 있고....
마냥 쉽게 접근하기엔 할게 정말 많기 때문입니다.
하지만 그만큼 엔진을 이해할 수 있는 방식 중 그 어떤 배움보다 가장 확실하게 이해할 수 있다고 생각을 합니다.
저는 일단 유니티나 언리얼 공부에서 끝내지 않고 엔진을 직접 만드는건
평범하고 남들과 비슷한 보급형 프로그래머 같은 느낌으로 사는 것보다
특별한 무언가를 해냈고 이를 통해 특별한 점을 내새울 수 있는 프로그래머가 될 수 있는 좋은 방법이라고 생각하기 때문에 시간낭비라고 생각하지 않습니다.
그리고 이 프로젝트를 진행하면서 게임 엔진 프로그래머가 되고싶은 꿈이 생겼습니다!