모바일 디바이스용 퍼포먼스 지침서

모바일 게임에 맞춘 콘텐츠와 피처 최적화 관련 문서입니다.

Windows
MacOS
Linux

모바일 플랫폼용 타이틀을 개발할 때, 릴리즈하고자 하는 디바이스 리스트에 따라 특정 디바이스를 대상으로 할 때 또는 일반적으로 염두에 두면 좋은 것들이 몇 가지 있습니다. 여기에는 한 디바이스에서 최대한의 결과를 얻어내기 위해 특정 라이팅으로 개발을 하고, 목표로 하는 사용자층에 특정 라이팅 티어(등급)가 가장 적합한 이유가 포함됩니다. 모바일을 염두에 두고 프로젝트 작업을 할 때 유념해야 할 사항도 몇 가지 찾아보실 수 있습니다.

퍼포먼스 티어

UE4 에는 모바일 디바이스용 다양한 라이팅 피처를 지원합니다. 이 피처를 사용하면 퍼포먼스 비용이 들며, 느린 모바일 디바이스에서는 게임 퍼포먼스가 조악해 질 수 있습니다. UE4 의 모바일 라이팅 피처 대부분 섞어 조합하는 것이 가능하지만, 피처 티어 별로 다음과 같이 나누는 것도 유용할 수 있습니다. 모바일 게임을 만들 때는, 게임에 필요한 그래픽 퀄리티와 지원하고자 하는 디바이스 유형을 결정해야 합니다. 에픽의 테스트 결과 디바이스별로 적합하다 생각되는 피처 티어에 대한 정보는, iOS 개발Android 개발 문서를 참고해 주시기 바랍니다.

LDR (Low Dynamic Range)

로우 다이내믹 레인지 (LDR) 모드는 UE4 에서 지원되는 퍼포먼스 티어 중 가장 높은 것으로, 라이팅이나 포스트 프로세싱 피처가 필요치 않은 게임에 추천됩니다.

이 모드를 사용하기 위해서는, 프로젝트 세팅 의 렌더링 부분에서 Mobile HDR 옵션을 꺼야 합니다.

DisableMobileHDR.png

장점

한계

추천

  • 모바일 디바이스에서 사용 가능한 모드 중 부하가 가장 적고 가장 빠른 모드입니다. 게임이 느린 모바일 디바이스에서도 잘 실행되도록 할 수 있습니다.

  • 그럼에도 머티리얼 에디터 전체를 사용하여 커스텀 셰이더를 정의하거나, 심지어 단순한 셰이딩을 통해 라이팅을 흉내낼 수도 있습니다.

  • 씬의 컬러 각 채널을 [0,1] 범위로 제한(clamp)시켜 감마 스페이스에 씁니다.

  • 반투명 프리미티브는 감마 스페이스에서 블렌딩됩니다. 그때문에 대부분의 경우 HDR 이나 일반 PC 타이틀용 머티리얼을 제작할 때와는 다른 방식으로 반투명 텍스처와 머티리얼을 따로 제작해 줘야 합니다.

  • 이 모드에서는 포스트 프로세싱 피처를 사용할 수 없습니다.

  • 최대 퍼포먼스를 위해 모든 머티리얼의 셰이딩 모델이 Unlit (라이팅제외)로 설정되었는지 확인합니다.

  • 최대 퍼포먼스를 내는 쪽으로 할 때는 씬에 배치된 라이팅을 사용하지 말아야 합니다.

  • 가급적 많은 연산을 머티리얼의 버텍스 셰이더 에서 하는 것을 고려하세요. Customized UVs 를 켜고, 노드를 연결해 준 다음, 픽셀 셰이더에서 Texture Coordinate 노드로 Customized UVs 를 타깃으로 하면 됩니다.

기본 라이팅

이 티어는 스태틱 라이팅과 fully rough (풀 러프니스) 머티리얼을 활용하여 레벨에 흥미로운 라이팅을 주면서도 퍼포먼스를 최대한 끌어올려 폭넓은 모바일 디바이스를 지원할 수 있도록 합니다.

이 모드를 사용하려면, 프로젝트 세팅 의 Rendering (렌더링) 섹션에서 프로젝트에 대한 Mobile HDR 옵션을 꺼야 합니다.

DisableMobileHDR.png

장점

한계

