모바일 퍼포먼스 팁과 정보

Unreal Match 3 게임에서 지원되는 모바일 디바이스에 최적의 퍼포먼스를 내기 위해 활용했던 최적화 기법입니다.

Windows
MacOS
Linux

이 글에는 Unreal Match 3 (언리얼 매치 3) 게임에서 지원되는 모바일 디바이스에서 플레이할 때 가능한 한 최상의 퍼포먼스를 내도록 하기 위해 활용된 최적화 기법을 담고 있습니다.

기본 디바이스 프로파일

언리얼 매치 3 가 가급적 많은 모바일 디바이스에서 실행되도록 하기 위해 DefaultDeviceProfiles.ini 를 수정하여 저사양 디바이스에서 플레이시에는 렌더링 세팅을 낮추도록 했습니다. 이를 통해 전체적인 게임의 모양과 느낌을 희생시키지 않고도 더욱 더 많은 모바일 디바이스를 지원하도록 할 수 있습니다. 다음 부분에서는 그 세팅 중 몇 가지에 대해서, 그리고 언리얼 엔진 4 모바일 프로젝트에서 그 세팅을 어떻게 활용할 것인지 알아보도록 하겠습니다.

언리얼 매치 3 의 DefaultDeviceProfiles.ini 파일은 Match3\Config\DefaultDeviceProfiles.ini 에서 찾을 수 있습니다.

DefaultDeviceProfiles.ini 가 열렸으면 iOS 와 Android 용 다음 섹션을 찾습니다:

[IOS DeviceProfile]
+CVars=r.Streaming.PoolSize=160
+CVars=r.Streaming.UseFixedPoolSize=1
+CVars=p.EnableAsyncScene=0
+CVars=r.Scalability.MaxTextureQualityForLowVirtualMemory=3
+CVars=r.MaxAnisotropy=1 

[Android DeviceProfile]
+CVars=r.Streaming.PoolSize=160
+CVars=r.Streaming.UseFixedPoolSize=1
+CVars=p.EnableAsyncScene=0
+CVars=r.Scalability.MaxTextureQualityForLowVirtualMemory=3
+CVars=r.MaxAnisotropy=1 

언리얼 매치 3 의 경우 기본 디바이스 프로파일에 아무것도 추가하지 않았으며, 각 디바이스에 대한 개별 디바이스 프로파일만 변경했습니다.

위의 두 텍스트 블록이 각각의 디바이스 제품군에 대해 기본적으로 어떤 렌더링 옵션을 켜는지에 대한 세팅을 담당합니다. 이 CVars 는 프로젝트가 타깃으로 삼을 모바일 디바이스 하나 하나 정확히 알고 있는 것에 대해서만 넣어야 할 것입니다. 여기에 어떤 모바일 디바이스는 지원하지만 다른 모바일 디바이스에서는 지원하지 않는 CVars 를 추가시키면, 그 모바일 디바이스에서는 프로젝트가 제대로 돌아가지 않을 수 있습니다. 이러한 현상을 피하기 위해서는 Device Profile 섹션 아래에 디바이스 전용 CVars 만 추가해야 할 것입니다. 예를 들어 iPhone 4s 디바이스 프로파일과 iPhone 6 프로파일을 살펴봅시다.

[iPhone4s DeviceProfile]
+CVars=r.MobileContentScaleFactor=1.0
+CVars=r.ParticleLODBias=1
+CVars=sg.EffectsQuality=2
+CVars=fx.MaxCPUParticlesPerEmitter 50

[iPhone6 DeviceProfile]
+CVars=r.MobileContentScaleFactor=2.0
+CVars=r.ParticleLODBias=0
+CVars=sg.EffectsQuality=3
+CVars=fx.MaxCPUParticlesPerEmitter 1000

iPhone 6 가 iPhone 4 보다 강력하기 때문에 6 에서는 다수의 세팅이 높게, 4 에서는 낮게 설정되어 있습니다. iOS 섹션 아래 Android 섹션을 살펴보면 저사양 / 고사양 디바이스 프로파일 사이에도 비슷하게 설정된 것을 볼 수 있습니다.

