Choose your operating system:
Windows
macOS
Linux
모바일 플랫폼용 타이틀을 개발할 때, 릴리즈하고자 하는 디바이스 리스트에 따라 특정 디바이스를 대상으로 할 때 또는 일반적으로 염두에 두면 좋은 것들이 몇 가지 있습니다. 여기에는 한 디바이스에서 최대한의 결과를 얻어내기 위해 특정 라이팅으로 개발을 하고, 목표로 하는 사용자층에 특정 라이팅 티어(등급)가 가장 적합한 이유가 포함됩니다. 모바일을 염두에 두고 프로젝트 작업을 할 때 유념해야 할 사항도 몇 가지 찾아보실 수 있습니다.
퍼포먼스 티어
UE4 에는 모바일 디바이스용 다양한 라이팅 피처를 지원합니다. 이 피처를 사용하면 퍼포먼스 비용이 들며, 느린 모바일 디바이스에서는 게임 퍼포먼스가 조악해 질 수 있습니다. UE4 의 모바일 라이팅 피처 대부분 섞어 조합하는 것이 가능하지만, 피처 티어 별로 다음과 같이 나누는 것도 유용할 수 있습니다. 모바일 게임을 만들 때는, 게임에 필요한 그래픽 퀄리티와 지원하고자 하는 디바이스 유형을 결정해야 합니다. 에픽의 테스트 결과 디바이스별로 적합하다 생각되는 피처 티어에 대한 정보는, iOS 개발 및 Android 개발 문서를 참고해 주시기 바랍니다.
LDR (Low Dynamic Range)
로우 다이내믹 레인지 (LDR) 모드는 UE4 에서 지원되는 퍼포먼스 티어 중 가장 높은 것으로, 라이팅이나 포스트 프로세싱 피처가 필요치 않은 게임에 추천됩니다.
이 모드를 사용하기 위해서는,
장점 |
한계 |
추천 |
---|---|---|
|
|
|
기본 라이팅
이 티어는 스태틱 라이팅과 fully rough (풀 러프니스) 머티리얼을 활용하여 레벨에 흥미로운 라이팅을 주면서도 퍼포먼스를 최대한 끌어올려 폭넓은 모바일 디바이스를 지원할 수 있도록 합니다.
이 모드를 사용하려면,
장점 |
한계 |
추천 |
---|---|---|
|
|
|
풀 HDR (High Dynamic Range) 라이팅
이 티어에서는 UE4 의 모바일용 HDR 라이팅 피처 뿐 아니라 일부 포스트 프로세싱 피처까지도 최대한 활용합니다. 이 피처를 사용하면 하이 퀄리티 라이팅 피처를 쓸 수 있는 대신 퍼포먼스 비용이 꽤 듭니다.
이 모드를 사용하려면,
장점 |
추천 |
---|---|
|
|
태양의 픽셀별 라이팅 포함 풀 HDR 라이팅
이 티어는 UE4 모바일에서 사용가능한 모든 HDR 라이팅 피처를 활용합니다. 이 티어는 '풀 HDR 라이팅' 티어와 같으며, 추천 및 장점 부분도 같지만 여기서는 씬에 디렉셔널 라이트를 하나 추가하면 자동으로 보다 높은 퀄리티의 픽셀 별 라이팅을 사용한다는 차이가 있습니다.
이 모드를 사용하려면,
장점 |
추천 |
---|---|
|
|
셰이더 복잡도 뷰 모드
모바일 프리뷰어 에서 셰이더 복잡도 뷰 모드를 통해 타깃으로 삼은 특정 디바이스에서 머티리얼 비용이 얼마나 되는지 파악할 수 있습니다. 화면에 나타난 색으로 해당 디바이스에서 머티리얼이 얼마나 비싼지를 알 수 있습니다. 초록은 퍼포먼스가 좋다는 뜻이고, 밝은 빨강은 매우 비싸며, 하양이나 분홍은 머티리얼이 매우 비싸다는 뜻입니다.
사용하려면 메인 뷰포트에서 뷰 모드 리스트를 클릭하고 최적화 뷰모드 - 셰이더 복잡도 를 선택하거나, 키보드 단축키 Alt + 8 을 누르면 됩니다.
Mobile Sun Temple 의 몇 가지 예제입니다. 셰이더 복잡도 뷰 모드로 봤을 때 머티리얼 비용이 어떤지 파악할 수 있습니다:
|
|
|
---|---|---|
여기서는 기둥 머티리얼이 꽤나 비싸며, 반투명 볼류메트릭 시트는 매우 비쌉니다. 이 씬에서는 반투명 시트 비용이 너무 비싸 제거해야 한다고 요청했습니다. |
여기서 기둥 전부가 텍스처 룩업을 5 개 다 사용하는 데다가 레이어도 꽤나 사용하여 매우 비쌉니다. 놔뒀다간 이것만으로 30 fps 나오겠습니다. |
여기서는 나무의 픽셀 비용이 극도로 비싸지고 있습니다. 플레이어가 어쩌다가 이 머티리얼로 화면을 덮기라도 하는 경우엔, 그 비용은 엄청날 것입니다. |
모바일 콘텐츠 스케일 팩터
Mobile Content Scale Factor 는 프로젝트의 해상도가 이를 표현하는 모바일 디바이스의 화면 해상도에 가장 잘 맞도록 해상도에 스케일을 적용시키는 옵션입니다. 프로젝트의 config 폴더에 DefaultDeviceProfiles.ini 라는 환경설정 파일을 새로 만들면 여러 개의 디바이스 프로파일을 만들어 저장할 수 있습니다.
이 파일 안에서, 다음 명령 뒤에 아래 섹션의 iOS 및 Android 값을 입력하면 특정 디바이스에서 프로젝트의 해상도를 지정할 수 있습니다.
r.MobileContentScaleFactor
다음 그림은, 환경설정 파일에서 Mobile Content Scale Factor 를 설정한 예제입니다:
위 환경설정 파일은 태피 치킨 프로젝트에 있는 것으로, 다양한 모바일 디바이스에서 태피 치킨을 플레이할 때 해상도에 어떤 변화가 일어나는지 보여줍니다. 파일 상단 부분에서 iOS 디바이스에 대한 해상도 스케일을 처리하며, 하단 부분에서 Android 디바이스에 대한 해상도 스케일을 처리합니다. 참고로 각 r.MobileContentScaleFactor 마다 뒤에 수치가 있습니다. 명령 뒤에 사용되는 수치를 통해 프로젝트 해상도의 스케일을 높일지 낮출지 결정합니다.
iOS 용 모바일 콘텐츠 스케일 팩터
iOS 디바이스에서 입력한 값에 따른 결과는 다음과 같습니다:
iOS 스케일 팩터는 Apple 의 스케일 팩터 시스템과 직접적인 연관이 있으며, 0.0 이외 스케일 팩터에 대한 실제 해상도는 화면 종횡비에 맞게끔 보정 및 디바이스 원래 해상도로 제한(clamp)됩니다.
값 |
결과 |
---|---|
0.0 |
디바이스의 원래 해상도를 사용합니다. |
1.0 |
레티나 디바이스에서는 비-레티나 해상도입니다. |
2.0 |
아이폰 5s, 아이패드 에어 등의 원래 전체 해상도입니다. |
3.0 |
아이폰 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 해상도를 내도록 시도합니다. |
모바일 머티리얼 퀄리티 세팅
고사양은 물론 저사양 모바일 디바이스에서도 실행되는 UE4 프로젝트용 콘텐츠를 제작할 때, 어떤 피처나 아트워크가 특정 디바이스 군에서는 되는데 다른 디바이스 군에서는 되지 않는 문제가 종종 생기곤 합니다. 이런 문제를 처리하는 데는 여러가지 방법이 있지만, 보통 시간과 노력이 많이 드는 데다 오류에 취약하기도 합니다. 그래서 UE4 에서는 Material Quality Level (머티리얼 퀄리티 레벨)이라는 시스템을 사용합니다. 이 시스템은 하나의 머티리얼을 만들어 여러가지 다양한 디바이스에 사용할 수 있도록 해주는 것으로, 어느 디바이스에서 어느 피처를 사용하는지 완벽하게 제어할 수 있습니다.
여기서는 이 시스템에 대해, UE4 프로젝트에 사용하는 법에 대해 알아보도록 하겠습니다.
머티리얼 퀄리티 레벨 미리보기
머티리얼 퀄리티 레벨 관련 다양한 세팅은 UE4 에디터의 메인 툴바 > 세팅 > 머티리얼 퀄리티 레벨 에서 미리보고자 하는 퀄리티 레벨을 선택하는 것으로 확인할 수 있습니다.
머티리얼 퀄리티 레벨을 Low (낮음), Medium (중간), High (높음)으로 설정했을 때 머티리얼이 어떻게 보이는지는 다음 그림과 같습니다.
머티리얼 퀄리티 레벨 설정
디바이스에 맞는 머티리얼 퀄리티 레벨을 설정하는 방법은 다음과 같습니다:
콘솔에서
물결표(`) 키를 눌러 콘솔을 열고 **r.MaterialQualityLevel** 뒤에 다음 숫자 중 하나를 입력하면 됩니다.
머티리얼 퀄리티 레벨 숫자 |
세팅 |
---|---|
0 |
낮음 |
1 |
높음 |
2 |
중간 |
높음이 1 이고 중간이 2 입니다. 오타가 아닙니다 !
디바이스 프로파일에서
환경설정 (.ini) 파일을 사용하면, 에디터 안에서 다음과 같은 방법을 통해 타깃으로 삼으려는 디바이스에 대한 머티리얼 퀄리티를 설정할 수 있습니다.
-
메인 툴바에서 창 > 개발자 툴 로 이동하여 디바이스 프로파일 을 클릭합니다.
-
디바이스 프로파일에서 Android_Low 프로파일을 찾아 첫 번째 렌치 아이콘을 클릭하여 프로파일 옵션을 엽니다.
-
Rendering (렌더링) 아래 Console Variables (콘솔 변수) 부분에서 더하기 아이콘을 클릭하면 뜨는 입력 창에서 R.MaterialQualityLevel 이라 입력하고 Enter 키를 쳐 목록에 그 명령을 추가합니다.
-
새로운 항목을 추가한 후, 기본값을 1 에서 0 으로 바꾸면 저사양 Android 디바이스에서 프로젝트가 가장 빠른 머티리얼 세팅을 사용합니다.
여러가지 퀄리티 레벨 미리보기
프로젝트가 다양한 하드웨어에서 실행했을 때 어떻게 보이는지는 Preview Rendering Level (프리뷰 렌더링 레벨) 세팅을 조정하여 UE4 에디터에서 미리볼 수 있습니다. 이 세팅은 메인 툴바 에서 세팅 > Preview Rendering Level (프리뷰 렌더링 레벨)에서 사용하고자 하는 프리뷰 레벨을 선택하면 됩니다.
머티리얼 퀄리티 레벨 전환
Quality Switch 머티리얼 표현식으로 하나의 머티리얼 안에 다양한 수준의 복잡도를 정의할 수 있습니다. 예를 들어 복잡한 수학 연산이 있거나 고사양 디바이스에서만 작동하는 무거운 텍스처 읽기 작업이 있는 경우, 이 노드를 사용하면 고사양 그래픽 처리가 불가능한 저사양 디바이스에서 표시할 단순화된 버전을 지정할 수 있습니다.
머티리얼에서 Quality Switch 를 사용하려면, 먼저 머티리얼 그래프에 Quality Switch 머티리얼 표현식 노드를 추가한 뒤, 그 출력을 메인 머티리얼 노드의 입력에 연결해 줘야 합니다. 다음 그림은, 시작용 콘텐츠에서 찾을 수 있는 M_Brick_Clay_Old 머티리얼을, 퀄리티 레벨을 바꿨을 때 머티리얼 복잡도가 감소되도록 구성한 것입니다.
모바일 머티리얼 옵션
아무 머티리얼 이나 열고 메인 머티리얼 노드를 클릭한 뒤 디테일 패널의 Mobile 부분을 보면 다음의 두 프로퍼티를 찾을 수 있습니다:
프로퍼티 |
세팅 |
---|---|
Fully Rough |
풀 러프니스 - 머티리얼의 러프니스를 최대치로 강제시켜 인스트럭션 다수와 텍스처 샘플러 하나를 절약할 수 있습니다. |
Use Lightmap Directionality |
라이트맵 방향성 사용 - 라이트맵 방향성과 픽셀 단위 노멀을 사용합니다. 끄면 라이트맵은 밋밋해 지지만 비용이 저렴해집니다. |
이 두 프로퍼티를 켜면 머티리얼을 저사양 디바이스에서 봤을 때 해당 피처의 렌더링 패스를 완전히 없애 렌더링 비용을 낮추는 데 도움이 됩니다. 하지만 이는 모든 디바이스에서 이 머티리얼을 켜느냐 마느냐 밖에 없는 양자택일 옵션입니다.
모바일 머티리얼 렌더링 오버라이드
플랫폼에서 사용할 렌더링 옵션은 프로젝트 세팅 > 플랫폼 아래 다양한 타깃 디바이스에 대한 머티리얼 퀄리티 세팅을 조절하여 덮어쓸 수 있습니다.
Android:
-
Open GLES 2
-
Open GLES 3.1
-
Vulkan
iOS:
-
Open GLES 2
-
Metal
플랫폼에서 사용할 수 있는 렌더링 옵션은 나열된 Quality Options (퀄리티 옵션)을 조절하여 덮어쓸 수 있습니다. 이 오버라이드 사용을 위해서는, Enable Quality Overrides (퀄리티 오버라이드 사용) 옵션을 켠 뒤 주어진 퀄리티 레벨을 덮어쓰고자 하는 옵션을 선택하면 됩니다.
원하는 옵션을 전부 선택했으면, 프리뷰 셰이더 업데이트 버튼을 클릭하여 모든 머티리얼이 지정한 옵션으로 작동하도록 다시 컴파일합니다.
모바일 렌더링 옵션
프로젝트 세팅 메뉴의 Rendering (렌더링) 부분 아래에서, 모바일 프로젝트의 라이팅 및 최적화 처리 방식을 제어하는 프로퍼티를 여럿 찾을 수 있습니다. 여기서는 그 세팅에는 어떠한 것들이 있고, 프로젝트에 어떠한 영향을 끼치는지 알아보겠습니다.
프로젝트 세팅 접근
프로젝트 세팅 접근을 위해서는, 먼저 메인 툴바 에서 편집 > 프로젝트 세팅 을 선택합니다.
프로젝트 세팅 메뉴가 열리면, Engine (엔진) 부분을 열고 Rendering 카테고리에서 Mobile 부분을 찾습니다. 다음 섹션으로 아래 세팅을 조절합니다:
-
Mobile
-
Lighting
-
Mobile Shader Permutation
모바일 렌더링 옵션
Mobile (모바일) 카테고리 아래에서는, 모바일 프로젝트의 라이팅과 외양에 직접 영향을 주는 프로퍼티를 설정할 수 있습니다. 아래를 참고하여 해당 세팅을 프로젝트에 직접 실험해 보시기 바랍니다.
프로퍼티 이름 |
설명 |
---|---|
Mobile HDR |
모바일 HDR - true 면 모바일에서 풀 HDR 로 렌더링합니다. 라이팅 피처가 필요치 않거나 느린 디바이스에서 더욱 나은 성능을 내고자 하는 게임의 경우 이 세팅을 끄면 됩니다. |
Disable Vertex Fogging in mobile shaders |
모바일 셰이더에서 버텍스 포깅 끄기 - true 면 모든 모바일 셰이더에서 버텍스 포그를 생략합니다. 게임에서 포그를 사용하지 않는 경우, 이 세팅을 선택하면 셰이더 퍼포먼스를 향상시킬 수 있습니다. |
Maximum number of CSM cascades to render |
CSM 캐스케이트 최대 렌더링 개수 - 모바일 렌더러에서 다이내믹 디렉셔널 라이트 섀도우를 렌더링할 때 사용할 캐스케이드 최대 개수입니다. |
Mobile MSAA |
모바일 MSAA - 모바일에서 사용할 멀티 샘플 안티 에일리어싱(MSAA) 세팅입니다. MSAA 가 지원되는 디바이스는 현재 iOS 에서는 Metal, Android에서는 ES2 또는 ES 3.1 을 필수로 지원하는 디바이스입니다. MSAA 를 사용할 수 없으면, 현재 기본 AA 메서드가 사용됩니다. |
모바일용 셰이더 감소 세팅
Lighting (라이팅) 및 Mobile Shader Permutation Reduction (모바일 셰이더 퍼뮤테이션 감소) 섹션에는, 머티리얼에 대해 생성되는 이펙트 셰이더를 켜고 끄는 옵션이 여러가지 있습니다. 이를 통해 앱 크기가 줄어들고, 메모리가 절약되며, 로드 시간이 빨라집니다.
프로퍼티 이름 |
설명 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Lighting |
라이팅 - 프로젝트 세팅의 Lighting (라이팅) 섹션 아래 있는 옵션은 모바일 퍼포먼스 조정에 사용됩니다.
|
||||||||||
Mobile Shader Permutation Reduction |
모바일 셰이더 퍼뮤테이션 감소 - Mobile Shader Permutation Reduction (모바일 셰이더 퍼뮤테이션 감소) 섹션 아래 있는 옵션은 모바일 퍼포먼스 조정에 사용됩니다.
|
이 세팅 중 하나를 바꾸면 에디터를 재시작해야 효과가 적용됩니다.
현재 라이팅 셋업에서 필요한 셰이더 퍼뮤테이션을 끄면, 라이팅 또는 섀도잉이 제대로 렌더링되지 않으며, 정상 작동을 위해 다시 켜야 하는 세팅이 무엇인지 화면상에 메시지로 표시됩니다.
추가 제안
모바일 플랫폼에서 최적의 퍼포먼스를 내기 위해 콘텐츠를 셋업할 때 도움이 되는 제안은 다음과 같습니다. 끼치는 영향이 큰 순서대로 나열되어 있습니다.
-
디바이스에서 실행하기 전 라이팅이 빌드되었는지 확인합니다.
-
모바일 플랫폼에서는 비녜트나 스크린 스페이스 리플렉션 등 대부분의 포스트 프로세싱 피처가 너무 비싸므로 끄도록 합니다. 블룸 및 뎁스 오브 필드 등 GPU 집중형 피처의 경우 PC 와 모바일에서 보이는 모양을 비슷하게 하기 위해 기본으로 켜져있지만, 디바이스에 따라 기본 세팅으로도 60 밀리초 이상의 비용이 드는 피처가 많습니다. showflag.PostProcessing 0 콘솔 명령으로 이러한 피처를 끄면 그 전반적인 비용을 파악할 수 있습니다.
-
Precomputed Visibility 볼륨이 제대로 설정되었는지 확인합니다. 그러기 위해서는 플레이어가 걸어다니거나 점프할 수 있는 구역에 PrecomputedVisibilityVolume 을 배치한 다음 라이팅을 빌드합니다. 라이팅 빌드시와 게임 실행시 같은 P 레벨이 사용되는지 확인해야 합니다 (즉 서브레벨 자체만 빌드할 필요는 없습니다). 디바이스나 프리뷰어에서 Stat Initviews 콘솔 명령을 입력한 후 Statically occluded primitives (정적으로 가려진 프리미티브)가 0 초과인지 확인하는 것으로 작동 여부를 점검할 수 있습니다. r.ShowPrecomputedVisibilityCells 1 콘솔 명령으로 에디터에서 셀을 시각화시켜 볼 수 있습니다.
-
투명 & 마스크드 머티리얼을 사용할 때는, 화면의 작은 부분에만 적용되도록 주의해서 사용하세요. iOS 디바이스는 불투명한 표면의 셰이딩에 매우 최적화되어 있어서, 대부분 각 픽셀 셰이딩은 한 번만 합니다. 그러나 반투명 & 마스크드의 경우, 레이어 하나마다 셰이딩을 해야 합니다. 오버드로 때문에 한 프레임의 총 GPU 시간이 우습게 두배 이상 될 수 있는 것입니다. 모바일 프리뷰어의 셰이더 복잡도 뷰모드를 사용하면 핫 스팟을 조사해 볼 수 있습니다.
-
전체 씬의 드로 콜 수는 단일 뷰 어느 것이든 700 이하여야 합니다. 방대한 조경을 내려다보는 것처럼 오클루전이 거의 없는 영역에서 이 부분이 가장 큰 문제가 될 수 있습니다. 이 수치는 디바이스에서는 Stat OpenGLRHI 로, PC 의 프리뷰어에서는 **Stat D3D11RHI` 로 확인할 수 있습니다.
-
전체 씬의 트라이앵글 수는 어느 뷰에서든 500k 이하여야 합니다. 이 수치는 아이패드4 와 아이패드 에어에서 30 fps 를 맞추기 위한 최대치입니다. 이 수치는 디바이스에서는 **Stat OpenGLRHI` 로, PC 의 프리뷰어에서는 `Stat D3D11RHI` 로 확인할 수 있습니다.
-
머티리얼에서 사용하는 텍스처 룩업 및 인스트럭션 수를 가급적 줄여야 합니다. 사용할 수 있는 텍스처 샘플러는 5 개까지이며, 그 전부를 사용하면 머티리얼 비용이 꽤나 비싸집니다. 현재로서는, PC 인스트럭션 수로 최적화시키고, 프리뷰어 셰이더 복잡도 뷰모드로 총 비용을 시각화시켜 봅니다.
-
머티리얼에서는 독립 텍스처 펫치만 사용합니다. 즉 픽셀 셰이더(베이스 컬러, 러프니스 등)의 UV 는 어떤 식으로든 (스케일 등의) 조작을 해서는 안된다는 뜻입니다. 대신 새로운 CustomizedUVs 피처를 사용하여 스케일 작업을 버텍스 셰이더에서 해 주세요. 인바이런먼트 매핑같은 특수 피처 일부는 UV 연산이 필요하나, 특별한 경우에는 괜찮습니다.
-
메모리 낭비가 적은 정사각 텍스처를 사용하는 것을 추천합니다. 이 텍스처의 치수는 항상 2 제곱수(512, 1024, 2048) 로 하세요. 프리뷰어에서 ListTextures 콘솔 명령으로 텍스처 메모리 사용 현황을 확인할 수 있습니다.