추천

  • 스태틱 라이팅, 글로벌 일루미네이션 피처를 사용할 수 있습니다.

  • 톤 매핑같은 일부 포스트 프로세싱 피처를 사용할 수 있는 풀 HDR 파이프라인 입니다.

  • 반투명이 리니어 스페이스에서 블렌딩되어 데스크톱용 제작시와 마찬가지의 콘텐츠 저작이 가능합니다.

  • 모든 머티리얼에 Fully Rough (풀 러프니스) 마킹을 해야 하므로, 머티리얼에 흥미로운 스페큘러 반사가 없습니다.

  • Lightmap Directionality (라이트맵 방향성)도 끈다면 노멀 맵의 효과가 없습니다.

  • 모든 머티리얼에 Fully Rough 플래그를 설정하여 만듭니다.

  • 머티리얼에 Lightmpa Directionaly (라이트맵 방향성)을 꺼 추가적인 퍼포먼스를 낼 수 있습니다.

  • 맵에 스태틱 라이트만 사용합니다.

  • 블룸 같은 포스트 프로세싱 피처를 완전히 끕니다. 또 기본적인 필름 및 컬러 컨트롤만 사용합니다. 자세한 것은 모바일 포스트 프로세스 문서를 참고하세요.

풀 HDR (High Dynamic Range) 라이팅

이 티어에서는 UE4 의 모바일용 HDR 라이팅 피처 뿐 아니라 일부 포스트 프로세싱 피처까지도 최대한 활용합니다. 이 피처를 사용하면 하이 퀄리티 라이팅 피처를 쓸 수 있는 대신 퍼포먼스 비용이 꽤 듭니다.

이 모드를 사용하려면, 프로젝트 세팅 의 Rendering (렌더링) 섹션에서 프로젝트에 대한 Mobile HDR 옵션을 켜야 합니다.

EnableMobileHDR.png

장점

추천

  • 스태틱 라이팅, 글로벌 일루미네이션 피처를 사용할 수 있습니다.

  • 일부 포스트 프로세싱 피처를 사용할 수 있는 풀 HDR 파이프라인 입니다.

  • 반투명이 리니어 스페이스에서 블렌딩되어 데스크톱용 제작시와 마찬가지의 콘텐츠 저작이 가능합니다.

  • 다양한 러프니스가 지원되어 표면에 사실적인 스페큘러 반사가 가능합니다.

  • 블룸을 켜서 HDR 라이팅 파이프라인의 장점을 최대한 활용해 보세요.

  • HDR 라이팅 조화된 사실적인 스페큘러 반사로 스페큘러에 계단현상이 생길 수 있습니다. 이러한 부작용을 줄이기 위해서는, 머티리얼 프로퍼티의 Normal Curvature to Roughness (노멀 굴곡을 러프니스로) 옵션을 켜서 노멀 맵의 고주파 정보로 인한 스페큘러 계단현상을 줄일 수 있습니다. 프로젝트 세팅 > 렌더링 에서 안티에일리어싱을 켜는 것도 계단현상을 줄이는 데 도움이 될 수 있으니 고려해 보시기 바랍니다.

  • 최적의 결과를 얻기 위해서는 Reflection Captures (리플렉션 캡처) 위치를 잘 배치하는 것이 좋습니다. 자세한 정보는 리플렉션 문서를 참고하세요.

  • 최적의 퍼포먼스를 위해서는 씬에 스태틱 라이트와 라이트맵만 사용하세요.

태양의 픽셀별 라이팅 포함 풀 HDR 라이팅

이 티어는 UE4 모바일에서 사용가능한 모든 HDR 라이팅 피처를 활용합니다. 이 티어는 '풀 HDR 라이팅' 티어와 같으며, 추천 및 장점 부분도 같지만 여기서는 씬에 디렉셔널 라이트를 하나 추가하면 자동으로 보다 높은 퀄리티의 픽셀 별 라이팅을 사용한다는 차이가 있습니다.

이 모드를 사용하려면, 프로젝트 세팅 의 Rendering (렌더링) 섹션에서 프로젝트에 대한 Mobile HDR 옵션을 켜야 합니다.

EnableMobileHDR.png

장점

