Language:
Page Info
Tags:
Skill Level:
Engine Version:

モバイル デバイスのパフォーマンス ガイドライン

モバイル プラットフォームの開発においては、特定のデバイスをターゲットにする際の注意事項、 そしてタイトルのリリース対象デバイス リストに合わせたグッドプラクティスがあります。デバイス上でパフォーマンスを最大限に活用するために特定のライティング ティアを使用して開発し、特定のライティング ティアがターゲット オーディエンスで最適に動作するようにします。また、作業しているプロジェクトをモバイルで開発する場合に 念頭に置いておくべき提案も含まれています。

パフォーマンス レベル

アンリアル エンジン (UE4) はモバイル デバイス上で様々なライティング機能をサポートしています。この機能はパフォーマンスに負荷をかけるので、処理の遅いモバイル デバイス上ではゲームのパフォーマンスを下げる原因になります。UE4 のほとんどのライティング機能は混合や一致が可能である一方、 これらの機能を以下のティアに分類する場合に役立ちます。モバイル ゲームのビルド時には、要求されるゲームのグラフの品質、 モバイル ゲームのビルド時には、要求されるゲームのグラフの品質、およびサポート対象のデバイスの種類をもとに、使う機能を決定してください。エピックでテスト済みのデバイスおよび最適性については、 iOS 開発 のデバイス互換性と Android 開発 を参照してください。

LDR (Low Dynamic Range)

Low Dynamic Range (LDR) は、UE4 がサポートするライティングの中で最もパフォーマンスが高いです。ライティング機能や Post Processing 機能を必要としないゲームにお勧めです。

このモードを使用するには、プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を無効にしなければなりません。

DisableMobileHDR.png

長所

制限事項

推奨事項

  • 処理速度の遅いモバイル デバイスでゲームを効率よく実行するために、モバイル デバイスに最速で、オーバーヘッドが一番低いモードを付けました。。

  • カスタム仕様のシェーダーを定義するマテリアル エディタへのフルアクセスはそのままで、さらにライティングをフェードする簡単なシェーディングも実行します。

  • シーンのカラーを、それぞれのカラー チャンネルを [0,1] の範囲でクランプして、ガンマ空間で書き出します。

  • 透過プリミティブは、ガンマ空間でブレンドされます。多くの場合、透過テクスチャとマテリアルを HDR や 通常の PC ゲームの場合とは異なる方法で作成することが求められます。

  • ポストプロセス機能はこのモードでは使用できません。

  • すべての マテリアル のシェーディング モデルが、最大のパフォーマンスが出せる [Unlit] に設定されるようにしてください。

  • 最小のパフォーマンスに依存する場合、配置されたライティングを使用してはいけません。

  • マテリアルの 頂点シェーダー でできるだけ多く演算を実行するように配慮してください。そのためには、カスタム仕様の UV を有効にし、ノードを接続し、Texture Coordinate ノードを使ってピクセル シェーダーで読み取ります。

基本的なライティング

このレベルのライティングは、最大のパフォーマンスで幅広いモバイル デバイスに対応しつつ、静的なライティングと Fully Rough 設定の マテリアル を使用して凝ったライティングでレベルを作成します。

このモードを使用するには、プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を無効にしなければなりません。

DisableMobileHDR.png

長所

制限事項

推奨事項

  • 静的なライティングとグローバル イルミネーションへアクセスできます。

  • トーン マッピングなどのポストプロセス機能のいくつかへアクセスできるフル HDR パイプラインです。

  • 透過がリニア空間でブレンドされるので、他の UE4 ゲームと同じように普通にコンテンツ作成ができるようになります。

  • 全ての マテリアル を [Fully Rough] にしているので、マテリアル に特に珍しいスペキュラ リフレクションは付きません。

  • Lightmap Directionality を無効にした場合も、法線マップにエフェクトは付きません。

  • すべての マテリアル はフラグを [Fully Rough] 設定で作成してください。

  • パフォーマンスをあげるために、マテリアルの [Lightmap Directionality] の無効化を考慮してください。

  • マップでは Static Light (静的ライト) のみを使用してください。

  • ブルーム のようなポストプロセス機能は完全に無効にしてください。さらに、フィルムとカラーコントロールは基本設定を遵守してください。詳細は モバイル プラットフォーム上でのポストプロセス エフェクト を参照してください。

