모바일 플랫폼용 타이틀 개발 시 특정 디바이스를 대상으로 삼을 때 몇 가지 유의할 점과 타이틀을 출시할 디바이스 목록에 따른 일반적인 모범 사례가 있습니다. 디바이스에서 최상의 퍼포먼스를 얻기 위해 특정 라이팅 티어로 개발하기, 특정 라이팅 티어가 타깃 플레이어층에 가장 적합할 수도 있는 이유 등이 여기에 포함됩니다. 모바일을 염두에 두고 프로젝트에 착수할 때 염두에 두어야 할 몇 가지 제안 사항도 알아볼 수 있습니다.
퍼포먼스 티어
언리얼 엔진 5(UE) 는 모바일 디바이스에 다양한 라이팅 기능을 지원합니다. 이러한 기능을 사용하면 퍼포먼스 비용이 들며, 느린 모바일 디바이스에서는 게임의 퍼포먼스가 떨어질 수 있습니다. UE의 모바일 라이팅 기능은 대부분 조합하여 사용 가능하지만, 이러한 기능을 다음과 같은 티어로 분류하는 것이 유용할 수 있습니다. 모바일 게임을 제작할 때는 게임에 필요한 그래픽 퀄리티와 지원해야 하는 디바이스 타입에 따라 어떤 기능을 사용할지 결정해야 합니다. 에픽에서 테스트한 디바이스와 해당 디바이스에 가장 적절하다고 생각되는 티어에 대한 자세한 내용은 iOS 개발 및 Android 개발에서 개발 요구 사항을 확인해 보세요.
LDR(로우 다이내믹 레인지)
로우 다이내믹 레인지 (Low Dynamic Range, LDR) 모드는 UE에서 지원하는 가장 낮은 퍼포먼스 티어로, 라이팅이나 포스트 프로세싱 기능이 필요하지 않은 게임에 권장됩니다.
이 모드를 사용하려면 프로젝트 세팅의 렌더링(Rendering) 섹션에서 프로젝트의 모바일 HDR(Mobile HDR) 을 비활성화해야 합니다.
| 장점 | 제한 사항 | 권장 사항 |
|---|---|---|
|
|
|
기본 라이팅
이 티어에서는 스태틱 라이팅 과 완전 러프 머티리얼을 활용하여 흥미로운 라이팅이 적용된 레벨 을 제작하는 한편, 퍼포먼스를 극대화하여 폭넓은 모바일 디바이스를 지원할 수 있도록 합니다.
이 모드를 사용하려면 프로젝트 세팅의 렌더링 섹션에서 프로젝트의 모바일 HDR 을 활성화해야 합니다.
| 장점 | 제한 사항 | 권장 사항 |
|---|---|---|
|
|
|
풀 HDR(하이 다이내믹 레인지) 라이팅
이 티어에서는 UE에서 모바일용으로 사용할 수 있는 대부분의 HDR 라이팅 기능뿐만 아니라 일부 포스트 프로세싱 기능도 활용합니다. 이 기능을 사용하면 고퀄리티 라이팅 기능에 대한 대가로 상당량의 퍼포먼스가 필요합니다.
이 모드를 사용하려면 프로젝트 세팅의 렌더링 섹션에서 프로젝트의 모바일 HDR 을 활성화해야 합니다.
| 장점 | 권장 사항 |
|---|---|
|
|
태양의 픽셀별 라이팅이 적용된 풀 HDR 라이팅
이 티어에서는 UE에서 모바일용으로 사용할 수 있는 모든 HDR 라이팅 기능을 활용합니다. 이 티어는 풀 HDR 라이팅 티어와 같으며, 장점 및 권장 사항도 동일하지만, 여기서는 고퀄리티의 픽셀별 라이팅을 자동으로 사용하는 디렉셔널 라이트(Directional Light) 하나를 씬에 추가할 수 있다는 점이 다릅니다.
이 모드를 사용하려면 프로젝트 세팅의 렌더링 섹션에서 프로젝트의 모바일 HDR 을 활성화해야 합니다.
| 장점 | 권장 사항 |
|---|---|
|
|
셰이더 복잡도 뷰 모드
모바일 프리뷰어의 셰이더 복잡도 뷰 모드를 통해 대상으로 삼은 특정 디바이스에서 머티리얼 비용이 얼마나 될지 짐작할 수 있습니다. 화면에 나타난 컬러는 대상 디바이스에서의 머티리얼 비용을 알려줍니다. 녹색은 퍼포먼스가 좋고, 밝은 빨간색은 비용이 많이 든다는 것을, 흰색이나 분홍색은 해당 머티리얼의 비용이 많이 든다는 것을 뜻합니다.
사용하려면 메인 뷰포트 에서 뷰 모드(View Modes) 목록을 클릭하고 최적화 뷰모드(Optimization Viewmodes) 에서 셰이더 복잡도(Shader Complexity) 를 선택하거나, 키보드 단축키 Alt + 8 을 누르면 됩니다.
아래 이미지는 Mobile Sun Temple 에서 가져온 몇 가지 예시입니다. 셰이더 복잡도 뷰 모드로 볼 때의 머티리얼 비용을 알 수 있습니다.
![]() |
![]() |
![]() |
|---|---|---|
기둥 머티리얼의 비용이 상당히 많이 들며, 반투명 볼류메트릭 시트의 비용이 매우 많이 듭니다. 이 씬에서는 반투명 시트 비용이 너무 많이 들어 제거를 요청했습니다. |
여기의 기둥은 텍스처 룩업 5개를 모두 사용하며, 레이어링도 상당하여 비용이 꽤 듭니다. 그렇지 않으면 30fps로도 충분히 효율적입니다. |
여기서는 나무로 인해 픽셀 비용이 극도로 많이 듭니다. 플레이어가 나무에 가까이 다가가거나 이 머티리얼로 화면을 덮는 경우 그 비용은 엄청날 것입니다. |
모바일 콘텐츠 스케일 인수
모바일 콘텐츠 스케일 인수(Mobile Content Scale Factor) 는 프로젝트의 해상도가 프로젝트를 보는 데 사용되는 모바일 디바이스의 화면 해상도에 가장 잘 맞도록 해상도를 스케일 조절하는 방법입니다. 프로젝트의 config 폴더에 DefaultDeviceProfiles.ini 라는 새 환경설정(.ini) 파일을 만들면 다수의 디바이스 프로파일을 생성하여 저장 할 수 있습니다.
이 파일 안에서 다음 명령 뒤에 아래 iOS 및 Android 섹션의 값 중 하나를 입력하면 특정 디바이스용 프로젝트 해상도를 지정할 수 있습니다.
r.MobileContentScaleFactor
다음 이미지는 환경설정 파일에서 모바일 콘텐츠 스케일 인수를 설정한 예시입니다.
이미지를 클릭하면 전체 크기로 표시됩니다.
이 특정한 환경설정 파일은 Tappy Chicken 프로젝트에 있는 것으로, 다양한 모바일 디바이스에서 Tappy Chicken을 플레이할 때 해상도에 어떤 변화가 일어나는지 보여줍니다. 이 파일 상단 부분에서 iOS 디바이스용 해상도 스케일링을 처리하며, 하단 부분에서 Android 디바이스용 해상도 스케일링을 처리합니다. 참고로 각 r.MobileContentScaleFactor 뒤에 값이 옵니다. 명령 뒤에 사용된 값을 통해 프로젝트 해상도를 스케일 업 또는 스케일 다운할지 여부를 결정합니다.
iOS용 모바일 콘텐츠 스케일 인수
iOS 디바이스의 경우 입력한 값에 따른 결과는 다음과 같습니다.
iOS 스케일 인수는 Apple의 스케일 인수 시스템과 직접적인 연관이 있으며, 0.0 이외의 스케일 인수에 대한 실제 해상도는 화면 종횡비에 맞게 보정되고 디바이스의 네이티브 해상도로 범위제한됩니다.
| 값 | 결과 |
|---|---|
| 0.0 | 디바이스의 네이티브 해상도를 사용합니다. |
| 1.0 | 레티나 디바이스상의 비레티나 해상도입니다. |
| 2.0 | iPhone 5S, iPad Air 등의 풀 네이티브 해상도입니다. |
| 3.0 | iPhone 6+의 풀 네이티브 해상도입니다. |
Android용 모바일 콘텐츠 스케일 인수
Android 디바이스의 경우 입력한 값에 따른 결과는 다음과 같습니다.
0.0 이외의 값을 입력하면 디바이스 방향에 따라 1280x720 또는 720x1280 표준 해상도에 대한 스케일 인수로 이 값을 사용합니다.
| 값 | 결과 |
|---|---|
| 0.0 | 디바이스의 네이티브 해상도를 사용합니다. |
| 1.0 | 가로는 1280 x 720, 세로는 720 x 1280 해상도를 구현하도록 시도합니다. |
| 2.0 | 가로는 2560 x 1440, 세로는 1440 x 2560 해상도를 구현하도록 시도합니다. |
모바일 머티리얼 퀄리티 세팅
저사양 및 고사양 모바일 디바이스에서 모두 실행되는 UE 프로젝트용 콘텐츠를 제작할 때, 어떤 기능이나 아트워크가 특정 디바이스군에서는 작동하지만 다른 디바이스군에서는 작동하지 않는 문제가 종종 발생합니다. 이런 문제를 처리하는 방법이 많이 있지만, 대다수는 시간이 많이 들고 리소스 집약적이기 때문에 때로는 오류에 취약할 수 있습니다. 이러한 타입의 문제를 해결하기 위해 UE에는 머티리얼 퀄리티 레벨(Material Quality Level) 시스템이 있습니다. 이 시스템을 통해 다양한 디바이스에서 사용 가능한 단일 머티리얼을 제작할 수 있으며, 어떤 디바이스에서 어떤 기능을 사용할지 완벽하게 제어할 수 있습니다.
다음 섹션에서는 이 시스템 및 시스템을 고유 UE 프로젝트에 사용하는 방법을 다루어 보겠습니다.
머티리얼 퀄리티 레벨 프리뷰하기
다양한 머티리얼 퀄리티 레벨 세팅이 에디터에서 어떻게 보이는지 확인하려면 메인 툴바 로 이동한 다음 세팅(Settings) > 머티리얼 퀄리티 레벨 에서 프리뷰할 레벨을 선택하면 됩니다.
다음 이미지는 머티리얼 퀄리티 레벨을 낮음(Low), 중간(Medium), 높음(High)으로 설정했을 때 머티리얼의 모습을 보여줍니다.