[Android_Low DeviceProfile]
+CVars=r.MobileContentScaleFactor=1.0
+CVars=r.ParticleLODBias=1
+CVars=sg.EffectsQuality=2
+CVars=fx.MaxCPUParticlesPerEmitter 50
BaseProfileName=Android

[Android_High DeviceProfile]
+CVars=r.MobileContentScaleFactor=1.0
+CVars=r.ParticleLODBias=0
+CVars=sg.EffectsQuality=3
+CVars=fx.MaxCPUParticlesPerEmitter 1000
BaseProfileName=Android

언리얼 매치 3 에 사용된 세팅에 대한 분석입니다.

세팅 이름

설명

r.MobileContentScaleFactor

모바일 콘텐츠 스케일 팩터 - 콘텐츠가 디바이스에서 표시될 때의 스케일을 조절합니다. 0 이면 디바이스 고유 해상도를 사용합니다. UI 스케일에 DPI 스케일링 커브를 사용하는 경우, 이 옵션을 0 으로 설정해야 합니다.

r.ParticleLODBias

파티클 LOD 바이어스 - 어떤 파티클 LOD 를 표시할지를 조절합니다. 0 은 베이스 LOD 를, 1 은 첫 번째 LOD 를, 2 는 두 번째 LOD 식으로 사용합니다. 언리얼 매치 3 에서는 저사양 디바이스에서 스폰되는 파티클의 양을 절반으로 줄이기 위해 첫 번째 LOD 만 사용했습니다.

sg.EffectsQuality

이펙트 퀄리티 - 틱당 파티클의 스폰 속도를 조절합니다. 값의 범위는 0 에서 3 까지이며, 기본값은 3 입니다. 이 숫자를 낮추면 틱당 스폰되는 파티클 수가 줄어듭니다. 이 수치를 1 로 설정하면 파티클이 매우 드물게 스폰되므로 초저사양 디바이스에만 추천합니다. 0 으로 설정하면 모든 파티클 스폰이 완전 중단됩니다.

fx.MaxCPUParticlesPerEmitter

이미터당 최대 CPU 파티클 - 이미터당 CPU 파티클을 몇 개나 분출시킬지 조절합니다.

다른 방식의 LOD 활용

ULOD_00.png

레벨 오브 디테일(LOD)이란 플레이어의 카메라에서 멀리 떨어져 있는 오브젝트의 렌더링 비용을 줄이는 데 도움이 되는 렌더링 팁입니다. LOD 작동방식은, 한 오브젝트의 저해상도 버전을 하나 이상 같은 파일에 저장한 다음, 플레이어 카메라와의 거리에 따라 그 오브젝트를 자동으로 전환해 주는 것입니다. 아래 비디오를 보시면 이러한 LOD 전환 예제를 확인하실 수 있습니다.

언리얼 매치 3 에서는 스태틱 메시에 LOD 를 활용하지는 않았지만, 파티클 이펙트에는 LOD 를 활용하여 저사양 디바이스에서의 렌더링 요구치를 낮추는 데 도움이 되었습니다. 먼저 한 파티클을 시작으로 새로운 LOD 를 만듭니다. 그런 다음 새로 생성된 LOD 에서 스폰되는 파티클 양을 절반으로 줄이거나, 어떤 경우에는 이펙트 전체를 꺼버립니다. 아래 그림은 이러한 VFX LOD 가 실전에서 활용되는 예제입니다.

Base

LOD 1