추천

  • 풀 HDR 라이팅 티어의 모든 피처 및 장점이 포함됩니다.

  • 단일 디렉셔널 라이트에 대해 픽셀별 디퓨즈 및 스페큘러 라이팅이 가능합니다.

  • 단일 디렉셔널 라이트에 대해 높은 퀄리티의 미리계산된 디스턴스 필드 섀도우가 가능합니다.

  • 풀 HDR 라이팅 티어의 모든 장점 및 추천 내용이 여기에도 적용됩니다.

  • 스테이셔너리로 설정해야 하는 단일 디렉셔널 라이트를 제외하고는 씬에 스태틱 라이트만 사용하세요.

셰이더 복잡도 뷰 모드

모바일 프리뷰어 에서 셰이더 복잡도 뷰 모드를 통해 타깃으로 삼은 특정 디바이스에서 머티리얼 비용이 얼마나 되는지 파악할 수 있습니다. 화면에 나타난 색으로 해당 디바이스에서 머티리얼이 얼마나 비싼지를 알 수 있습니다. 초록은 퍼포먼스가 좋다는 뜻이고, 밝은 빨강은 매우 비싸며, 하양이나 분홍은 머티리얼이 매우 비싸다는 뜻입니다.

사용하려면 메인 뷰포트에서 뷰 모드 리스트를 클릭하고 최적화 뷰모드 - 셰이더 복잡도 를 선택하거나, 키보드 단축키 Alt + 8 을 누르면 됩니다.

클릭하면 이미지 원본을 확인합니다.

Mobile Sun Temple 의 몇 가지 예제입니다. 셰이더 복잡도 뷰 모드로 봤을 때 머티리얼 비용이 어떤지 파악할 수 있습니다:

1.png

2.png

3.png

여기서는 기둥 머티리얼이 꽤나 비싸며, 반투명 볼류메트릭 시트는 매우 비쌉니다. 이 씬에서는 반투명 시트 비용이 너무 비싸 제거해야 한다고 요청했습니다.

여기서 기둥 전부가 텍스처 룩업을 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 뒤에 다음 숫자 중 하나를 입력하면 됩니다.

MQS_Console_Command.png

머티리얼 퀄리티 레벨 숫자

세팅

0

낮음

1

높음

2

중간

높음이 1 이고 중간이 2 입니다. 오타가 아닙니다!

디바이스 프로파일에서

환경설정 (.ini) 파일을 사용하면, 에디터 안에서 다음과 같은 방법을 통해 타깃으로 삼으려는 디바이스에 대한 머티리얼 퀄리티를 설정할 수 있습니다.

  1. 메인 툴바에서 > 개발자 툴 로 이동하여 디바이스 프로파일 을 클릭합니다.

    클릭하면 이미지 원본을 확인합니다.

  2. 디바이스 프로파일에서 Android_Low 프로파일을 찾아 첫 번째 렌치 아이콘을 클릭하여 프로파일 옵션을 엽니다.

    MQS_Edit_Profile.png

  3. Rendering (렌더링) 아래 Console Variables (콘솔 변수) 부분에서 더하기 아이콘을 클릭하면 뜨는 입력 창에서 R.MaterialQualityLevel 이라 입력하고 Enter 키를 쳐 목록에 그 명령을 추가합니다.

    클릭하면 이미지 원본을 확인합니다.

  4. 새로운 항목을 추가한 후, 기본값을 1 에서 0 으로 바꾸면 저사양 Android 디바이스에서 프로젝트가 가장 빠른 머티리얼 세팅을 사용합니다.

    클릭하면 이미지 원본을 확인합니다.

여러가지 퀄리티 레벨 미리보기

프로젝트가 다양한 하드웨어에서 실행했을 때 어떻게 보이는지는 Preview Rendering Level (프리뷰 렌더링 레벨) 세팅을 조정하여 UE4 에디터에서 미리볼 수 있습니다. 이 세팅은 메인 툴바 에서 세팅 > Preview Rendering Level (프리뷰 렌더링 레벨)에서 사용하고자 하는 프리뷰 레벨을 선택하면 됩니다.

클릭하면 이미지 원본을 확인합니다.

머티리얼 퀄리티 레벨 전환

Quality Switch 머티리얼 표현식으로 하나의 머티리얼 안에 다양한 수준의 복잡도를 정의할 수 있습니다. 예를 들어 복잡한 수학 연산이 있거나 고사양 디바이스에서만 작동하는 무거운 텍스처 읽기 작업이 있는 경우, 이 노드를 사용하면 고사양 그래픽 처리가 불가능한 저사양 디바이스에서 표시할 단순화된 버전을 지정할 수 있습니다.

