조금씩 현실보다 더 현실 같은 그래픽을 자랑하는 게임 기술력은 언제나 유저들에게 즐거운 볼거리다. 동공이나 피부 텍스쳐까지 세밀하게 구현해냄으로써 점점 수준 높은 유저들의 눈높이에 맞춰 발전하고 있다.

모바일 게임도 예외는 아니다. 비단 그래픽뿐만이 아니라 PC나 콘솔로만 즐기기에 적합하다고 생각했던 AOS장르나 FPS장르의 게임들이 연이어 개발되면서 모바일 게임의 변화를 꾀하고 있다. 특히 그래픽의 경우 언리얼 엔진 4를 이용한 리니지2 레볼루션을 시작으로 콘솔 퀄리티의 그래픽을 제공하는 ‘트리플에이’급 모바일 게임들이 주목받고 있다.

▲잭 포터 부장, UE4 Mobile Team Lead

22일 서울 코엑스에서 열린 ‘언리얼 서밋 2017’에서 ‘The AAA Mobile Revolution: UE4 on Mobile’ 강연을 통해 언리얼 엔진4의 모바일 적용에 대하여 에픽게임즈 잭 포터(Jack Porter)부장의 설명을 들어볼 수 있었다. 잭 포터 부장은 언리얼 엔진4가 어느 단계에 와있는지, 트리플에이급 게임들에 언리얼 엔진4가 적합한지, 모바일 로컬 랜더링에 대하여 강연했다.

잭 포터 부장은 서론에서 먼저 리니지2 레볼루션을 통해 이용한 풀 3D 모바일게임의 가능성에 대해 이야기했다. 표준 UE4를 그대로 사용해서 개발된 리니지 2 레볼루션은 PC에서 구현된 오픈월드 MMORPG로서의 기본기들이 그대로 적용되었다.


■ UE4 모바일 렌더링과 피처 레벨



먼저 잭 포터 부장은 모바일 랜더러가 어떻게 작동하는지, 컨텐츠 별로 모바일 랜더가 어떻게 다르게 작동하는지에 대하여 설명했다.

UE4 엔진에는 세 가지 렌더러가 있다. 디퍼드 랜더러, 포워드 VR 랜더러, 모바일 랜더러가 있으며, 여기서 모바일 랜더러가 모바일을 위한 랜더러이다. 기능적인 면에서 다른 랜더러와 비교해서 그림자와 같은 일부 기능이 제한되어있다. 그리고 낮은 단계의 피처 레벨을 이용한다.

피처레벨은 씬의 시각적인 모양을 조절할 수 있는 머티리얼의 에디터 피처들을 모아놓는 세트이다. 피처 레벨은 어떤 랜더를 사용할 것인가를 결정한다. 디퍼드 랜더러는 SM4, SM5 피처 레벨을, 모바일 랜더러는 ES2, ES3_1 피처 레벨을 이용하는 식이다.


UE4의 피처 레벨은 구 기기부터 최신 기기까지 다양한 디바이스를 지원한다. 각각의 기기에 따라 맞는 사양의 피처 레벨을 지원하고 있다. 모바일의 ES2, ES3_1 에서 콘솔과 최신 맥 버전에 지원하는 최고 사양의 SM5까지 다르게 적용된다. 피처 레벨 간 가장 큰 차이는 텍스처의 가짓수 차이이다. 지원하는 텍스처의 가짓수가 머티리얼과 맞지 않으면 문제가 생기므로 민감하게 결정해야 한다. 잭 포터 부장은 모바일에 디퍼드 랜더링을 지원할 수 있게 될 것이라 예상했지만 사실상 예상대로 되고 있진 않다고 덧붙였다.

최근 안드로이드의 새로운 그래픽 랜더링 API인 Vulkan 안드로이드를 지원하면서 기존 OpenGL안드로이드와의 호환성에 대하여 언급되었다. Vulkan 안드로이드와 OpenGL안드로이드는 서로 플랫폼이 다르지만 같은 ES3_1 피처 레벨을 이용하기 때문에 한쪽에서만 최적화를 시켜도 두 군데 모두 적용 가능하다.

▲ 새로운 그래픽 랜더링 API, Vulkan




■ 컬러 버퍼와 모바일 랜더링



