게임인재원 4학기 생활 중 작성하는 개발일지.
지금부터 미니프로젝트까지 남은 시간이 6주, 미니 프로젝트 진행 시간이 4주,
총 10주의 시간동안게임 엔진, 그래픽스 엔진, 게임 에디터, 이 셋을 완성하고 클라이언트 프로그램까지 작성을 끝내야 한다. 계획을 어떻게 짜야 좋을까?
우선, 프로젝트를 시작하기 전 6주동안 끝내놔야 할 작업들을 정리하자.
- 게임 엔진
게임 엔진은 Entity Component System 구조로 인재원 생활 6개월간 만들어 놓은 것이 있다. 게임 루프와 게임 오브젝트들 간의 계층구조, 씬과 Component가 구현되어 있고, 이 엔진을 활용하여 2학기 프로젝트를 성공적으로 끝마친 바 있으니 게임엔진의 안정성이 1개월짜리 소규모 프로젝트 레벨에서는 검증이 되었다고 할 수 있겠다. 범용적으로 쓰일 수 있는 에디터가 없다는 것이 문제지만 말이다.
- 그래픽스 엔진
2d 그래픽만 이용해서 게임을 만들 때에는 그래픽스 엔진이라 할 것이 전혀 없었다. 화면에 임의의 위치, 각도, 사이즈로 이미지를 찍어내기만 하는 함수만 있으면, 표현하지 못할 게 없었다.
3d 그래픽스엔진이라고 뭐가 크게 다를까? 하는 생각이 든다. 그래픽스 엔진이 내부적으로 처리해야 할 일은 여러가지가 있겠지만, 그래픽스 엔진이 게임 엔진에 뚫어줘야 할 API는 결국 특정 월드공간에 메시를 그려달라, 라이트를 배치해 달라, 스크린 공간에 2d 이미지를 찍어달라, 이 정도가 전부일 것이다.
..사실, 애니메이션, 파티클 이펙트 같은 것들을 생각하면 그보다는 훨씬 더 많은 인터페이스가 필요하겠지만, 일단은 최대한 간소한 형태로 그래픽스 엔진과 게임 엔진을 연동시킨 후, 에디터 작업을 들어가야겠다.
- 엔진 에디터
최소한 프로젝트 시작 전에, 나와 팀원들의 심리적 안정감을 위해서라도 엔진 에디터는 완성이 되어 있어야 한다. 2학기 자체 엔진 프로젝트를 진행할 때, 맵 에디터가 존재하긴 했지만 에디터는 클라이언트 코드를 분석할 수 있어야겠고, 분석된 클라이언트 코드를 파일로 저장하고, 또 불러올 수 있어야 하니 리플렉션과 시리얼라이제이션을 구현해야 할 것이다. 당연히 둘 다 내가 6주안에 직접 만들 수 있다는 생각은 들지 않는다. 오픈소스를 가져다 쓰는 수 밖에.
-결론
게임 엔진 - 그래픽스 엔진 - 엔진 에디터 - 클라이언트 프로그램 간의 연계가 정말 최소한의 기능만 존재해 마치 뼈만 앙상한 목각인형처럼 돌아가더라도, 작동하는 전체 구조를 만든 다음 각 부위에 필요한 만큼 살을 붙이는 것이 현실적인 생각일 것 같다. 따라서 지금 당장 해야 할 일은...
1. world 좌표에 스테틱 매시를 그리는데에 필요한 최소한의 인터페이스를 정의하고, 엔진 클라이언트 프로그램을 그려낸다.
2. 에디터 프로그램에 IMGUI를 적용해 간단한 UI 레이아웃을 그려놓는다.