image08.png

머티리얼에서 Quality Switch 를 사용하려면, 먼저 머티리얼 그래프에 Quality Switch 머티리얼 표현식 노드를 추가한 뒤, 그 출력을 메인 머티리얼 노드의 입력에 연결해 줘야 합니다. 다음 그림은, 시작용 콘텐츠에서 찾을 수 있는 M_Brick_Clay_Old 머티리얼을, 퀄리티 레벨을 바꿨을 때 머티리얼 복잡도가 감소되도록 구성한 것입니다.

클릭하면 이미지 원본을 확인합니다.

모바일 머티리얼 옵션

아무 머티리얼 이나 열고 메인 머티리얼 노드를 클릭한 뒤 디테일 패널의 Mobile 부분을 보면 다음의 두 프로퍼티를 찾을 수 있습니다:

프로퍼티

세팅

Fully Rough

풀 러프니스 - 머티리얼의 러프니스를 최대치로 강제시켜 인스트럭션 다수와 텍스처 샘플러 하나를 절약할 수 있습니다.

Use Lightmap Directionality

라이트맵 방향성 사용 - 라이트맵 방향성과 픽셀 단위 노멀을 사용합니다. 끄면 라이트맵은 밋밋해 지지만 비용이 저렴해집니다.

클릭하면 이미지 원본을 확인합니다.

이 두 프로퍼티를 켜면 머티리얼을 저사양 디바이스에서 봤을 때 해당 피처의 렌더링 패스를 완전히 없애 렌더링 비용을 낮추는 데 도움이 됩니다. 하지만 이는 모든 디바이스에서 이 머티리얼을 켜느냐 마느냐 밖에 없는 양자택일 옵션입니다.

모바일 머티리얼 렌더링 오버라이드

플랫폼에서 사용할 렌더링 옵션은 프로젝트 세팅 > 플랫폼 아래 다양한 타깃 디바이스에 대한 머티리얼 퀄리티 세팅을 조절하여 덮어쓸 수 있습니다.

PS_QualityLevels.png

Android:

  • Open GLES 2

  • Open GLES 3.1

  • Vulkan

iOS:

  • Open GLES 2

  • Metal

플랫폼에서 사용할 수 있는 렌더링 옵션은 나열된 Quality Options (퀄리티 옵션)을 조절하여 덮어쓸 수 있습니다. 이 오버라이드 사용을 위해서는, Enable Quality Overrides (퀄리티 오버라이드 사용) 옵션을 켠 뒤 주어진 퀄리티 레벨을 덮어쓰고자 하는 옵션을 선택하면 됩니다.

EnableQualityLevelOverrides.png

원하는 옵션을 전부 선택했으면, 프리뷰 셰이더 업데이트 버튼을 클릭하여 모든 머티리얼이 지정한 옵션으로 작동하도록 다시 컴파일합니다.

QualityLevelsUpdateShaders.png

모바일 렌더링 옵션

프로젝트 세팅 메뉴의 Rendering (렌더링) 부분 아래에서, 모바일 프로젝트의 라이팅 및 최적화 처리 방식을 제어하는 프로퍼티를 여럿 찾을 수 있습니다. 여기서는 그 세팅에는 어떠한 것들이 있고, 프로젝트에 어떠한 영향을 끼치는지 알아보겠습니다.

프로젝트 세팅 접근

프로젝트 세팅 접근을 위해서는, 먼저 메인 툴바 에서 편집 > 프로젝트 세팅 을 선택합니다.

MRO_Project_Settings.png

프로젝트 세팅 메뉴가 열리면, Engine (엔진) 부분을 열고 Rendering 카테고리에서 Mobile 부분을 찾습니다. 다음 섹션으로 아래 세팅을 조절합니다:

  • Mobile

  • Lighting

  • Mobile Shader Permutation

클릭하면 이미지 원본을 확인합니다.

모바일 렌더링 옵션

Mobile (모바일) 카테고리 아래에서는, 모바일 프로젝트의 라이팅과 외양에 직접 영향을 주는 프로퍼티를 설정할 수 있습니다. 아래를 참고하여 해당 세팅을 프로젝트에 직접 실험해 보시기 바랍니다.

MRO_Mobile_Settings.png

프로퍼티 이름

