[기사 본문]
국내 최대 규모의 언리얼 엔진 컨퍼런스인 ‘언리얼 서밋 2019’ 첫날, 프로그래밍 트랙의 첫 번째 강연자로 나선 것은 ‘리니지2M’ 클라이언트를 개발하고 있는 엔씨소프트의 20년 차 개발자 김종현 팀장이었다. ‘L2M 언리얼 사용기’라는 주제로 단상에 오른 그는 언리얼 엔진 4로 대형 모바일 프로젝트를 개발하면서 겪었던 일들을 공유했다.
먼저 최초의 3D 상용 카드 부두를 선보인 3dfx의 로고를 보여준 그는 당시 글라이드 API를 시작으로 D3D, 리스텍, 게임브리오 등을 거쳐 언리얼 엔진을 다루고 있다며, 리니지2M의 티저 영상을 보여주었다.
영상 재생 후 리니지2M은 기술적으로 원 채널 심리스 오픈 월드를 추구하고 있다고 밝힌 그는 처음부터 상부에서 1000 vs 1000 쟁이 가능한 게임을 만들라는 지시가 떨어졌다면서 이를 구현하기 위해선 모바일에서 심리스 오픈 월드를 만들 수 밖에 없었다고 설명했다.
언리얼 엔진 4를 선택하게 된 이유에 대해 그는 리니지2 원작도 언리얼 엔진을 사용하기도 했지만 오픈 소스라는 점이 크게 작용했다고 말했다. 개발 도중 문제가 생겨도 디버깅을 통해 고쳐 쓸 수 있기 때문이라는 것.
그리고 그보다 더 중요한 사유는 10km*10km 규모의 초대형 오픈 월드를 구현하기 위해 랜드스케이프 툴과 원활한 레벨 스트림 등이 기술적으로 지원되어 심리스 오픈 월드 제작이 용이하기 때문이었다.
그런데 1년 반 전부터 프로젝트를 시작했음에도 불구하고 의외로 모바일 플랫폼에서 언리얼 엔진을 사용해본 개발자가 많지 않았다고 한다. 막상 영입한 개발자들도 유니티만 사용해본 사람들이었는데, 다행히 1개월 정도 만에 적응하여 ‘운이 좋았다’고 표현했다.
오픈 소스인 만큼 자신이 맡은 부분은 내부를 들여다보면서 디버깅을 해야 하지만, 엔진 수정은 최소한으로 억제했다. 이유는 실제로 수정을 할 경우 엔진 업데이트에 발맞춰 계속 수정해야 하기 때문이다. 그렇다고 해도 수정하고 싶은 욕망이 불끈거릴 때가 있는데, 이를 잘 제어하는 것도 중요한 것 같다고 말했다.
엔진 소스를 바로 빌드에 적용, 배포하는 소스 빌드와 이를 인스톨 버전으로 따로 뽑아 배포하는 인스톨드 빌드 중 그는 후자를 택했다. 이는 개발에 많은 인원이 참가할 경우 속도성보다는 안정성이 더 중요하기 때문이며, 언리얼 엔진으로 개발한다면 컴파일 시간을 줄이기 위한 인크리디빌드(XGE) 툴(유료)과 공유 DDC, 자동화를 위한 CI 툴(유료)을 꼭 사용하는 것이 좋을 것이라고 강조했다.
엔진 버전 업데이트는 빨리 하고 싶은 충동이 들더라도 참을 것을 권했다. 아무리 메이저 업데이트라도 곧바로 사용하면 크래시가 일어날 가능성이 높기 때문에 1-2주 기다렸다 핫픽스가 나오면 그 때 적용하는 것이 좋을 것이라고.
예를 들어 4.22 업데이트라고 하면 4.22.1이 나와야 적용 여부를 검토하고, 4.22.3 정도는 되어야 실제 적용을 하는 식이다. 참고로 리니지2M 개발 자체는 4.17부터 시작했는데, 현재 4.21까지 적용된 상태인데, 4.22는 모바일과 관련된 요소가 많지 않은 듯하여 아직 관망 중이라고 한다.
PBR(물리 기반 렌더링)의 경우 모바일에서 제대로 PBR이 보이는 게임을 만들자는 목표 하에 쉐이더 모델 5를 모바일에서 구현하고자 했다. 4.17에서의 비교 그림을 보면 오른쪽의 ES3.1에서 빛이 번져 재질감이 잘 살지 않는 것을 알 수 있다. 이를 왼쪽의 SM5처럼 만드는 것이 목표인데, 이를 위해 openGLES2.0은 과감히 버리기로 결정했고, 다행히 상부 및 타 부서에서 이를 지지해줘 고사양을 지향하는 방향으로 개발이 이루어졌다.
초기 가이드는 모바일 쉐이더를 ES3.1을 최대한 활용하는 수준으로 업그레이드, 아티스트의 결과물 프리뷰가 최대한 게임과 비슷하게 세팅, 기본/공통 머터리얼을 최대한 단순하게 구성, 실사 아트 애셋 최대한 많이 구매, 아트팀의 노력 덕분에 4.17에서 해상도를 높이지 않고도 좋은 결과물을 얻을 수 있었다.
모바일 랜더링의 경우 프리뷰 세팅 저장부터 시작하여 랜드스케이프 레이어 추가, 스킨과 헤어 쉐이딩 모델 추가, 모바일에서의 SSAO 구현(무거워서 옵션 처리 예상), 라이트맵 사용 금지라는 방향으로 작업했다. 라이트맵을 사용하지 않고 제작한 이유는 오픈 필드라는 특징과 더불어 맵 빌딩 시간 대비 효과가 크지 않기 때문이었으며, 라이트 맵이 유효한 던전에서도 라이트 맵 없이 비슷한 효과를 낼 수 있도록 구현했다.
오픈 필드의 구현과 넓은 시야의 확보를 위해서 랜드스케이프를 적용했다. 아래 사진은 약 1.6km의 시야를 확보한 상황인데, 레이어가 4개로 늘어서 머터리얼 세팅만 잘 하면 랜드스케이프로 멋진 지형을 만들 수 있다고 한다. 또한 텔레포트를 할 경우에도 로딩을 없애라는 주문이 있어 로딩 속도를 최대한 끌어 올리고 플레이의 흐름이 끊기지 않기 위해 지형을 최대한 잘게 나눠 자동화시켰다. 여기서 월드 컴포지션은 빠른 로딩을 위해 수정이 가해졌으며, 퍼시스턴트 레벨을 하나만 두고 나머지를 떼었다 붙였다 하는 식으로 코스트를 줄였다.
블루프린트의 경우 누구나 쉽고 빨리 개발할 수 있어 기획자들이 좋아하지만, 협업이 힘들어 프로그래머들은 싫어하는 경우가 많은데, 그런 이유로 개발팀은 블루프린트 사용을 최소한으로 억제했고, 특히 복잡한 로직은 넣지 않도록 했다.
또한 C++의 경우 언리얼 엔진은 공식적으로 C++ 14를 지원하지만, 최신 사양은 언리얼 엔진과 궁합이 안 좋아 같은 코드인데 어디선 되고 어디선 안 되는 경우가 발생해 C++ 스탠다드를 사용하는 쪽으로 가이드 하고 있고, STL은 언리얼 엔진에서 거의 사용되지 않아 언리얼 엔진의 자체 템플릿을 권장하는 것이 아닌가 하고 추측했다.
포트나이트의 성공은 언리얼 엔진에 큰 변화를 가져왔는데, 이를 반영할 수 있어 다행이었다고 말한 그는 엔진도 많이 발전했지만 하드웨어도 장족의 발전을 하여 느려지기 쉬운 소프트웨어를 뒷받침해주고 있다고 말했다. 또한 게임 개발에 있어선 여전히 아이폰이 안드로이드보다 우수한 상황이나, 삼성과 구글 양쪽 모두 따라잡겠다는 의지가 충만하여 지속적인 향상이 기대된다고 덧붙였다.
끝으로 4.21 버전 이후 언리얼 엔진은 모바일에서 정말 쓸만한 엔진이 됐다고 한 그는 이전에는 유니티가 가볍고 빨랐지만 이제는 언리얼 엔진도 고 퀄리티를 유지하면서 좋은 모바일 게임을 만들 수 있게 됐다는 말로 강연을 마쳤다.
아래는 질의 응답을 정리한 것이다.
● 월드를 몇 개의 랜드로 분할했는가?
맵은 계속 커지고 있으며, 앞에서 말한 잘게 자른 단위는 250m*250m로 여기에 맞게 타일링이 되어 있다.
● 퍼시스턴트 레벨은 어떻게 배치했나?
거의 없다. 레벨 간 이동이 있을 때 시프트를 줄이기 위해 퍼시스턴트 레벨은 액터 4개 정도에 불과하며, 지역 종속 적인 부분은 다 제거했다.
● 라이트 맵을 사용하지 않은 부분에 대해 자세히 듣고 싶다.
라이트 맵 옵션을 끄면 기본적으로 사용하지 않게 되며, 라이트 디렉션을 할 때 하나로 다 했다. 포인트 라이트는 모바일에서 4개까지 사용 가능한데, 최대한 겹치지 않게 구성했고, 거리나 위치를 보면서 포인트 라이트의 범위를 오브젝트 별로 잘라 넣어주고 있다.
● 1000 vs 1000이면 액터 클래스부터 새로 제작했나?
액터 클래스부터 만들지는 않았다. 처음 캐릭터를 세팅 할 때 무브먼트를 고민하게 되는데, 우리는 무브먼트 컴포넌트와 비슷한 형식이지만 직접 커스터마이즈 한 무브먼트 컴포먼트를 사용한다.