디퍼드 랜더러에서는 여러가지 씬 정보들을 저장할 수 있는 Gbuffer(지버퍼)를 이용하지만 모바일 랜더러에서는 불가능하기 때문에 컬러 정보를 저장하는 컬러버퍼를 이용한다. 씬 컬러 버퍼 하나에 모든 정보를 저장하는 것이다. 씬 컬러의 경우 물론 16비트를 모두 지원하면 좋겠지만 불가능할 때는 RGBE나 모자이크 등 다른 방법으로 전환하기도 한다.

▲모바일 랜더링 프로세스 단계


파티클이 있는 경우 파티클의 위치와 속도 파티클 두 가지 버퍼가 생긴다. 프레임마다 기존에 있던 위치와 속도를 가지고 다음 프레임의 위치와 속도를 계산하게 된다.


▲모든 오브젝트에 대해 빛과 그림자를 처리하는 베이스 패스







■ UE4의 모바일 적용과 DLC



모바일도 데스크탑, 콘솔과 마찬가지로 물리기반 머티리얼 시스템을 이용한다. HLSL함수로 변환한 베이스 패스 버전인데 PC에서는 바로 사용할 수 있기 때문에 바로 사용하면 된다. 그리고 수동으로 작성된 값을 자동 값에 덧붙여서 추가한다. 하지만 모바일에서는 그대로 사용할 수 없기 때문에 GLSL로 변환해야 한다.


모바일 게임 속 라이트닝은 먼저 디렉션 라이트를 모빌리티로 바꿔주고, 중요한 조명은 동적으로 업데이트한다. 모든 것이 실시간 계산되기 때문에 메모리 사이즈가 작아진다. 이 때문에 리니지 2레볼루션도 이 방법을 이용한다.

이때 바로 랜더링 되어야 하기 때문에 별도로 코스트가 된다는 점과 퀄이 그렇게 높지 못하다는 점이다. 이를 해결하기 위해 스테이셔너리 디렉션에 csm을 적용하게 된다. 과거에는 하나씩 설정을 해줬어야 했지만 이젠 최적화되어 자동으로 어떤 것이 알맞는지 설정해준다.

▲다이나믹 셰도우가 보이고 벽을 따라 올라갈 때 디스턴스 셰도우와 잘 어우러진다.

▲좌측과 우측의 빛의 영향력이 다른 것을 확인할 수 있다.

라이팅 채널는 어떤 라이트가 어느 채널에 영향을 주는가를 설정해준다. 왼쪽의 경우 모든 채널에 영향을 주도록 설정되어 있고 오른쪽의 경우 채널 1만 적용되도록 설정되어있다. 이때 오브젝트 하나에 대해서만 적용이 되기 때문에 영향을 미치는 라이트가 두 개 이상일때 하나만 적용된다는 것이 한계점이다.


포스트 프로세스는 아티스트가 원하는 대로 더 쉽게 구현해낼 수 있도록 해준다. 4.15버전에서는 자동으로 이게 적용된다는 것을 알아둬야 한다. 물리기반 시스템을 좀 더 정확히 구성하기 위해 자동으로 적용되도록 설정했다. 모바일의 경우는 자동으로 적용되지는 않으나 최신기기의 고사양일 경우 설정하는 것이 좋다.


스텐실 버퍼 또한 4.15버전에 새로 들어갔다. 스텐실 버퍼는 이름대로 적용되지 말아야 할 후면 배경에 랜더링 되는 것을 막아주는 역할을 하는 버퍼이다. 스텐실 버퍼는 PC에서는 가능하지만 모바일의 경우 불가능하다. 대신 버퍼에서 넣어주고 꺼내쓰는 식으로 적용되었다. 아군이나 적국은 다른 색으로 지정할 때 쓰인다.



DLC의 경우 한국 개발사들이 많이 요구했던 요소이다. 앱스토어에서는 다운로드해야 할 컨텐츠를 최소화하고 나머지 데이터는 필요할 때 받는 식으로 하길 원했다. 따라서 최소한의 UI정도만 다운로드 컨텐츠로 하고 나머지는 앱스토어 채널에서 받아 다운로드하거나 패치로 따로 받도록 하는 것이다.

이때 업데이트가 있는지 와이파이가 켜져 있는지 등등 체크하도록 하는 기능이 추가될 필요가 있었다. 이걸 모바일 패키징이라는 요소로 만들어 블루프린트에 추가했다.

▲안드로이드의 경우 컴파인더가 사용되지 않는 것들을 지워서 실행파일 크기를 줄인다.


그외에 모바일에서 반복처리 시간을 적게, 필요한 부분만 업데이트할 수 있도록 하거나 실제 디바이스 원격으로 PC에서 작업할 때 편하게 구상되어있다.