설명

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 (모바일 셰이더 퍼뮤테이션 감소) 섹션에는, 머티리얼에 대해 생성되는 이펙트 셰이더를 켜고 끄는 옵션이 여러가지 있습니다. 이를 통해 앱 크기가 줄어들고, 메모리가 절약되며, 로드 시간이 빨라집니다.

MobileOptimizations.png

프로퍼티 이름

설명

Lighting

라이팅 - 프로젝트 세팅의 Lighting (라이팅) 섹션 아래 있는 옵션은 모바일 퍼포먼스 조정에 사용됩니다.

Allow Static Lighting

스태틱 라이팅 허용 - 라이트맵이나 섀도우맵 등 스태틱 라이팅 생성을 허용하는 옵션입니다. 다이내믹 라이트만 사용하거나 언릿 모드만 사용하는 게임은 이 옵션을 0 으로 설정하면 스태틱 라이팅 비용을 조금 절약됩니다.

Mobile Shader Permutation Reduction

모바일 셰이더 퍼뮤테이션 감소 - Mobile Shader Permutation Reduction (모바일 셰이더 퍼뮤테이션 감소) 섹션 아래 있는 옵션은 모바일 퍼포먼스 조정에 사용됩니다.

Support Combined Static and CSM Shadowing

스태틱 및 CSM 그림자 합성 지원 - 프리미티브가 스테이셔너리 라이트의 스태틱 그림자도 CSM 그림자도 받을 수 있도록 합니다. 이 옵션을 끄면 모바일 텍스처 샘플러가 하나 해제됩니다.

Support Distance Field Shadowing

디스턴스 필드 섀도잉 지원 - 프리미티브가 스테이셔너리 디렉셔널 라이트에서 디스턴스 필드 섀도우를 받도록 셰이더를 생성합니다.

Support Movable Directional Light

무버블 디렉셔널 라이트 지원 - 프리미티브가 무버블 디렉셔널 라이트를 받도록 셰이더를 생성합니다.

Max Movable Point Lights

최대 무버블 포인트 라이트 - 모바일 디바이스에서 지원할 다이내믹 포인트 라이트 개수입니다. 다이내믹 포인트 라이트가 필요치 않은 게임에서 이 값을 0 으로 설정하면 생성되는 셰이더 개수가 줄어듭니다.

Use Shared Movable Point Light Shaders

공유 무버블 포인트 라이트 셰이더 사용 - 이 세팅을 켜면, 표면에 닿는 다이내믹 포인트 라이트가 몇 개든 (최대 위에 지정된 개수까지) 같은 셰이더를 사용합니다. 약간 느리지만 생성되는 셰이더 개수가 줄어듭니다.

이 세팅 중 하나를 바꾸면 에디터를 재시작해야 효과가 적용됩니다.

현재 라이팅 셋업에서 필요한 셰이더 퍼뮤테이션을 끄면, 라이팅 또는 섀도잉이 제대로 렌더링되지 않으며, 정상 작동을 위해 다시 켜야 하는 세팅이 무엇인지 화면상에 메시지로 표시됩니다.

추가 제안

모바일 플랫폼에서 최적의 퍼포먼스를 내기 위해 콘텐츠를 셋업할 때 도움이 되는 제안은 다음과 같습니다. 끼치는 영향이 큰 순서대로 나열되어 있습니다.

  • 디바이스에서 실행하기 전 라이팅이 빌드되었는지 확인합니다.

  • 모바일 플랫폼에서는 비녜트나 스크린 스페이스 리플렉션 등 대부분의 포스트 프로세싱 피처가 너무 비싸므로 끄도록 합니다. 블룸 및 뎁스 오브 필드 등 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 콘솔 명령으로 텍스처 메모리 사용 현황을 확인할 수 있습니다.

태그
Select Skin
Light
Dark

새로운 언리얼 엔진 4 문서 사이트에 오신 것을 환영합니다!

문서 사이트에 대한 의견을 모을 수 있는 피드백 시스템을 포함해서 여러가지 새로운 기능을 준비하고 있습니다. 아래 Documentation Feedback 포럼(영문) 또는 언리얼 엔진 네이버 공식 카페(한글) 중 편하신 곳에 의견이나 문제점을 알려 주세요.

새 시스템이 준비되면 알려 드리겠습니다.

네이버 카페
공식 포럼