Android 向けのデバイス プロファイルとスケーラビリティのカスタマイズ

デバイス プロファイルのルールとスケーラビリティの設定に関するリファレンス。

Unreal Engine は、デバイス プロファイルスケーラビリティ設定 を使用して、ハードウェアごとにレンダリング設定をカスタマイズできます。スケーラビリティ設定では、シャドウ、フォリッジ、メッシュの詳細など、個々の機能の品質レベルを定義して、さまざまな設定の配列を簡単にスケーリングできる 1 つの値に凝縮します。次に、デバイス プロファイルが、これらの設定を互換性のあるデバイスにマップします。

Android には、特定の GPU ファミリ に一致する多数のプロファイルがあります。このガイドでは、デバイス一致ルール、このルールの編集方法、およびスケーラビリティ設定を使用して、ゲーム固有のニーズに合ったプロファイルを作成する方法について説明します。

コンフィグと優先順位

Unreal Engine の コンフィグ は、エンジンのインストール ディレクトリとプロジェクト フォルダの両方から読み取られます。「Engine/Config」フォルダで、エンジンの基本のコンフィグ設定が設定されます。その後、次の順序で相互にオーバーライドされます。

Order of Priority for Configs

  1. Engine/Config/Base*.ini

  2. Project/Config/Base*.ini

  3. Engine/Config/Android/Android*.ini

  4. Project/Config/Android/Android*.ini

例えば、「Engine/Config/Android」にある「AndroidDeviceProfiles.ini」ファイルは、「Engine/Config」と「Project/Config」の両方のフォルダにある「BaseDeviceProfiles.ini」よりも優先されます。Project/Config/Android にある AndroidDeviceProfiles.ini は上記のすべてよりも優先されます。

Android デバイス プロファイル

標準の Android デバイス プロファイルは Android_LowAndroid_Mid、および Android_High です。Android_High プロファイルは、最もハイエンドの Android デバイスで Unreal Engine がサポートするすべての機能を表し、Android_Low は、最もローエンドの Android デバイス向けの最小限の機能セットを表します。

また、デバイス プロファイルは Unreal Engine でサポートされている GPU ファミリに基づいて、より具体的に分類されています。これは、同じ GPU を搭載したモバイル デバイスは通常同様のパフォーマンス特性を備えているためです。これらの GPU 固有のデバイス プロファイルでは通常、標準プロファイル (Android_High など)の 1 つを特定のデバイスにマップしますが、デバイスに合わせて調整が必要な場合があります。

例えば、次のデバイス プロファイルは、Unreal Engine 4.24Adreno 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 つのルールがあります。

  1. GPU ファミリが文字列「^Mali\-T8」に正規表現一致している必要があります。

  2. Android バージョンには 1 つ以上の数字が必要です。数字は、数字以外が見つかるまで記憶されます。

  3. 2 番目のルールから取得した Android バージョンは 8 未満でなければなりません。

これらの基準がすべて満たされている場合、プロファイル Android_Mali_T8xx_No_Vulkan が使用されます。

デバイス プロファイル ルールは、最初に製造元によってリストされ、最もローエンドの仕様から最もハイエンド仕様まで昇順でリストされます。標準の Android プロファイルでは、どのルールにも適合せず、特定のデバイスを識別できない場合は、フォールバックとしてリストされます。

このリストにルールを追加する場合は、同じファミリ内の他のデバイスに合わせて適切な順序でルールを挿入してください。

Vulkan を有効にする

VulkanAvailable という特別なパラメータを使用して、デバイスが Android Vulkan レンダラを使用できるかどうかを識別します。まず、ゲーム自体で Vulkan サポートが有効になっているかどうかを確認し、次にデバイスに Vulkan ドライバーが搭載されているかどうかを確認します。これらの条件の両方が満たされる場合、VulkanAvailabletrue であると見なされます。

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」で定義されています。

Unreal Engine's base Scalability location

スケーラビリティの値について

スケーラビリティの設定では幅広いパラメータを取り、それらのパラメータを 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.ShadowQuality0 に設定されている場合にこれらの値がすべてどのように動作するかを定義します。ShadowQuality@1 から 3 にも同様のエントリがあります。

これらのデフォルトのスケーラビリティ値のガイドラインは次のとおりです。

スケーラビリティ値

説明

0

低品質。Unreal Engine がサポートするハードウェアの最小範囲と互換性のある最低限の設定。

1

中程度の品質。Unreal Engine がテストされた最もローエンドと最もハイエンドのデバイスの間の幅広いハードウェアで快適に利用できる設定。

2

高品質。Unreal Engine がテストされている、ほとんどのハイエンドのハードウェアで使用できる快適な設定。

3

Epic 品質。Unreal Engine の現在のバージョンの特定の機能で使用可能な最高値。

スケーラビリティ設定をオーバーライドする

スケーラビリティ設定をオーバーライドするには、プロジェクトの独自の Config ディレクトリに「AndroidScalability.ini」を作成できます。例えば、AndroidQuickStart というプロジェクトがある場合、作成した .ini ファイルは「AndroidQuickStart/Config/Android」に配置します。

Project's base Scalability location

このファイルで作成されたスケーラビリティ設定は、「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 の値が変更されます。

Adjust Scalability Settings using Console Commands

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

Reflected Change in the Scalability Settings

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

Console Output of the current value of a Scalability Settings

ブループリントでスケーラビリティ設定を変更する

ブループリントではコンソール コマンドを使用してスケーラビリティ設定を変更することができますが、スケーラビリティ設定は 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);
    }
Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル