언어:
페이지 정보
태그:
엔진 버전:
언리얼 엔진

모바일 퍼포먼스 팁과 정보

언리얼 엔진

이 글에는 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

태그