Adaptive Performance가 첫 선을 보인 후 12개월만인 2020년 8월 발표된 2.0 버전에서는 1.0에서 아쉬웠던 부분에 대해 집중했습니다.
컨텐츠 조절 기능과 개발자들의 사용성 강화를 위해 3가지 측면의 개선을 진행했습니다.
Indexer and Quality Scaler
Unity Editor UX/UI
Simulator
1.0에서 개발자가 직접 구현해야 했던 컨텐츠의 실시간 조절 기능을 Quality Manager 시스템을 구현하여 다양한 Built-in Scaler로 제공하면서,
개발자들이 Adaptive Performance 의 여러기능들을 더 쉽고, 편하게 사용할 수 있도록 Editor의 UX/UI를 추가했고, Simulator를 통해 단말에
직접 연결하지 않고도 손쉽게 동작 상황에 대한 테스트를 할 수 있게 만들었습니다.
세부 구현 사항은 아래와 같습니다.
Unity Editor UX/UI
Adaptive Performance Package와 Adaptive Performance Samsung Android Package를 설치하면, Project Settings 에 Adaptive Performance 가 추가 된 것을 확인 할 수 있습니다. 정상적인 사용을 위해서는 우선 Providers를 선택해야 합니다.
단말에서 사용하는 경우, 아래와 같이 Samsung Android Provider를 선택합니다.
Simulator에서 사용하는 경우, PC MAC & Linux Standalone settings에서 Device Simulator Provider를 선택하면 됩니다.
Provider을 선택까지 완료했다면, Project Settings의 Adaptive Performance UI를 통해 간편하게 Adaptive Performance 기능을 사용할 수 있습니다.
Auto Performance Mode는 1.0 부터 제공되어 온 Power Manager 사용에 대한 항목으로 최고의 성능을 제공하면서 동시에 배터리 소모를 줄이기 위해 CPU와 GPU Level 변화에 따라 자동으로 성능을 조절합니다. Adaptive Performance setting에서 이 모드를 체크하고, Indexer Settings의 Active 항목을 활성화 하면 설정하려는 Scaler를 간단한 checkbox와 단계 조정만으로 사용할 수 있습니다. 이 경우, Scaler의 설정이 프로젝트 전체에 적용됩니다. Scene 별로 다르게 설정하고 싶다면, Adaptive Performance Setting Object를 Scene에 붙여 더 세세한 설정을 할 수 있습니다.
Simulator
2.0 에서는 시뮬레이터 기능을 추가해 개발자들이 단말 없이도 간단하게 발열 상황에서의 동작을 확인하거나, Scaler 값을 변경한 결과를 확인할 수 있도록 했습니다. 시뮬레이터를 사용하려면 Package Manager에서 Device Simulator Package를 다운받아야 합니다. Project Settings > Adaptive Performance > Simulator 에서 위의 Unity Editor UX/UI 와 마찬가지로 Scaler 별 세팅을 할 수 있습니다.
원하는 Scaler 세팅을 마쳤다면, Window > General > Device Simulator 로 시뮬레이터 창을 열고, 이를 통해 온도와 Bottleneck 조건에 따라 조절되는 Adaptive Performance 동작을 미리 확인 할 수 있습니다.
Indexer and Quality Scaler
Indexer는 단말의 온도와 성능 상태에 따라 게임의 퀄리티를 조절하는 Adaptive Performance System을 말하며, 이 시스템 안에서 퀄리티를 조절할 수 있는 각각의 항목을 Scaler라고 합니다.
Scaler는 다음과 같은 우선 순위에 영향을 받아 실시간으로 각각 어떻게 조절될 지 결정됩니다.
Target Current Bottleneck
Lowest Level
Lowest Visual Impact
Scaler는 Indexer Settings이 Active 로 활성화 되어있을 때만 동작하며, 이는 앞서 Editor UI에서 살펴 본 Project Setting 창에서 설정할 수 있습니다.
Built-in Scalers
현재 2.0에서 제공하는 Built-in Scaler 들은 아래와 같습니다.
General Render
Adaptive Framerate : 정의된 최소/최대값의 범위 안에서 게임의 framerate를 자동으로 조절
Adaptive LOD : 단말의 온도와 성능 로드에 따라 LOD bias 값을 조절
Adaptive Resolution : 정의된 범위 내에서 화면 해상도를 자동으로 조절
Universal Render Pipeline Scalers
Universal Render Pipeline(URP)의 세팅 값을 이용하는 Scaler입니다. URP가 아닌 다른 Render Pipeline을 사용할 시, 변화가 없습니다.
Adaptive Batching : 온도와 성능 로드에 따라 Dynamic batching을 전환
Adaptive LUT : Universal Render Pipeline의 LUT bias 값을 변경
Adaptive MSAA : URP의 Anti Aliasing Quality Bias 값을 변경. 카메라의 SMAA(Post Processing Subpixel Morphological Anti-Aliasing) 품질 수준에만 영향
Adaptive Shadow Cascades : URP의 Main Light Shadow Cascades Count Bias 값을 변경
Adaptive Shadow Distance : URP의 Max Shadow Distance Multiplier 값을 변경
Adaptive Shadow Quality : URP의 Shadow Quality Bias 값을 변경
Adaptive Shadow map Resolution : URP의 Main Light Shadowmap Resolution Multiplier 값을 변경
Adaptive Sorting : URP의 front-to-back sorting 방식을 건너 뜀
Built-in Scaler는 개발자들이 좀 더 편하게 컨텐츠의 Quality 조절 을 할 수 있도록 기본 제공됩니다. 개발자들은 어떤 Quality를, 어느 범위 안에서 조절할 것인지 기본 제공 UI에서 선택할 수 있기 때문에 쉽고 안전하게 사용할 수 있습니다.
Custom Scaler
위 Built-in Scaler 외에 개발자가 직접 Custom Scaler를 만들 수 있는데, 이는 AdaptivePerformanceScaler 를 상속받는 새로운 클래스를 생성하면 됩니다.
아래는 AdaptivePerformanceScaler를 상속받은 TextureQualityScaler 예제입니다.
public class TextureQualityScaler : AdaptivePerformanceScaler
{
public override ScalerVisualImpact VisualImpact => ScalerVisualImpact.High;
public override ScalerTarget Target => ScalerTarget.GPU;
public override int MaxLevel => 2;
int m_DefaultTextureQuality;
protected override void OnDisabled()
{
QualitySettings.masterTextureLimit = m_DefaultTextureQuality;
}
protected override void OnEnabled()
{
m_DefaultTextureQuality = QualitySettings.masterTextureLimit;
}
protected override void OnLevel()
{
switch (CurrentLevel)
{
case 0:
QualitySettings.masterTextureLimit = 0;
break;
case 1:
QualitySettings.masterTextureLimit = 1;
break;
case 2:
QualitySettings.masterTextureLimit = 2;
break;
}
}
}
Samsung Provider Scaler
Samsung Provider를 선택하여 Samsung Provider Scaler를 사용하도록 설정한 경우, VRR (Variable Refresh Rate) 과 관련된 삼성 특화 feature인 Adaptive VRR scaler를 사용할 수 있습니다. 현재 Galaxy 단말 중 VRR을 지원하는 단말은 Galaxy S20입니다.
기본적으로 VRR을 지원하는 단말에서는 Automatic VRR 기능을 사용할 수 있습니다. 이는 Project Settings에서 enable 할 수 있는 항목으로, 자동으로 현재 framerate에 맞는 refresh rate를 설정해 배터리 소모를 줄일 수 있는 Scaler입니다.
Samsung Provider에서는 Automatic VRR과 Adaptive Framerate을 동시에 enable 할 경우, Adaptive VRR 기능이 동작합니다. Adaptive VRR이 동작하면 Automatic VRR과 Adaptive Framerate 세팅에서 최소/최대값으로 설정해둔 값 사이에서, 달성할 수 있는 framerate에 가장 가까운 refresh rate으로 동작합니다. 이를 통해 씬 별 target framerate 설정이 가능하며, 원하는 범위 안에서 단말의 온도나 상태 등에 따라 framerate을 부드럽게 조절할 수 있어 사용자들이 VRR 조절에 따른 위화감을 느끼지 않고 게임을 플레이 할 수 있습니다.
Adaptive VRR은 Adaptive Framerate Sample을 통해 동작을 확인 할 수 있습니다.
What will change with Quality Scaler
컨텐츠의 Quality 조절은 게임의 서비스 품질이 떨어질 수 있기 때문에 개발자들에게 거부감을 줍니다. 그러나 2.0 의 Quality Manager 는 Scaler 조절에 따른 Visual Impact을 최소화 하도록 추가적인 옵션을 제공합니다. 각각의 Scaler들은 Visual Impact 옵션을 가지고 있는데, 성능 조절 시 해당 값을 반영하여 동작하게 됩니다.
아래의 이미지는 Unity Boat Attack Demo이며, LOD Level에 따른 차이가 얼마나 눈에 보이는지 비교할 수 있습니다. 비교 확대한 부분을 보면, LOD Level이 낮을 때 일부 나무가 사라진 것을 볼 수 있습니다.
이처럼 화면 상의 차이를 육안으로 확인 할 수 있는 Scaler가 있는가 하면, 반대로 Visual Impact이 거의 없는 Scaler도 있습니다.
다음은 Texture Quality Level에 따른 차이를 비교한 예시입니다. 눈으로는 거의 차이를 확인할 수 없지만, RenderDoc 캡쳐를 보면, 실제 텍스쳐의 크기가 줄어든 것을 확인 할 수 있습니다.
두 가지 예시에서 볼 수 있듯, Scaler의 종류에 따라서 Visual Impact의 차이가 생기기도 하지만, 같은 Scaler 안에서도 범위를 어떻게 설정하느냐에 따라 다른 Visual Impact이 생길 수 있습니다. 따라서 개발자가 각자의 기준에 맞춰 성능과 Quality 사이의 균형을 적절하게 설정하는 것을 권장합니다.
※ Adaptive Performance 1.0 지원 버전과 더 자세한 User Guide 및 FAQ에 대해서는 아래에서 확인하실 수 있습니다.
We use cookies to improve your experience on our website and to show you relevant
advertising. Manage you settings for our cookies below.
Essential Cookies
These cookies are essential as they enable you to move around the website. This
category cannot be disabled.
Company
Domain
Samsung Electronics
.samsungdeveloperconference.com
Analytical/Performance Cookies
These cookies collect information about how you use our website. for example which
pages you visit most often. All information these cookies collect is used to improve
how the website works.
Company
Domain
LinkedIn
.linkedin.com
Meta (formerly Facebook)
.samsungdeveloperconference.com
Google Inc.
.samsungdeveloperconference.com
Functionality Cookies
These cookies allow our website to remember choices you make (such as your user name, language or the region your are in) and
tailor the website to provide enhanced features and content for you.
Company
Domain
LinkedIn
.ads.linkedin.com, .linkedin.com
Advertising Cookies
These cookies gather information about your browser habits. They remember that
you've visited our website and share this information with other organizations such
as advertisers.
Company
Domain
LinkedIn
.linkedin.com
Meta (formerly Facebook)
.samsungdeveloperconference.com
Google Inc.
.samsungdeveloperconference.com
Preferences Submitted
You have successfully updated your cookie preferences.