フル HDR ライティング

このレベルのライティングでは、UE4 で使用できるほとんどの HDR ライティング機能に加えてポストプロセス機能も利用できます。クオリティの高いライティング機能のため、 パフォーマンス負荷がかなり高くなります。

このモードを使用するには、プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を有効にしなければなりません。

EnableMobileHDR.png

長所

推奨事項

  • 静的なライティングとグローバル イルミネーションへアクセスできます。

  • ポストプロセス機能の幾つかへアクセスできるフルの HDR パイプラインです。

  • 透過がリニア空間でブレンドされるので、他の UE4 ゲームと同じように普通にコンテンツ作成ができるようになります。

  • 様々なラフネスをサポートしているので、サーフェス上にリアルなスペキュラ リフレクションを作成できます。

  • ブルームを無効化すると、HDR ライティング パイプラインを大いに活用できます。

  • HDR ライティングと組み合わせたリアルなスペキュラ リフレクションは、スペキュラのエイリアシングの原因となります。このエフェクトを減らすために、[Normal Curvature to Roughness] のマテリアル プロパティを有効にして、法線マップ内の講習は情報が原因のスペキュラ エイリアシングを減らします。[Project Settings (プロジェクト設定)] > [Rendering] からアンチエイリアシングを有効にしてアーティファクトを削減することもできます。

  • Reflection Capture アクタが最も良い結果となる配置方法についても検討してみてください。詳細は、反射:Reflection Captures の配置 をご覧ください。

  • シーンでは、パフォーマンスをベストに保つためにも、Static Light (静的ライト) とライトマップのみを使用してください。

太陽からのピクセル単位のライティングを使ったフル HDR ライティング

この段階では、UE4 のモバイルで使用できる HDR ライティング機能の全てを利用します。これは Full HDR Lighting と同じで、長所も推奨事項も同じですが、 高品質に対してはピクセル単位のライティングを自動的に使用するシーンに単一の指向性ライトを追加する点が異なります。

このモードを使用するには、プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を有効にしなければなりません。

EnableMobileHDR.png

長所

推奨事項

  • Full HDR Lighting ティアにリストされているすべての機能と長所

  • 単一の指向性ライトに対してピクセル単位のディフューズとスペキュラ ライティング

  • 単一の指向性ライトに対して事前計算された高品質のディスタンス フィールド シャドウ

  • Full HDR Lighting のすべての推奨事項と機能

  • 単一の指向性ライトは Stationary (固定) に設定すべきですが、それ以外はシーンでは Static Light (静的ライト) のみを使用してください。

Shader Complexity ビュー モード

Mobile PreviewerShader Complexity ビューモードにより、 ターゲットとしている特定のデバイスに対するマテリアルのおおよその負荷が分かります。画面の色は、ターゲットとしているデバイスに対するマテリアルの負荷を表しています。 緑はパフォーマンス良好、赤は負荷が高め、白またはピンクは非常に高いという意味です。

使用手順は、まずメイン ビューポートから [View Modes] リストをクリックし [Optimization Viewmodes (ビューモードを最適化)] > [Shader Complexity (シェーダーの複雑度)] を選択するか、キーボードのショートカット Alt + 8 を押します。

クリックしてフルサイズで表示

Mobile Sun Temple に Shader Complexity を使ってマテリアル負荷を表してみると、こうなります。

1.png

2.png

3.png

柱のマテリアルの負荷がかなり大きく、透過ボリューム シートの負荷は 非常に 大きいです。負荷が大きすぎます。透過シートを削除してください。

柱には 5 テクスチャ ルックアップを全て使用しており、レイヤー処理も多いため、かなり負荷が高いです。通常であれば 30fps で十分です。

このサンプルは木が原因でピクセル負荷が 非常に 高くなっています。プレイヤーが近づいたり、マテリアルで画面を覆うと負荷は最大になります。

モバイル コンテンツ スケール係数

Mobile Content Scale Factor はプロジェクトの解像度をスケーリングして、モバイル デバイスの画面解像度を最適にしてプロジェクトを表示する手段です。 プロジェクトの config フォルダの中に 「DefaultDeviceProfiles.ini」 という名前の (.ini) ファイルを新規作成すれば、 複数のデバイス プロファイルの作成および格納 が可能になります。

このファイルの中に、iOS と Android セクションの中の値の 1 つに続けてのコマンドを入力すると、特定のデバイス向けプロジェクトの解像度を指定することができます。

r.MobileContentScaleFactor

このコマンドを使ってコンフィギュレーション ファイルに Mobile Content Scale Factor を設定したサンプルが以下の画像です。

クリックしてフルサイズで表示

この特別なコンフィギュレーション ファイルは UE4 Tappy Chicken プロジェクトのもので、各種モバイル デバイスで再生すると解像度の変化の様子を比較することができます。ファイルの上部で iOS デバイス用の解像度のスケーリングを行い、 下部では Android デバイスの解像度のスケーリングを行います。r.MobileContentScaleFactor の後に付いている番号に注目してください。コマンドの後ろにある数字で、 プロジェクトの解像度の拡大縮小を判断します。

iOS 向けモバイル コンテンツ スケール係数

iOS デバイスの場合は、後に続く番号により次の結果が決まります。

IOS スケール係数は Apple のスケール係数システムに直接関連しており、 0.0 以外の実際の解像度は画面のアスペクト比に合わせて修正されてネイティブ解像度にクランプされます。

結果

0.0

デバイスのネイティブ解像度を使います。

1.0

Retina デバイス上での解像度は retina 対応ではありません。

2.0

iPhone 5S や iPad Air などではフル ネイティブ解像度です。

3.0

Iphone 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 の解像度になります。

Mobile Material Quality 設定

ローエンド / ハイエンド モバイル デバイスに対応したアンリアル エンジン 4 プロジェクト用のコンテンツを作成する場合、機能またはアートワークが、 あるデバイス群では機能しなくなることがよくあります。こうした問題への対処方法は沢山ありますが、莫大な時間とリソースが必要な上に、エラーが発生しやすい場合がほとんどです。その対策として UE4 には Material Quality Level システムが付いています。このシステムは、どのデバイスがどの機能を使用するのか完全に制御することで、 1 つのマテリアルを様々なデバイスで使えるようにビルドすることができます。

次のセクションでは、これらのシステムの UE4 プロジェクトでの使用方法を説明します。

Material Quality Level のプレビュー

UE4 エディタで、様々な Material Quality Level 設定の結果を表示することができます。 手順は、[Main Toolbar] から [Settings] を選び [Material Quality Level] でプレビューしたいレベルを選択します。

クリックしてフルサイズで表示

[Material Quality Level] を Low、Medium、High に設定すると、それぞれ以下のようになります。

スライダーをドラッグすると、[Material Quality Level] の設定を Low、Medium、High にした場合の変化が表示されます。

Material Quality Level の設定

デバイスに Material Quality Level (マテリアル品質レベル) を設定するには以下の手順に従います。

コンソールで設定する方法