위 그림은 저사양 디바이스에서 현재 선택된 보석을 표시할 때 P_Selected_Title 파티클 이펙트를 어떻게 최적화시켰는지 보여줍니다. 왼쪽 이미지는 원본 P_Selected_Title 파티클 이펙트로, 고사양 디바이스 용입니다. 이 그림을 자세히 보시면 파티클 이펙트에 작은 흰색 사각형이 몇몇 보일 것입니다. 이제 오른편 이미지를 보시면 P_Selected_Title 라는 이펙트는 같지만 이번에는 작은 흰색 사각형이 없습니다. 언리얼 매치 3 가 저사양 디바이스에서 더욱 잘 실행될 수 있도록 이펙트에서 완전히 제거해 버렸기 때문입니다. 자 이제 절반의 작업이 끝났습니다. 다음에는 어떤 모바일 디바이스에서 원본 파티클 이펙트를 사용하고, 어떤 모바일 디바이스에서는 그 원본을 기반으로 한 여러가지 LOD 를 사용할 것인지 정의해야 합니다. 그러기 위해 먼저 DefaultDeviceProfile.ini 를 텍스트 에디터에서 열고 Android_Low DeviceProfile 항목을 찾아봅니다. 아래 그림과 같습니다.

ULOD_Android_Low_Profile.png

Android_Low Device Profile 섹션에서 다음 CVars 를 추가하고 1 로 설정하여 파티클 이펙트가 사용되면 강제로 첫 번째 LOD 를 사용하도록 했습니다.

+CVars=r.ParticleLODBias=1

Android Device Profile 섹션의 중저사양 디바이스 항목을 살펴보니, 중저사양 Android 모바일 디바이스 모두 파티클 이펙트에 LOD 를 사용하도록 되어있는 반면, 최고사양 Android 디바이스는 LOD 가 아닌 원본 이펙트를 사용하도록 되어 있습니다. 아래 그림에서 어떻게 이러한 세팅들이 어우러져 중저사양 Android 디바이스에서 각기 다른 LOD 의 파티클 이펙트를 표시하는지 알 수 있습니다.

ULOD_Android_Effect_LOD_Settings.png

이 예제에서는 Android가 사용되었지만, iOS 섹션에도 같은 개념과 명령을 사용하면 됩니다.

Android 디바이스에서의 비디오 녹화

특정 Android 디바이스에서는 콘솔 창을 열고 다음 명령을 입력하는 것으로 비디오 녹화가 가능합니다.

adb shell screenrecord /sdcard/(Insert Name Here).mp4 --bit-rate 8000000

그러면 디바이스에서 벌어지는 내용을 180 초까지 녹화할 수 있습니다. 언제든지 ADB 콘솔 창에서 Ctrl + C 를 누르면 비디오 녹화를 중지시킬 수 있습니다.

비디오는 보통 폰의 루트 디렉터리에서 찾을 수 있으며, 디바이스가 개발 PC 에 연결되어 있다면 비디오 이름을 검색해 보면 됩니다.

캐릭터 라이팅

언리얼 매치 3 의 캐릭터에 사용된 머티리얼을 살펴보면, 비용이 더욱 싼 Unlit Shading Model 이 아닌 Default Lit Shading Model 을 사용하는 것을 볼 수 있습니다. 그렇게 한 이유는 밤 테마 구매후 활성화시 횃불의 빛이 캐릭터를 동적으로 비추어 그림자를 드리우도록 할 수 있게 하기 위해서입니다. 머티리얼이 Unlit 모델을 사용하도록 바꿨다면 이러한 상호작용은 불가능했을 것입니다. 다이내믹 라이팅이, 특히나 모바일 디바이스에서 비싸기는 하지만, 언리얼 매치 3 는 애초부터 실행에 필요한 리소스가 별로 없어 다이내믹 포인트 라이트 하나쯤으로는 퍼포먼스가 눈에 띄게 차이가 나지 않았습니다.

Default Theme

Night Theme

Tags
Select Skin
Light
Dark

Welcome to the new Unreal Engine 4 Documentation site!

We're working on lots of new features including a feedback system so you can tell us how we are doing. It's not quite ready for use in the wild yet, so head over to the Documentation Feedback forum to tell us about this page or call out any issues you are encountering in the meantime.

We'll be sure to let you know when the new system is up and running.

Post Feedback