로그인

회원가입 | ID/PW 찾기

취재

[NDC 17] 효율적인 1인 개발을 위한 자체 엔진 개발, 그 험난한 여정

'P:h Diver' 개발, 넥스트플로어 지하연구소 ‘노세노세’팀 김영수 디렉터 강연

정혁진(홀리스79) 2017-04-25 21:42:45

넥스트플로어 지하연구소의 모바일 리듬게임 <프로토콜: 하이퍼스페이스 다이버 이하 P:h Diver>는 실제 작업 인원이 1.5명이 투입된 인디 게임이다. ESTi, TAK, M2U 등 실력파 작곡가들이 대거 참여하며 주목을 받았다. 지난 19일 출시에 이어 NDC 17 개막 전날인 24일 글로벌 론칭까지 진행했다.

 

다수 인원이 참여했을 것 같은 게임. 하지만, 노세노세 스튜디오의 김영수 디렉터는 사실상 모든 개발을 혼자 맡아서 진행했다. 지하연구소에서 발생되는 프로젝트에 주어진 1년이라는 작업 기간, 한정된 비용 안에서 게임을 개발하기 위해 <P:h Diver>를 자체 개발 엔진 기반으로 개발했다.

 

김영수 디렉터는 강연을 통해 쉽지 않은 결정이었지만 의미 있는 과정이었다고 밝혔다. 자체 개발 엔진을 포함한 개발 과정에 대한 경험을 사후 분석, 공유했다. / 디스이즈게임 정혁진 기자


 

넥스트플로어 지하연구소 ‘노세노세’팀 김영수 디렉터

 

 

# 1인 개발, 한정된 개발 기간여러 고민 끝에 결정한 자체 엔진 개발

 

<P:h Diver>‘3차원 공간에서 선과 노트가 존재하고, 음악을 따라 공간을 이동하며 터치로 2차원 상의 노트를 처리한다는 기본 콘셉트로 진행됐다. 이를 위해서는 3D 그래픽 출력, 연출과 터치 입력, 사운드 출력 등이 필요했다. <P:h Diver> 프로젝트가 킥오프되기 얼마 전에 출시된 <데레스테>도 동세대, 동종기기를 타깃으로 한 게임인 만큼 장, 단점을 분석하고 참고했다.

 

위에서 짧게 말했던 대로, <P:h Diver>1인이라는 개발 자원 하에 1년의 개발 기간 제한, 라이브 서비스를 기본적으로 고려하지 않는 점 등 지하연구소의 특성을 고려해서 개발을 진행해야 했으므로 높은 성능을 추구해야 했다. 리듬게임 장르인 만큼 놓쳐서는 안되는 부분이다. 스마트폰/태블릿 디바이스를 동시에 지원하는 만큼 UI, UX 부분에 있어서도 쾌적함을 제공해야 했다.

 






 

이런 특징을 추구하기 위해, 먼저 기존 엔진 사용을 고려했다. 유니티 엔진, 넥스트플로어 자체 엔진인 모데라토’, cocos2d-x 엔진이 후보군이었고, 런타임 디버깅 등 개발 환경이 쾌적한 최신 C++, 최대한 많은 플랫폼을 단일 코드로 지원할 수 있는 점, 성능, UI, UX 요구 사항을 높은 퀄리티로 맞추기 위해 엔진들의 장, 단점과 과거 자신이 개발한 환경을 되짚었다. 성능과 제공 기능, 개발 비용과 편의성 등 기존 엔진의 여러 측면을 고민한 결과, 사용하면서 불편함을 감수하기 보다는 자체적으로 엔진을 개발해 좀 더 유연하게 대응하는 것이 낫겠다는 결론을 내렸다.

 


 

물론, 이러한 자체 엔진 개발 결정이 모든 조직에 통용되는 것은 아니다. <P:h Diver>는 노세노세 팀 1인이 주로 개발했고, 타 직군과의 협업 부분이 막바지 부분에 발생돼서 그나마 가능했다.

 

만일, 다수의 인력이 자체 엔진 개발을 고려할 경우에는 프로그래머 전원이 동일한 경험을 가지고 있어야 하며 기능 구현을 위한 의사소통이 거의 들지 않아야 한다는 것, 그리고 타 직군과 협업할 때 해당 직군이 사용할 수 있는 툴의 개발 비용을 고려해야 한다.

 

 

# 가벼운 엔진 지향한 자체 엔진, 무난했던 성과

 