` (backtick) キーを押してコンソールを開き、次のいずれかの数字の前に r.MaterialQualityLevel を打ち込みます。

MQS_Console_Command.png

マテリアル品質レベル番号

設定

0

Low

1

High

2

Medium

順番が違うように思いますが、1 が「High」、 2 が「Medium」です。

デバイスのプロファイルから設定する方法

エディタ内で以下の手順を行うことにより、コンフィギュレーション (.ini) ファイルを使って、使用するデバイスにマテリアル品質を設定することができます。

  1. メイン ツールバーの [Windows] > [Developer Tools (開発ツール)] から [Device Profiles (デバイス プロファイル)] をクリックします。

    クリックしてフルサイズで表示

  2. [Device Profiles] の [Android_Low] プロファイルの左側にある [レンチマークの] アイコンをクリックしてプロファイル オプションを開きます。

    MQS_Edit_Profile.png

  3. [Console Variables (コンソール変数)] セクションの [Rendering (レンダリング)] オプションの [+ (プラス記号)] アイコンをクリックします。入力ウィンドウが表示されたら 「R.MaterialQualityLevel」 と入力して [Enter] キーを押すと、コマンドがリストに追加されます。

    クリックしてフルサイズで表示

  4. コマンドが追加されたら、デフォルト値を 1 から 0 に変更します。ローエンドな Android デバイス上でプロジェクトを表示する場合、最速のマテリアル設定が使われます。

    クリックしてフルサイズで表示

別の品質レベルのプレビュー

[Preview Rendering Level (レンダリング レベルをプレビュー)] を調節すると、別のハードウェアで実行したプロジェクトの見え方をアンリアル エンジン 4 エディタで確認することができます。以下の手順に従います。 メインツールバー から [Settings (設定)] > [Preview Rendering Level (レンダリング レベルのプレビュー)] で使用するプレビュー レベルを選択します。

クリックしてフルサイズで表示

Material Quality Level の切り替え方法

Quality Switch マテリアル式は、1 つのマテリアルに対して異なる複雑度を定義することができます。例えば、ハイエンドで正常に実行できる複雑な演算やテクスチャ解読が ローエンドでは実行できない場合、ローエンド モバイル デバイスにとっては重すぎるハイエンド用の表示をこのノードで簡素化に指定することができます。

image08.png

マテリアルで Quality Switch Material Expression ノードを使用するには、まず Quality Switch ノードをマテリアル グラフに追加します。 次に、品質レベルの変更を反映させたい Main Material ノード上にある入力に出力を接続します。以下の画像では、Quality Level が変更されるとマテリアルの複雑度が下がるように、(Starter Content に入っている) M_Brick_Clay_Old Material を設定しました。

クリックしてフルサイズで表示

モバイル マテリアルのオプション

Material を開いて Main Material ノードをクリックし [Details (詳細)] パネルの [Mobile] セクションを開くと、以下の 2 つのプロパティがあります。

プロパティ

設定

Fully Rough

多数の命令と単一のテクスチャ サンプリングを保存することで、マテリアルを強制的に完全に粗くします。

Use Lightmap Directionality

ライトマップ指向性とピクセルごとの法線を使用します。無効にすると、ライトマップの見た目は平坦になりますが、負荷が小さくなります。

クリックしてフルサイズで表示

この 2 つのプロパティは、パワーの低いモバイル デバイスでマテリアルを表示する場合に、これらの機能のレンダリング パスを完全に削除してマテリアルのレンダリング負荷を軽減します。 ただし、これらのオプションを有効または無効にすると、すべてのデバイスに反映されます。

モバイル マテリアルのレンダリングをオーバーライドするオプション

[Project Settings] > [Platforms] に保存されている様々なターゲット デバイスに対して [Material Quality ] を調節することで、プラットフォームで使用するレンダリング オプションのオーバーライドが可能になります。

PS_QualityLevels.png

Android:

  • Open GLES 2

  • Open GLES 3.1

  • Vulkan:

iOS:

  • Open GLES 2

  • Metal

[Quality Options] に表示されている項目を調整することで、プラットフォームで使用するレダリング オプションをオーバーライドすることができます。オーバーライドを使用するためには、まず [Enable Quality Overrides] オプションをクリックし、 所定の品質レベルにオーバーライドしたいオプションを選びます。

EnableQualityLevelOverrides.png

使用したいオプションをすべて選択したら、[Update Preview Shaders (シェーダーのプレビューを更新)] ボタンを押して、すべてのマテリアルを再コンパイルして、指定したオプションで動くようにします。

QualityLevelsUpdateShaders.png

モバイル レンダリング オプション

[Project's Settings (プロジェクトの設定)] メニューの [Rendering] セクションには、 モバイル プロジェクトでライティングと最適化の処理方法を調整するプロパティが多数含まれています。これらの設定およびプロジェクトでのエフェクトについて、次のセクションで説明します。

プロジェクト設定へのアクセス方法

メイン ツールバー から [Edit (編集)] > [Project Settings (プロジェクト設定)] を選びます。

MRO_Project_Settings.png

[Project Settings (プロジェクト設定)] を開いたら、その中の [Engine] セクションにある [Rendering] カテゴリをクリックします。以下のセクションを使って調整をします。

  • Mobile

  • Lighting

  • Mobile Shader Permutation

クリックしてフルサイズで表示

モバイル レンダリング オプション

[Mobile] カテゴリで、モバイル プロジェクトのライティングと外観に直接影響を与えるプロパティを調整することができます。以下がプロパティと説明です。

MRO_Mobile_Settings.png

プロパティ名

説明

Mobile HDR

true の場合、モバイルはフル HDR でレンダリングされます。処理が遅いデバイスではパフォーマンスが下がるため、ライティング機能を必要としないゲームではこの設定を無効にしてください。

Disable Vertex Fogging in mobile shaders

true の場合、頂点フォグはすべてのモバイル シェーダーで省略されます。ゲームでフォグを使用しない場合、この設定を選択するとシェーディング パフォーマンスがあがります。

Maximum number of CSM cascades to render

モバイル レンダラを使用する場合、動的な指向性ライト シャドウをレンダリングするカスケードの最大数です。

Mobile MSAA

モバイルで使用するマルチサンプル アンチエイリアシング (MSAA) 設定です。現在 MSAA は、ES2 または ES 3.1 の利用を要件とした上で iOS および Android デバイスでのメタルの使用をサポートしています。MSAA が使用できない場合は、デフォルトに設定されている AA メソッドが使用されます。

モバイルでシェーダーを削減するための設定

[Lighting] および [Mobile Shader Permutation Reduction] セクションには、マテリアル用に生成されたシェーダーを無効 / 有効にする様々なオプションがあります。 それらのオプションによって、アプリケーション サイズを小さくし、メモリを節約し、ロード回数を改善します。

MobileOptimizations.png

プロパティ名

spacer.png

説明

Lighting

[Project Settings] の [Lighting] セクションのオプションを使って、モバイルのパフォーマンスを調整します。

Allow Static Lighting

ライトマップやシャドウマップのように、静的なライティングの生成と使用を可能にするかどうかを設定します。動的ライティングのみを使う、あるいはアンリットなゲームはこの設定を 0 にして Static lighting (静的ライティング) によるオーバーヘッドを抑えます。

spacer.png

Mobile Shader Permutation Reduction

[Mobile Shader Permutation Reduction] に表示されているオプションを使って、モバイル パフォーマンスを調整することができます。

Support Combined Static and CSM Shadowing

プリミティブが静的シャドウと CSM シャドウの両方を Stationary light (固定ライト) から受け取れるようにします。無効にすると、モバイル テクスチャ サンプリングが解除されます。

Support Distance Field Shadowing

Stationary Directional Light (固定の指向性ライト) からのディスタンス フィールド シャドウをプリミティブが受け取るためのシェーダーを生成します。

Support Movable Directional Light

movable directional light (ムーバブルの指向性ライト) をプリミティブが受け取るとめのシェーダーを生成します。

Max Movable Point Lights

モバイル デバイス上でサポートする動的なポイントライトの数です。動的なポイント ライトを必要としないゲームの場合は 0 に設定して、シェーダーの生成数を減らします。

Use Shared Movable Point Light Shaders

有効にすると、サーフェスをヒットする動的なポイントライトに対して、同じシェーダーを好きな数だけ (Max Dynamic Point Lights での指定数まで) 使います。処理は遅くなりますが、シェーダーの生成数は減ります。

spacer.png

これらの設定を変更した場合、変更を反映させるためにエディタを再起動する必要があります。

ライティング設定で要求されているシェーダーの置換を無効にすると、ライティングまたはシャドウイングは正しくレンダリングを行わず、 正しく処理を行うために設定をもういちど有効にする必要がある旨のオンスクリーン メッセージが表示されます。

追加の提案

以下は、モバイル プラットフォームでのパフォーマンス最適化のためのコンテンツ設定に役立つ提案です。重要なものから順番にリストしました。

  • デバイスの実行前にライティングがビルドされていることを確認してください。

  • ポストプロセス機能は、ビネットやスクリーン スペース リフレクションなどのように負荷が高いため、そのほとんどはモバイル プラットフォームでは無効になっています。ブルームや被写界深度のような GPU インテンシブ機能はデフォルトで有効になっているので、PC とモバイルの見た目は同じですが、ほとんどの機能は60 ms 以上の負荷がかかり、デバイスによってはそれ以上の場合もあります。コンソール コマンド showflag.PostProcessing 0 でこれらの機能を無効にすれば、負荷について大体分かります。

  • 事前計算されたビジビリティを必ず使ってください。正しく設定されていることも確認してください。そのためには、プレーヤーが歩行またはジャンプ可能な場所の周りに PrecomputedVisibilityVolumes を配置してライティングをビルドする必要があります。ライティングのビルド時およびゲームの実行時には、必ず同じパーシスタント レベルを使用してください。デバイス上あるいはプレビューにコンソール コマンド Stat Initviews を入力すると動作を確認ができます。[Statically occluded primitives] が >0 になるようにしてください。コンソール コマンド r.ShowPrecomputedVisibilityCells 1 を使用して、エディタでセルを視覚化します。

  • マスクされたマテリアルおよび透過マテリアルは慎重に使用してください。* これらのマテリアルは画面をあまりカバーしていない場合に使用するようにします。ほとんどの場合、シェーディングはピクセルにつき 1 回しか行わないので、iOS デバイスは不透明なサーフェイスのシェーディングに最適です。ただし、ありとあらゆるレイヤーにシェード処理が必要になります。オーバードローにより、フレーム GPU 時間の合計はあっという間に 2 倍以上に膨らみます。モバイル プレビュアの **Shader Complexity** ビューモードでホット スポットを調査します。

  • シーン全体の描画コールはどの単一のビューに対しても <= 700 でなければなりません。ランドスケープを見渡す場合など、オクルージョンが弱い領域ではこれが非常に難しくなります。デバイスでは Stat OpenGLRHI、PC のプレビューアでは Stat D3D11RHI で確認できます。

  • シーン全体のトライアングル数はどのビューに対しても <= 500 でなければなりません。iPad4 および iPad Air では、最大ポリゴン数は 30fps が必要と判断されています。デバイスでは Stat OpenGLRHI、PC のプレビューアでは Stat D3D11RHI で確認できます。

  • マテリアル に使用するテクスチャ ルックアップとインストラクション数はなるべく少なくしてください。テクスチャ サンプリングは 5 つまで使用できますが、全部使用するとマテリアル負荷はかなり高くなります。差し当たり、PC インストラクション数を使って最適化し、 ES2 プレビュアのシェーダーの複雑度を使って負荷合計を視覚化します。

  • マテリアルでは独立したテクスチャ フェッチのみを使用します。ピクセル シェーダー (BaseColor、Roughness など) の UV は、スケーリングを始めとするどんな方法でも操作されてはならないという意味です。その代わりに、この新たな CustomizedUVs 機能を使って頂点シェーダーでスケーリングを行ってください。環境マッピングなどの特別な機能の中には、UV での計算が必要な特別なケースもあります。

  • メモリ消費の少ない正方テクスチャを選択し、常に 2 のべき乗 (256x256、512x512、1024x1024) のディメンションの使用を推奨します。プレビューアでコンソール コマンド ListTextures を使って、全てのテクスチャ メモリの消費元を確認します。

Tags