Unreal Engine は、デバイス プロファイル と スケーラビリティ設定 を使用して、ハードウェアごとにレンダリング設定をカスタマイズできます。スケーラビリティ設定では、シャドウ、フォリッジ、メッシュの詳細など、個々の機能の品質レベルを定義して、さまざまな設定の配列を簡単にスケーリングできる 1 つの値に凝縮します。次に、デバイス プロファイルが、これらの設定を互換性のあるデバイスにマップします。
Android には、特定の GPU ファミリ に一致する多数のプロファイルがあります。このガイドでは、デバイス一致ルール、このルールの編集方法、およびスケーラビリティ設定を使用して、ゲーム固有のニーズに合ったプロファイルを作成する方法について説明します。
コンフィグと優先順位
Unreal Engine の コンフィグ は、エンジンのインストール ディレクトリとプロジェクト フォルダの両方から読み取られます。「Engine/Config
」フォルダで、エンジンの基本のコンフィグ設定が設定されます。その後、次の順序で相互にオーバーライドされます。

Engine/Config/Base*.ini
Project/Config/Base*.ini
Engine/Config/Android/Android*.ini
Project/Config/Android/Android*.ini
例えば、「Engine/Config/Android
」にある「AndroidDeviceProfiles.ini
」ファイルは、「Engine/Config
」と「Project/Config
」の両方のフォルダにある「BaseDeviceProfiles.ini
」よりも優先されます。Project/Config/Android
にある AndroidDeviceProfiles.ini
は上記のすべてよりも優先されます。
Android デバイス プロファイル
標準の Android デバイス プロファイルは Android_Low
、Android_Mid
、および Android_High
です。Android_High
プロファイルは、最もハイエンドの Android デバイスで Unreal Engine がサポートするすべての機能を表し、Android_Low
は、最もローエンドの Android デバイス向けの最小限の機能セットを表します。
また、デバイス プロファイルは Unreal Engine でサポートされている GPU ファミリに基づいて、より具体的に分類されています。これは、同じ GPU を搭載したモバイル デバイスは通常同様のパフォーマンス特性を備えているためです。これらの GPU 固有のデバイス プロファイルでは通常、標準プロファイル (Android_High
など)の 1 つを特定のデバイスにマップしますが、デバイスに合わせて調整が必要な場合があります。
例えば、次のデバイス プロファイルは、Unreal Engine 4.24 の Adreno 5xx デバイス用です。
BaseDeviceProfiles.ini
[Android_Adreno5xx DeviceProfile]
DeviceType=Android
BaseProfileName=Android_High
+CVars=r.DisjointTimerQueries=1
[Android_Adreno5xx_No_Vulkan DeviceProfile]
DeviceType=Android
BaseProfileName=Android_Adreno5xx;
There are several issues (vulkan sub-passes, occlusion queries) on devices running Android 7 and earlier
+CVars=r.Android.DisableVulkanSupport=1
標準 Android_Adreno5xx
のデバイス プロファイルは、その基本設定のすべてで Android_High
を継承しており、オーバーライドされているのは rDisjointTimerQueries
のみです。その次の Android_Adreno5xx_No_Vulkan
プロファイルでは、標準の Android_Adreno5xx
プロファイルを継承し、古い Adreno5xx デバイスの問題に起因する Vulkan レンダラ のサポートを無効にする別のオーバーライドが指定されています。
ユーザーは、ゲームのコンテンツに基づいて、プロジェクトの「AndroidDeviceProfiles.ini
」で既存のプロファイルをオーバーライドしたり、新しいプロファイルを指定する必要があります。必要に応じて、これらの GPU 固有のプロファイルを GPU ファミリ内のより具体的なデバイスを表すようにさらに拡張したり、以前に定義したプロファイルを完全に作成し直すこともできます。
デバイス プロファイルの一致ルール
起動されると、Unreal Engine アプリケーションは、自身を実行しているデバイスに関する情報を読み込みます。次に、アプリケーションが、これらのパラメータに基づいてデバイスを識別するルールのリストを反復処理します。これらは、[/Script/AndroidDeviceProfileSelector.AndroidDeviceProfileMatchingRules]
セクションの下にある **BaseDeviceProfiles.ini**
にあります。アプリケーションが、取得したデバイス情報に一致するルールを検出すると、リストの処理を停止し、そのデバイス プロファイルを使用します。
このリストのエントリの形式は次のとおりです。
+MatchProfile=(Profile="Profile_Name", Match=( ( Rule 1 ), ( Rule 2 ), (...) )
ルール自体は、文字列の比較で、次の形式を使用します。
SourceType=[source string], CompareType=[comparison type], MatchString=[string to compare the source string to]
SourceType に指定する値に応じて、システムが MatchString と比較する source string (ソース文字列) を出力します。
SourceType および対応するソース文字列出力に有効な値は次のとおりです。
SourceType 値 | 説明 | 出力例 |
---|---|---|
SRC_DeviceModel |
デバイスのモデル番号。 | 「Nexus 6」 |
SRC_DeviceMake |
デバイスの製造元。 | 「NVidia」 |
SRC_GPUFamily |
対象デバイスの GPU の GPU ファミリ。 | 「Adreno(TM)320」、「NVIDIA Tegra」 |
SRC_GlVersion |
このデバイスが実行している OpenGL のバージョン。 | OpenGL ES 3 |
SRC_AndroidVersion |
このデバイスで使用される Android オペレーティング システムのバージョン。 | 任意の数値。 |
SRC_VulkanAvailable |
アプリケーションが Vulkan を有効にしてパッケージ化されているかどうか、およびデバイスがプロジェクト設定で指定された Vulkan の必要なバージョンをサポートしているかどうかを検証します。 | Vulkan を使用しない場合は False 、使用する場合は true 。 |
SRC_VulkanVersion |
使用可能な場合、このデバイスが使用する Vulkan のバージョン。 | 任意の数値。 |
SRC_PreviousRegexMatch |
同じ MatchProfile エントリ内の以前の RegEx 一致の値。 | RegEx 一致によって以前に出力された情報。 |
使用可能な比較型は次のとおりです。
比較型 | 説明 |
---|---|
CMP_Regex |
MatchString で正規表現演算子を使用する比較を実行します。 |
CMP_Equal |
2 つの文字列の値が厳密に同じであることを検証します。 |
CMP_EqualIgnore |
CMP_Equal と同じ処理を実行します。ただし、大文字と小文字を区別しません。 |
CMP_NotEqual |
2 つの文字列の値が同じではないことを検証します。 |
CMP_NotEqualIgnore |
CMP_NotEqual と同じ処理を実行します。ただし、大文字と小文字を区別しません。 |
CMP_Less |
ソース文字列の数値が MatchString より小さいかどうかを検証します。 |
CMP_LessIgnore |
CMP_Less と同じ処理を実行します。ただし、大文字と小文字を区別しません。 |
CMP_LessEqual |
CMP_Less と同じ処理を実行します。ただし、ソースと MatchString も等しい場合は true を返します。 |
CMP_LessEqualIgnore |
CMP_LessEqual と同じ処理を実行します。ただし、大文字と小文字を区別しません。 |
CMP_Greater |
ソース文字列の数値が MatchString より大きいかどうかを検証します。 |
CMP_GreaterIgnore |
CMP_Greater と同じ処理を実行します。ただし、大文字と小文字を区別しません。 |
CMP_GreaterEqual |
CMP_Greater と同じ処理を実行します。ただし、ソースと MatchString も等しい場合は true を返します。 |
CMP_GreaterEqualIgnore |
CMP_GreaterEqual と同じ処理を実行します。ただし、大文字と小文字を区別しません。 |
例えば、4.24 の Mali T8xx デバイスのエントリは次のとおりです。
BaseDeviceProfiles.ini
+MatchProfile=(Profile="Android_Mali_T8xx_No_Vulkan",Match=((SourceType=SRC_GpuFamily,CompareType=CMP_Regex,MatchString="^Mali\-T8"),(SourceType=SRC_AndroidVersion, CompareType=CMP_Regex,MatchString="([0-9]+).*"),(SourceType=SRC_PreviousRegexMatch,CompareType=CMP_Less,MatchString="8")))
この MatchProfile エントリには次の 3 つのルールがあります。
- GPU ファミリが文字列「^Mali-T8」に正規表現一致している必要があります。
- Android バージョンには 1 つ以上の数字が必要です。数字は、数字以外が見つかるまで記憶されます。
- 2 番目のルールから取得した Android バージョンは 8 未満でなければなりません。
これらの基準がすべて満たされている場合、プロファイル Android_Mali_T8xx_No_Vulkan
が使用されます。
デバイス プロファイル ルールは、最初に製造元によってリストされ、最もローエンドの仕様から最もハイエンド仕様まで昇順でリストされます。標準の Android プロファイルでは、どのルールにも適合せず、特定のデバイスを識別できない場合は、フォールバックとしてリストされます。
このリストにルールを追加する場合は、同じファミリ内の他のデバイスに合わせて適切な順序でルールを挿入してください。
Vulkan を有効にする
VulkanAvailable
という特別なパラメータを使用して、デバイスが Android Vulkan レンダラを使用できるかどうかを識別します。まず、ゲーム自体で Vulkan サポートが有効になっているかどうかを確認し、次にデバイスに Vulkan ドライバーが搭載されているかどうかを確認します。これらの条件の両方が満たされる場合、VulkanAvailable
が true
であると見なされます。
Vulkan をサポートするデバイスには、Vulkan を使用する場合と使用しない場合の両方のプロファイルがあり、ターゲット デバイスで使用可能であっても Vulkan を使用しないプロジェクトに対応できます。すべてのプロファイルには、r.Android.DisableVulkanSupport
というパラメータがあり、デフォルトでは 1
に設定されています。Vulkan 対応のデバイス プロファイルは、このパラメーターを 0
にオーバーライドします。
Vulkan を有効にしたデバイスは、Android 9 以降を実行しているデバイスにのみお勧めします。Vulkan をサポートする初期のデバイスには、ドライバーに多数のバグがあったためです。
スケーラビリティ設定
Unreal Engine の基本のスケーラビリティ設定は、エンジンのインストールディレクトリにある「Engine/Config/BaseScalability.ini
」で定義されています。Android デバイスのスケーラビリティ設定は、「Engine/Config/Android/AndroidScalability.ini
」で定義されています。

スケーラビリティの値について
スケーラビリティの設定では幅広いパラメータを取り、それらのパラメータを 0〜3 の単純な値で定義できる広範なカテゴリにまとめます。例えば、以下は「BaseScalability.ini
」のShadowQuality レベルが 0 のスケーラビリティのマッピングです。
BaseScalability.ini
[ShadowQuality@0]
r.LightFunctionQuality=0
r.ShadowQuality=0
r.Shadow.CSM.MaxCascades=1
r.Shadow.MaxResolution=512
r.Shadow.MaxCSMResolution=512
r.Shadow.RadiusThreshold=0.06
r.Shadow.DistanceScale=0.6
r.Shadow.CSM.TransitionScale=0
r.Shadow.PreShadowResolutionFactor=0.5
r.DistanceFieldShadowing=0
r.DistanceFieldAO=0
r.VolumetricFog=0
r.LightMaxDrawDistanceScale=0
r.CapsuleShadows=0
リストされている各値は、きわめて具体的な機能を表し、それぞれに独自のスケールがあります。例えば、ピクセル解像度に関するものもあれば、デフォルト値を乗算するスケーリング係数に関するものもあり、より任意に設定できるものもあります。機能ごとに定義するのは大変な労力を要する上に、ハードウェアが頻繁に更新されリリースのたびにに調整しなければなりません。
そのため、ShadowQuality を使用して、関連する設定のグループを人間が読み取ることのできる単一の値に凝縮しています。上記のエントリは、コンフィグ ファイルで sg.ShadowQuality
が 0
に設定されている場合にこれらの値がすべてどのように動作するかを定義します。ShadowQuality@1 から 3
にも同様のエントリがあります。
これらのデフォルトのスケーラビリティ値のガイドラインは次のとおりです。
スケーラビリティ値 | 説明 |
---|---|
0 | 低品質。Unreal Engine がサポートするハードウェアの最小範囲と互換性のある最低限の設定。 |
1 | 中程度の品質。Unreal Engine がテストされた最もローエンドと最もハイエンドのデバイスの間の幅広いハードウェアで快適に利用できる設定。 |
2 | 高品質。Unreal Engine がテストされている、ほとんどのハイエンドのハードウェアで使用できる快適な設定。 |
3 | Epic 品質。Unreal Engine の現在のバージョンの特定の機能で使用可能な最高値。 |
スケーラビリティ設定をオーバーライドする
スケーラビリティ設定をオーバーライドするには、プロジェクトの独自の Config ディレクトリに「AndroidScalability.ini」を作成できます。例えば、AndroidQuickStart というプロジェクトがある場合、作成した .ini ファイルは「AndroidQuickStart/Config/Android」に配置します。

このファイルで作成されたスケーラビリティ設定は、「Engine/Config/Android/AndroidScalability.ini
」で定義された設定よりも優先されます。
デバイス プロファイルでスケーラビリティ値を設定する
デバイス プロファイルでスケーラビリティ値を参照するには、sg.
というプレフィックスに続けて、設定する値の名前を入力します。たとえば、デバイス プロファイルで ShadowQuality を 1 に設定した場合は、次を使用します。
+CVars=sg.ShadowQuality = 1
このスケーラビリティ値の後にリストする設定は、元の値よりも優先されます。ただし、「*Scalability.ini
」ファイル内のスケーラビリティ パラメータを変更して、デバイス プロファイル内の小規模パラメータを変更するのではなく、スケーラビリティ グループを一貫して遵守することを強くお勧めします。そうすることで、エディタ内の [Preview Rendering Level (プレビュー レンダリング レベル)] でモバイル スケーラビリティ値が正確に適用されます。
ランタイム時にスケーラビリティ設定を変更する
デバイス プロファイルによって選択される最初のスケーラビリティ設定は単なるデフォルトであり、スケーラビリティはさまざまな方法でランタイム時に簡単に変更できます。
Unreal Editor の設定メニューを使用する
テスト目的で、ツールバー の [Settings (設定)] ドロップダウンをクリックし、[Engine Scalability Settings (エンジンの拡張機能設定)] に移動して、Unreal Editor 内のゲームのスケーラビリティ設定を変更することができます。
画像をクリックするとフルサイズで表示されます。
このメニューで行われた変更はすぐに適用されます。
コンソール コマンドを使用してスケーラビリティ設定を変更する
また、任意のスケーラビリティ設定を コンソール コマンド と呼ぶこともできます。例えば、コンソール内で「sg.FoliageQuality 2
」と入力して Enter キーを押すと、それに応じて FoliageQuality の下のすべての CVar の値が変更されます。

[Engine Scalability Settings (エンジンの拡張機能設定)] メニューの値は、この変更を反映します。

また、数値を指定することなくコンソール コマンドとして名前を入力して、スケーラビリティ設定の現在の値を出力することもできます。例えば、「sg.FoliageQuality
」と入力して Enter キーを押すと、コンソールは FoliageQuality の現在の値と前回その値が設定された場所の両方を出力します。

ブループリントでスケーラビリティ設定を変更する
ブループリントではコンソール コマンドを使用してスケーラビリティ設定を変更することができますが、スケーラビリティ設定は Game User Settings の一部である専用関数を使用してアクセスすることもできます。この場合、Get Game User Settings ノードを使用して、スケーラビリティ設定への参照を取得できます。
画像をクリックするとフルサイズで表示されます。
この機能を UMG を併用すると、これらの設定を変更できるメニューを作成することができます。これにより、ユーザーはゲームのグラフィックスとパフォーマンスを必要に応じてカスタマイズできます。
C++ でスケーラビリティ設定を変更する
C++ では、スタティック関数 UGameUserSettings::GetGameUserSettings
を使用してゲームユーザー設定にアクセスできます。専用の get 関数および set 関数を使用して、スケーラビリティ設定の品質レベルを取得および設定できます。
#include "MyActor.h"
#include "GameUserSettings.h"
void AMyActor::SampleScalabilityFunctions()
{
//Getting a reference to the Game User Settings.
UGameUserSettings* UserSettings = UGameUserSettings::GetGameUserSettings();
//Getting the current Foliage Quality.
Int32 FoliageQuality = UserSettings->GetFoliageQuality();
//Setting the current Foliage Quality to High.
UserSettings->SetFoliageQuality(2);
}