<P:h Diver> 자체 엔진은 가벼운 엔진을 지향했다. 이를 위해 플랫폼 중립을 통한 각 플랫폼에 효과적으로 대응할 수 있어야 하고, 이를 위해 양 플랫폼에서 모두 네이티브로 지원하는 언어인 C++ 기반으로 작성한다. 또한 iOS, 안드로이드 플랫폼에 효과적으로 호환해야 하며 멀티스레드 프로그래밍 등을 지원해야 했다. 쓰지 않는 퍼포먼스는 덜어내 간단한 로직을 추구하면서, 호환성을 확보한 후 C++OpenGL로 원하는 대로 프로그래밍을 가능하게 구성했다.

 

더불어, 향후 구성이나 확장, 상호 호환을 위한 규칙을 정리하기 위해 엔진을 명확하게 모듈로 구조화했다. 필요한 모듈만 넣어서 원하는 기능을 가진 게임 엔진을 만들고, 추가 기능이 필요할 경우 모듈 형태로 추가해 게임에 맞는 효율적인 엔진으로 구성했다.

 




 

이러한 개발 과정 끝에, 2015 11월 개발을 시작한 이후, 엔진 핵심 기능 구현에 약 2개월 반 정도의 시간이 소요됐다. 이후 약 1개월 뒤 리소스를 적용한 핵심 구현 빌드가 나왔다. 3개 플랫폼 호환 OpenGL 어플리케이션을 만들어서 Cube를 띄우는 데까지 1개월 반, 4개월 만에 Primitive를 이용한 프로토타입이 2016 2월 하순쯤 완성됐다.

 

<P:h Diver> 자체 엔진을 개발하면서, 데이터 로딩, 네트워크 통신 등을 비동기 처리하면서 발생되는 별도의 프레임 저하는 발생하지 않았다. 단일 UI 리소스로 모든 기기의 해상도에 대응할 수 있었으며 별도의 문제점도 발견되지 않았다. 목표했던 성능은 대략 달성한 듯 하다. iOS는 어느 정도 달성한 것 같지만 안드로이드는 최신 디바이스에서 낮은 레이턴시(지연 속도 현상)가 발생했다. 일부 디바이스에서는 싱크 밀림이나 렉 현상이 보고되기도 했다.

 




 

 

# 완성을 위해서는 여전히 진행 중충분한 테스트와 검증 필수

 

물론, 어디까지나 단일 게임 개발을 목적으로 한 게임이기 때문에 모든 기능이 완성된 것은 아니다. 정리가 덜 된 기능은 게임 코드 내에 위치시켜 향후 차기작이나 추가 기능이 필요할 때 별도로 구현할 계획이다.

 


 

자체 엔진 개발의 장점은 기술적인 요구사항을 원하는 수준까지 맞출 수 있다. 또한 IDE나 기술 스택, 구조 및 개념 설계 등을 자신 또는 팀에 맞는 개발환경을 선택할 수도 있다. 초기에 고려한 부분이 일부 있기는 하지만, 생각보다 구현 비용이 크지 않다는 점도 장점 중 하나다.

 

아쉬운 부분을 돌아보자면, 일단엔진 기능 구현은 무조건 병목 현상을 발생시킨다구현되지 않으면 게임 기능이 나오지 않으니까특히적은 프로그래머 수로 인력적 병목 현상이 겹치면 그야말로 끔찍한 상황.

 

예상보다 개발 기간이 오래 걸리는 점도 있다. 적어도 어지간한 경지에 이르기 전까지는 그렇다. 플랫폼 문제 해결, 설계 이슈 등이 섞이면 더욱 늘어난다. 어떻게 보면, 초보 관리자였기에 이런 지연 현상이 걸리지 않았나 생각한다. 유저들에게 출시 빌드가 나간 뒤 다양한 현상이 발생했던 부분도 있고.

 

당연한 것이지만, 자체 엔진 개발을 위해서는 정석으로 부딪힐 수밖에 없다. 충분한 테스트와 QA가 필요하며, 언어/라이브러리 표준, 플랫폼에서 요구하는 규약을 최대한 지켜서 코딩하는 것이 중요하다. 자체 엔진 개발의 길은 역시 쉽지가 않더라. 엔진 개발 이외 작업이 함께 주어지면 개발 퍼포먼스가 저하되므로 되도록 작업에 집중할 수 있을 인력적인 여유가 될 때 진행할 것을 권한다. 시간적으로도 엔진 개발 단계를 분리하는 것이 좋다.

   ​