슬라이더를 드래그하면 머티리얼 퀄리티 레벨을 낮음-중간-높음으로 변경할 때 어떤 변화가 일어나는지 확인할 수 있습니다.
머티리얼 퀄리티 레벨 설정하기
디바이스에 맞게 머티리얼 퀄리티 레벨을 설정하는 방법은 다음과 같습니다.
콘솔에서
` (백틱)을 눌러 콘솔을 열고 r.MaterialQualityLevel 뒤에 다음 값 중 하나를 입력합니다.
| 머티리얼 퀄리티 레벨 값 | 세팅 |
|---|---|
| 0 | 낮음(Low) |
| 1 | 높음(High) |
| 2 | 중간(Medium) |
| 3 | 에픽(Epic) |
높음이 1이고 중간이 2인 것이 맞습니다. 오타가 아닙니다.
디바이스 프로파일에서
환경설정(.ini) 파일을 사용하여 에디터 내에서 다음과 같은 방법으로 대상으로 삼을 디바이스에 대한 머티리얼 퀄리티를 설정할 수 있습니다.
-
메인 툴바 에서 창(Windows) > 개발자 툴(Developer Tools) 로 이동한 다음 디바이스 프로파일(Device Profiles) 을 클릭합니다.
-
디바이스 프로파일 에서 Android_Low 프로파일을 찾아 첫 번째 렌치 아이콘을 클릭하여 프로파일 옵션을 엽니다.
-
콘솔 변수(Console Variables) 섹션의 렌더링 옵션에서 더하기 아이콘을 클릭하면 입력 창이 나타납니다. 입력 창에 R.MaterialQualityLevel 을 입력한 다음 Enter 를 눌러 목록에 해당 명령을 추가합니다.
-
새로운 항목이 추가되었으면 디폴트값을 1 에서 0 으로 변경하여 이 프로젝트를 저사양 Android 디바이스에서 볼 때 가장 빠른 머티리얼 세팅을 사용하도록 합니다.
다양한 퀄리티 레벨 프리뷰하기
프리뷰 렌더링 레벨(Preview Rendering Level) 을 조정하여 프로젝트를 다양한 하드웨어에서 실행할 때 어떻게 보이는지 언리얼 에디터에서 확인할 수 있습니다. 이 세팅은 메인 툴바 로 이동한 다음 세팅 > 프리뷰 렌더링 레벨 에서 사용할 프리뷰 레벨을 선택하면 조정할 수 있습니다.
머티리얼 퀄리티 레벨 전환
Quality Switch 머티리얼 표현식 을 사용하여 단일 머티리얼에서 여러 복잡도 레벨을 정의할 수 있습니다. 예를 들어 복잡한 수학 연산이 있거나 고사양 디바이스에서는 작동하지만 저사양 디바이스에서는 작동하지 않는 무거운 텍스처 읽기 작업이 있는 경우, 이 노드를 사용하여 고사양 그래픽을 표시할 수 없는 저사양 디바이스에 표시할 단순화된 버전을 지정할 수 있습니다.
머티리얼에서 Quality Switch를 사용하려면 먼저 머티리얼 그래프 에 Quality Switch 머티리얼 표현식 노드를 추가한 다음, 해당 출력을 메인 머티리얼 노드의 입력에 연결해야 합니다. 다음 이미지는 시작용 콘텐츠에서 찾을 수 있는 M_Brick_Clay_Old 머티리얼 을 퀄리티 레벨 전환 시 머티리얼 복잡도가 줄어들도록 구성한 것입니다.
이미지를 클릭하면 전체 크기로 표시됩니다.
모바일 머티리얼 옵션
아무 머티리얼 이나 열고 메인 머티리얼 노드 를 클릭한 다음 디테일(Details) 패널의 모바일(Mobile) 섹션을 보면 다음과 같은 프로퍼티를 찾을 수 있습니다.
| 프로퍼티 | 세팅 |
|---|---|
| Float 정밀도 모드(Float Precision Mode) | 픽셀 셰이더에서 최대 (highp) 정밀도를 사용하는 방법입니다. Highp 는 디폴트 (mediump) 보다 느리지만 정밀도 관련 렌더링 오류를 해결하는 데 사용할 수 있습니다. .ush/.usf에서 절반의 정밀도를 계속 유지하려면 Use Full-Precision for MaterialExpressions only 를 선택하세요. 이 세팅은 높은 정밀도를 지원하지 않는 오래된 모바일 기기에는 영향을 미치지 않습니다. |
| 라이트 맵 방향성 사용(Use Lightmap Directionality) | 라이트 맵 방향성과 픽셀별 노멀을 사용합니다. 비활성화하는 경우 라이트맵은 시각적으로 더 평평해 보이지만, 비용이 더 저렴합니다. |
| 모바일 고퀄리티 BRDF(Mobile High Quality BRDF) | 모바일에 고퀄리티 BRDF 기능을 사용하여 더 나은 비주얼 이펙트를 얻지만, GPU 비용이 추가됩니다. |
| 알파를 커버리지에 사용(Use Alpha to Coverage) | 모바일에 마스크드 머티리얼에 대한 커버리지에 알파를 사용합니다. MSAA도 활성화되어 있어야 합니다. |
이러한 프로퍼티를 사용하면 해당 기능의 렌더링 패스를 완전히 없애 머티리얼을 저사양 디바이스에서 볼 때 해당 머티리얼의 렌더링 비용 절감에 도움이 됩니다.
모바일 머티리얼 렌더링 오버라이드
플랫폼에서 사용할 렌더링 옵션은 프로젝트 세팅(Project Settings) > 플랫폼(Platforms) 에 있는 다양한 타깃 디바이스에 대한 머티리얼 퀄리티 세팅을 조정하여 오버라이드할 수 있습니다.
플랫폼에서 사용할 렌더링 옵션은 목록에 있는 퀄리티 옵션(Quality Options) 을 조정하여 오버라이드할 수 있습니다. 이 오버라이드를 사용하려면 먼저 퀄리티 오버라이드 활성화(Enable Quality Overrides)옵션을 클릭한 다음, 주어진 퀄리티 레벨을 오버라이드할 옵션을 선택해야 합니다.
원하는 옵션을 모두 선택했으면 프리뷰 셰이더 업데이트(Update Preview Shaders) 버튼을 눌러 지정한 옵션으로 작동하도록 모든 머티리얼을 리컴파일합니다.
모바일 렌더링 옵션
프로젝트 세팅 메뉴의 렌더링 섹션에서 모바일 프로젝트 내 라이팅 및 최적화 처리 방식을 제어하는 몇 가지 프로퍼티를 찾을 수 있습니다. 다음 섹션에서는 이러한 세팅과 세팅이 프로젝트에 미치는 영향에 대해 살펴보겠습니다.
프로젝트 세팅에 액세스하기
프로젝트 세팅 메뉴가 열리면, 엔진(Engine) 섹션을 찾은 다음 렌더링 카테고리를 클릭합니다. 다음 섹션에서 아래 세팅을 조정합니다.
- 모바일(Mobile)
- 기타 라이팅(Misc Lighting)
- VR
- 모바일 셰이더 순열 감소(Mobile Shader Permutation Reduction)
모바일 및 VR 렌더링 옵션
모바일 및 VR 카테고리에서는 모바일 프로젝트의 라이팅과 룩에 직접 영향을 주는 프로퍼티를 설정할 수 있습니다. 아래 표를 참조하여 이러한 세팅을 고유 프로젝트에 사용해 보세요.
| 프로퍼티 이름 | 설명 | ||||||
|---|---|---|---|---|---|---|---|
| 모바일(Mobile) | 프로젝트 세팅의 모바일 섹션에 있는 옵션으로, 모바일 퍼포먼스에 맞춰 조정해야 합니다.
|
||||||
| VR | 프로젝트 세팅의 VR 섹션에 있는 옵션으로, 모바일 퍼포먼스에 맞춰 조정해야 합니다.
|
모바일용 기타 라이팅 및 셰이더 순열 감소 세팅
기타 라이팅 및 모바일 셰이더 순열 감소 섹션에는 머티리얼에 생성되는 이펙트 셰이더를 활성화하거나 비활성화할 수 있는 여러 가지 옵션이 있습니다. 이를 통해 결과적으로 앱 크기가 줄어들고, 메모리가 절약되며, 로드 시간이 개선됩니다.
| 프로퍼티 이름 | 설명 | ||||||||||||
|---|---|---|---|---|---|---|---|---|---|---|---|---|---|
| 기타 라이팅(Misc Lighting) | 프로젝트 세팅의 기타 라이팅 섹션에 있는 옵션으로, 모바일 퍼포먼스에 맞춰 조정해야 합니다.
|
||||||||||||
| 모바일 셰이더 순열 감소(Mobile Shader Permutation Reduction) | 모바일 셰이더 순열 감소 섹션에 있는 옵션으로, 모바일 퍼포먼스에 맞춰 조정해야 합니다.
|
이러한 세팅 중 어느 것을 변경하면 에디터를 재시작해야 변경사항이 적용됩니다.
라이팅 구성에 필요한 셰이더 순열을 비활성화하는 경우 라이팅 또는 섀도잉이 올바르게 렌더링되지 않으며, 제대로 작동하기 위해 다시 활성화해야 하는 세팅을 나타내는 메시지가 화면에 표시됩니다.
추가 제안 사항
다음 제안 사항은 모바일 플랫폼에서 퍼포먼스가 최적화되도록 콘텐츠를 구성하는 데 도움이 됩니다. 영향이 큰 순서대로 나열되어 있습니다.
- 디바이스에서 실행하기 전 라이팅이 빌드되어야 합니다.
- 모바일 플랫폼에서는 비네트나 스크린 스페이스 리플렉션 등 대다수 포스트 프로세싱 기능의 비용이 너무 많이 드므로 이를 비활성화합니다. 블룸, 뎁스 오브 필드(Depth of Field) 등 일부 GPU 집약적 기능은 PC와 모바일에서 동일하게 보이기 위해 기본적으로 활성화되어 있지만, 대다수 기능의 경우 일부 디바이스에서는 디폴트 세팅으로도 60밀리초 이상의 비용이 듭니다. showflag.PostProcessing 0 콘솔 명령으로 이러한 기능을 비활성화하면 해당 비용을 대략적으로 파악할 수 있습니다.
- 프리컴퓨티드 비저빌리티(Precomputed Visibility) 를 사용하고, 제대로 구성해야 합니다. 이를 위해 플레이어가 걸어 다니거나 점프할 수 있는 영역에 프리컴퓨티드 비저빌리티 볼륨(Precomputed Visibility Volumes) 을 배치한 다음 라이팅을 빌드합니다. 프리컴퓨티드 비저빌리티 볼륨은 라이팅 빌드 시와 게임 실행 시 사용되는 퍼시스턴트 레벨(Persistent Level) 에 배치해야 하므로, 서브레벨(Sublevel) 을 자체 빌드할 필요는 없습니다. 디바이스나 레벨 프리뷰어 에 Stat Initviews 콘솔 명령을 입력하고 정적으로 가려진 프리미티브(Statically Occluded Primitives) 를 0보다 크게 설정하여 프리컴퓨티드 비저빌리티 가 작동하는지 확인할 수 있습니다. r.ShowPrecomputedVisibilityCells 1 콘솔 명령으로 에디터에서 셀을 시각화합니다.
- 마스크드 머티리얼 및 투명 머티리얼은 조금만 사용합니다. 화면에서 작은 부분만 차지하도록 배치합니다. iOS 디바이스는 불투명한 표면의 셰이딩에 매우 적합하기 때문에 각 픽셀을 한 번씩만 셰이딩하지만, 마스크드와 반투명의 경우 단일 레이어마다 셰이딩해야 합니다. 따라서 오버드로 때문에 한 프레임의 총 GPU 시간이 두 배 이상으로 길어질 수 있습니다. 셰이더 복잡도 뷰 모드를 사용하면 핫스팟을 조사해 볼 수 있습니다.
- 전체 씬의 드로 콜 수는 어떤 단일 뷰에서든 700 이하여야 합니다. 이 경우 큰 랜드스케이프를 내려다볼 때처럼 오클루전이 거의 없는 영역이 가장 큰 과제가 될 수 있습니다. 이 값은 디바이스에서는 Stat OpenGLRHI 로, PC의 프리뷰어 에서는 Stat D3D11RHI 로 확인할 수 있습니다.
- 전체 씬의 트라이앵글 수는 어떤 뷰에서든 500k 이하여야 합니다. 이 값은 iPad4와 iPad Air 모두에서 30fps를 달성할 수 있도록 결정된 최대 폴리 수입니다. 이 값은 디바이스에서는 Stat OpenGLRHI 로, PC의 프리뷰어 에서는 Stat D3D11RHI 로 확인할 수 있습니다.
- 머티리얼에서 텍스처 룩업 및 인스트럭션을 가급적 적게 사용해야 합니다. 사용할 수 있는 텍스처 샘플러는 5개이지만, 이를 모두 사용하면 머티리얼 비용이 상당히 많이 듭니다. 지금은 PC 인스트럭션 수를 통해 최적화하고, 프리뷰어 셰이더 복잡도 를 통해 총 비용을 시각화하세요.
- 머티리얼에서는 독립적인 텍스처 페치만 사용합니다. 즉 베이스 컬러(BaseColor), 러프니스(Roughness) 등 픽셀 셰이더의 UV를 스케일링(Scaling) 과 같이 어떤 식으로든 조작해서는 안 된다는 뜻입니다. 대신 새로운 CustomizedUVs 기능을 사용하여 버텍스 셰이더 에서 스케일링 을 수행합니다. 환경 매핑과 같은 일부 특수 기능은 UV 연산이 필요하며, 이 같은 특수 사례의 경우에는 괜찮습니다.
- 메모리 낭비가 적은 사각형 텍스처를 사용할 것을 권장합니다. 이 텍스처의 치수에는 항상 2의 거듭제곱(256x256, 512x512, 1024x1024)을 사용합니다. 프리뷰어 에 있는 ListTextures 콘솔 명령으로 모든 텍스처 메모리 사용 현황을 확인할 수 있습니다.


