モバイル ハードウェアの制約がある中で、忠実度とパフォーマンスのバランスを取ることは難しいことがあります。 以下のセクションでは、パフォーマンスを調整するために Unreal Engine (UE) で提供される設定やツールについて詳しく説明します。これには、デバイス プロファイルで設定できるコンソール変数や、それらを活用するヒントなどが含まれます。
プラットフォームをプレビュー
プレビュー プラットフォームは Unreal Editor のビューポートで再現するターゲット プラットフォームです。 インエディタのプレビュー プラットフォームは、ターゲット プラットフォームでアプリケーションがどのように表示されるかを予測するものです。 より正確なテストを行うには、実際のデバイス、Android Studio の Android エミュレータ、または Xcode の iOS エミュレータでテストすることが重要です。 ただし、プレビュー プラットフォームを使用することで、エディタから直接、ビジュアルを簡単に確認することができます。
プレビュー プラットフォームを設定するには、以下の手順を実行します。
エディタのメイン ツールバーで [Settings (設定)] ボタンをクリックします。
[Preview Platform (プレビュー プラットフォーム)] のサブメニューを選択します。
エディタでエミュレートするプラットフォームを選択します。
Unreal Editor で新しいプラットフォームのシェーダーが再コンパイルされるまで、しばらく時間がかかりますが、完了すると、選択したプレビュー プラットフォームのデバイス プロファイルが反映されたビジュアルが表示されます。 また、.json ファイルをテスト デバイスから読み込み、そのデバイス固有のデバイス プロファイルと設定を使用して、より詳細に調整されたプレビューを表示することもできます。
プレビュー プラットフォームの設定の詳細については、「モバイル プレビューア」のドキュメントを参照してください。
Android のデベロッパーと HMI のデベロッパー向けに、UE では Vulkan レンダリング機能レベルをサポートしています。 UE での Vulkan の互換性の詳細については、「Android Vulkan モバイル レンダラ」ページを参照してください。
レンダリング設定
このセクションでは、アプリケーションのパフォーマンスと忠実度のバランスを調整するために使用できるレンダリング設定について詳しく説明します。 これらによって、レンダリング品質に大きなトレードオフが生じますが、レンダリングのオーバーヘッドを削減することで、フレームレートと安定性が大幅に向上する可能性があります。
スクリーン比率
スクリーン パーセンテージでは、フレームのレンダリングに使用しているビューポートのネイティブ解像度の割合を制御します。
たとえば、ビューポートが 3840x2160 のウィンドウでレンダリングされているとします。
スクリーン パーセンテージを「100」に設定すると、ビューポートは 3840x2160 の解像度をフルに使用します。
スクリーン パーセンテージを「50」に設定すると、ビューポートはその 50% しか使用しないため、1920x1080 になります。
15%、50%、100% のスクリーン パーセンテージ。
スクリーン パーセンテージの値を下げると、アプリケーションのレンダリング速度は向上しますが、フル解像度を使用する場合に比べると明らかにぼやけて見えます。
Unreal Editor の実行中は、エディタ モードでスクリーン パーセンテージを設定することができません。 ただし、Play In Editor の使用時や、パッケージ化されたビルドの実行中は、設定することができます。
エディタでスクリーン パーセンテージを変更するには、再生中にスケーラビリティのメニューを開いてから、[Screen Percentage (スクリーン パーセンテージ)] のスライダーを使用して変更します。 コンソールでリアルタイムに設定するには、r.ScreenPercentage 変数を使用します。 この値を「100」にすると、100% に相当します。
各スケーラビリティ設定には、デフォルトのスクリーン パーセンテージがあります。 必要に応じてランタイム時にオーバーライドして、レンダリング パフォーマンスや忠実度を向上させます。
最大フレームレート値
最大フレームレート値、CVar t.MaxFPS を変更して設定できます。 アプリケーションでは、設定した値までのフレームレートのみをレンダリングします。 たとえば、t.MaxFPS 30 に設定すると、アプリケーションが実行できる最大フレームレートが 1 秒あたり 30 フレームとなります。
この値をランタイム時に変更して、レンダリング速度を変更することができます。 たとえば、アプリケーションがアイドル状態で画面がオフになっている場合、t.MaxFPS を 5 に設定すると、ユーザーが画面を操作するまでフレームレートは 5 に制限され、操作すると高いフレームレートに戻ります。 アプリケーションが GPS データなどのゆっくり入力される情報の表示が主な場合は、MaxFPS を 30 以下に制限しても、ユーザー エクスペリエンスにそれほど影響を与えません。 アプリケーションで高いフレームレートが必要な場面と戦略的に低く設定できる場面について、慎重に検討することをお勧めします。
スケーラビリティ設定
UE のスケーラビリティ設定にはレンダリング機能のプリセットが用意されており、エディタ内でプロジェクトのパフォーマンスを簡単に調整することができます。 各スケーラビリティ設定をプリセット値に変更すると、グラフィック設定のサブセットが調整され、忠実度を高めたり、下げたりできます。 UE には、各リリース時点で存在するハードウェアに基づいて、これらがすでに構成された状態で備わっています。
Unreal Editor で現在のスケーラビリティ設定を確認するには、次の手順を実行します。
エディタのメイン ツールバーで [Settings] ボタンをクリックします。
[Engine Scalability Settings] サブメニューを選択します。 [Scalability Group (スケーラビリティ グループ)] で、[Low (低)]、[Medium (中)]、[High (高)]、[Epic (エピック)]、[Cinematic (シネマティック)] から希望するものを選択します。
エディタで調整したスケーラビリティ設定はローカル エディタの動作のみに影響し、最終ビルドには影響しません。
スケーラビリティ設定の詳細については、「パフォーマンス プロファイリングと構成の概要」や「拡張性のリファレンス」を参照してください。
ライティングとシェーディング
モバイル デバイスでは、特にライティングとシャドウの処理に必要なリソースが限られているため、プロジェクトの環境に最適なシェーディング モードを選択することが重要です。 最も重要な考慮事項は、プロジェクトが静的ライティングや動的ライティングにどれほど依存しているかということです。
モバイル シェーディング モード
モバイル シェーディング モードは、モバイル ハードウェアのタイル メモリを活用するように最適化された、さまざまなライティングやシェーディング効果の代替実装を提供します。
Mobile Deferred (モバイル ディファード):ジオメトリを処理した後、独自のパスでライティング情報を計算します。
これにより、レンダラが処理するマテリアル命令の数が大幅に削減され、動的ライトを使用するプロジェクトで優れたライティング機能と高いパフォーマンスが実現します。
Mobile Forward (モバイル フォワード):ジオメトリの計算と同時にライティング情報を計算します。
これにより、ライティングの柔軟性は低下しますが、事前に計算されたライトを使用するプロジェクトでは、パフォーマンスが向上し、オーバーヘッドが減少します。
モバイル シェーディングの詳細については、「Rendering and Shading Modes」を参照してください。 ほとんどのプロジェクトについては Mobile Forward を推奨しています。これは、最高のパフォーマンスが実現し、Deferred のレンダリング機能のほとんどが備わっているためです。 どのシェーディング モードが最高のパフォーマンスを実現し、技術的なアートにどのように影響するかを調査するようにしてください。
Lumen と静的ライティング
Lumen ライティング システムは、ゲーム コンソールとゲーミング PC 向けの高性能なグローバル イルミネーションを提供します。 これを有効にすると、レイ トレーシングとスクリーン空間のライティング エフェクトを組み合わせ、リアルタイムでライティングをシミュレートすることができます。
Lumen はモバイル デバイスでも利用可能ですが、モバイル ハードウェアへの負荷が大きいため、実験的機能とされています。 試験的に使用することは可能ですが、パフォーマンスを優先させる場合は Lumen を組み込んでのシッピングは推奨していません。
Lumen の詳細については、「Lumen の動的グローバル イルミネーションおよび反射」を参照してください。 モバイル環境で Lumen を使用する場合の詳細については、「モバイル版 Lumen」を参照してください。
マテリアルとシェーダー
マテリアル ID とその複雑度は、プロジェクト内のドロー コール数に影響します。 ドロー コールは、フレームごとに生じるアセットのルックアップです。 ドロー コールの数が多さがグラフィック パフォーマンスの低下に最も影響を及ぼします。
HMI では、Galaxy Tab S6 に対して 100 回のドロー コールが適切とされ、50 回未満が推奨されています。 ドロー コールの数を出力するには、Stat RHI コンソール コマンドを使用します。
ドロー コールの数は、PIE モードであるかデバイス上であるかによって異なることに注意してください。
以下のセクションでは、ドロー コールに影響を与える要因と、それらを軽減する方法について説明します。
マテリアル ID の数を減らす
マテリアル ID の数は次のような方法で削減できます。
Photoshop、Substance Painter、Substance Designer などの外部プログラムを使用して、複数の物理ベースのレンダリング マップ (ラフネス、スペキュラ、メタリックなど) を単一のテクスチャに組み合わせることができます。 多くの場合、これはテクスチャの「パッキング」と呼ばれます。
マスクを使用して、メッシュの UV のどの部分に異なる設定を適用するかを指定します。 マスキングは、アルファ テクスチャや頂点カラーを使用して行うことができます。 多くの場合、頂点カラーのほうがより効率的ですが、頂点レベルでのみ制御できます。
単一のアセットに複数のマテリアル タイプを適用する各メソッドの詳細については、「マテリアル」を参照してください。
マテリアルの複雑度を軽減する
マテリアルの複雑度によってレンダリングにおけるピクセル コストが増加することがあります。 各ピクセルに対する命令数が増えると、生成時間がより多くかかります。
マテリアルの複雑度は、次のような方法で抑えることができます。
マテリアル内の演算関数の数を減らします。
コストの高いノードの数を減らします。
[Fogging (フォグ)]、[Fog Per Pixel (ピクセルごとのフォグ)]、[Surface Forward Shading (サーフェス フォワード シェーディング)]、[Two Sides (両面)]、[Screen Space Reflections (スクリーン空間反射)] (SSR)、シャドウなど、コストの高い設定を選択的に使用します。
透過処理などのコストの高いマテリアル プロパティ、マテリアル ドメイン、ブレンド モードなどを選択的に使用します。
マテリアルの複雑度は、マテリアル グラフの [Stats (統計)] タブをクリックすると確認できます。
マテリアル プロパティの詳細については、「マテリアルのプロパティ」を参照してください。
テクスチャ サイズを削減する
高解像度のテクスチャを使用すると、デバイスとデバイスのテクスチャ メモリに保存するために大量の容量が必要になります。 また、レンダリングと処理に必要なピクセルの数も増えます。 たとえば、プラットフォームによっては、高解像度の法線マップのほうが高ポリゴン モデルよりもパフォーマンス コストが高くなる場合があります。 理想的には、エンジン内で高品質のテクスチャを圧縮してオーバーヘッドを削減しつつ、希望する忠実度を維持することです。
[Max Texture Size (テクスチャの最大サイズ)] を使用してテクスチャを圧縮するには、次の手順を実行します。
テクスチャ エディタでテクスチャを開きます。
[Details (詳細)] パネルで、[Compression (圧縮)] 見出しの下にある [Advanced (詳細設定)] を展開します。
[Maximum Texture Size] に希望する値を設定します。
この問題を軽減する方法は、特別なデバッグ テクスチャを使用してアセットのさまざまなコンポーネントに必要な解像度を決定することです。
この方法の詳細については、「モバイル向けのレンダリング最適化」を参照してください。
半精度と完全精度のシェーダーを使用する
デフォルトでは、モバイル デバイスはマテリアルの数学的演算をデスクトップ デバイスの半分の精度で処理します。 つまり、計算時に扱える小数点以下の桁数が少なくなります。 これにより、メモリと処理の負荷が軽減され、レンダリングが高速化しますが、バンディングなどの視覚的なアーティファクトが発生する可能性もあります。
この問題を回避するには、マテリアルを開き、[Material Properties (マテリアル プロパティ)] パネルで [Use Full Precision (最大精度を使用)] 設定を有効にします。
これにより、マテリアルではモバイル デバイスで利用可能な最大レベルの精度が使用されます。 アプリケーションでパフォーマンスが犠牲になりすぎないように、この設定はユーザー エクスペリエンスに大きな影響を与える重要なマテリアルにのみ使用してください。
PSO キャッシング
PSO キャッシングは、ワールド内にレンダリングされるオブジェクトのパイプラインの状態をキャッシュするため、ユーザーはランタイム時にシェーダーを再ビルドする必要がありません。 これにより、プレイ中のヒッチが減少します。
Android の PSO キャッシングについては、「PSO キャッシュ」を参照してください。
ポストプロセス
Unreal Engine では、アプリケーションのルック アンド フィールを強化できるさまざまなポストプロセス エフェクトをサポートしています。 ただし、モバイルの場合はこれらを慎重に評価し、バランスを取る必要があります。 このセクションでは、一般的にパフォーマンスのボトルネックを引き起こすポストプロセスについてのガイドラインを提供します。
アンビエント オクルージョンとベイクされたアンビエント オクルージョン
アンビエント オクルージョン (AO) は、環境光によってオブジェクトに生じる間接的なシャドウをシミュレートする手法です。 これは、よりリアルで視覚的に魅力のあるレンダリング結果を作り出しますが、コストの高い演算になる可能性があります。
代わりになるコストの低い方法として、ベイクされたアンビエント オクルージョンを使用します。 Maya、3ds Max、Blender のようなモデリング ツールには、アンビエント オクルージョン マップを生成するオプションが備わっています。 アンビエント オクルージョン マップを UE にインポートしてマテリアルに組み込むことで、ライブで処理をしなくてもオブジェクトにアンビエント オクルージョン シャドウを追加することができます。
モバイル アンビエント オクルージョンを設定する
アンビエント オクルージョンにどのメソッドを使用する場合も、次のコンソール変数を使用してモバイル固有のアンビエント オクルージョン設定を調整することができます。 これらは、必要に応じてコンフィグ ファイルやデバイス プロファイルで設定できます。
| コンソール変数 | 説明 | 値 |
|---|---|---|
| 有効にすると、アンビエント オクルージョン用のベース パス ピクセル シェーダーで追加のサンプラを使用します。 | 0:無効 (デフォルト) 1:有効 |
| 有効にすると、モバイル AO では深度の境界を使用して、AO パス中に遠くのピクセルをカリングします。 このオプションは、ピクセル シェーダー パスが使用されている場合にのみ有効です (下記の「 | 0:無効 (デフォルト) 1:有効 |
| モバイル プラットフォーム上のスクリーン空間のアンビエント オクルージョンの品質レベルです。 | 0:無効 1:Low (低) 2:Medium (中) 3:High (高) |
| モバイル アンビエント オクルージョンで使用するシェーダー タイプを選択します。 | 0:コンピュート シェーダー 1:独立したコンピュート シェーダー 2:ピクセル シェーダー (デフォルト) |
| グラウンド トゥルース アンビエント オクルージョン (GTAO) かスクリーン空間のアンビエント オクルージョン (SSAO) のいずれかを選択します。 GTAO は計算コストが高くなりますが、高品質の結果を提供します。一方、SSAO はよりシンプルで、高速に動作します。 | 0:GTAO (デフォルト) 1:SSAO |
アンチエイリアス
ポストプロセスを実行しない場合、画面上のピクセルの表示方法により、ラスタライズされた画像のエッジは滑らかさに欠けた表示になります。 これにより、「エイリアシング」と呼ばれる「ギザギザ」な外観になります。 アンチエイリアシングはピクセルを滑らかにし、レンダリングされたオブジェクトのギザギザとしたエッジをソフトにします。 この調整により、画像をよりリアルにすることができます。
UE では複数のアンチエイリアシング メソッドがサポートされており、それぞれに独自の利点、トレードオフ、コンフィギュレーション設定があります。 UE のアンチエイリアシング オプションの詳細については、「アンチエイリアス処理とアップスケール処理」を参照してください。
下記のセクションでは、モバイル レンダリング パイプラインで利用可能なアンチエイリアシングのタイプについてまとめています。
テンポラル アンチエイリアシング
テンポラル アンチエイリアシング (TAA) は、以前のレンダリングされたフレームの情報を使用してエッジを滑らかにします。 このアプローチでは、マルチサンプル アンチエイリアシング (下記を参照) より処理にかかる負荷は少なくなりますが、以前のフレームを格納するためにメモリの一部を使用します。 これは、モーション ブラーのポストプロセス エフェクトの仕組みに似ているため、特にフレームレートが低い場合は、画像に「ゴースト」と呼ばれるわずかなブラーが追加される可能性があります。 画面上の変化が大きいほど、ゴーストが発生しやすくなります。 UE で TAA を実装すると、アンチゴースト アルゴリズムを使用してこの現象をクリーン アップすることができますが、処理にかかるコストが増加します。 また、さまざまな設定を使用して、フレームの履歴も調整することができます
次のコンソール変数を使用して、TAA を設定することができます。
| テンポラル AA コンソール変数 | 説明 | 値 |
|---|---|---|
| メインのテンポラル AA パスの品質です。 | 0:入力フィルタリングを無効にします。 1:入力フィルタリングを有効にします。 2:より多くの入力フィルタリングとモーションベースのアンチゴーストを有効にします。 (デフォルト) 3:アンチゴーストが有効になった状態の品質レベル 1 の入力フィルタリングです。 |
| テンポラル AA がサンプリングされたフレームのうちの 1 つのみを使用するよう強制します。 | 0 以上の値にすると、使用するサンプリングされたフレーム インデックスを選択します。 デフォルト値は -1 です。 |
| テンポラル AA の履歴のスクリーン パーセンテージ サイズです。 | 0-100 ( |
| 有効にすると、テンポラル AA では品質を高めるため、コンピュート シェーダーが使用されます。 無効にすると、タイルベースの GPU での FBC の帯域幅を節約するため、ピクセル シェーダーが使用されます。 | 0:(無効) 1:(有効) |
| テンポラル AA でプライマリ スクリーン パーセンテージを実行するかどうかを指定します。 | 0:AA とは別に空間アップスケール パスを使用します。 1:テンポラル AA は、スクリーン パーセンテージ方式として空間およびテンポラル アップスケールを実行します。 (デフォルト) |
| テンポラル AA に使用するアップスケール アルゴリズムを選択します。 | 0:レンダラのデフォルトのテンポラル アップスケーラーを強制します。 1: |
| モバイル テンポラル AA コンフィギュレーションを使用するかどうかを選択します。 これにより、カラー バッファと深度バッファのグループ共有キャッシュが無効になります。 | 0:無効 (デフォルト) 1:有効 |
| 有効にすると、Catmull-Rom フィルタ カーネルを使用します。これは、デフォルトのガウス フィルタ カーネルよりもシャープになります。 | 0:無効 (デフォルト) 1:有効 |
| 現在のフレームが履歴に寄与するウェイトです。 値が低いとぼやけやゴーストが発生し、値が高いとジッターを隠すことができません。 | 0-1. デフォルト値は 0.04 です。 |
| フィルター カーネルのサイズです。 | 0 から 1 の間の浮動小数点数。 数値が 1 の場合は滑らかですが、ぼやけが発生します。0 の場合はシャープですが、ギザギザが目立ちます。 0 から 1 の間の浮動小数点数。 数値が 1 の場合は滑らかですが、ぼやけが発生します。0 の場合はシャープですが、ギザギザが目立ちます。 |
| テンポラル AA に使用するジッター位置の数です。 | 4 から 64 の間の 2 の累乗の整数値。 デフォルト値は 8 です。 |
| アップサンプリング時のテンポラル AA のジッター位置の数をスケールするかどうかを指定します。 これにより、一貫した密度が維持されます。 | 0:無効 1:有効 (デフォルト) |
マルチサンプル アンチエイリアス
マルチサンプル アンチエイリアス (MSAA) は、画像を複数回サンプリングしてからすべてのサンプルを平均化することで、エッジを滑らかにします。 これはよりコストがかかりますが、高品質な結果を得ることができます。 MSAA パスの数は、コンソール変数の r.MSAACount を使用して、0 から 8 の間で設定できます。 MSAA パスの数が多くなるほど、GPU メモリの使用量が増えます。
| r.MSAACount 値 | 説明 |
|---|---|
0 | MSAA が無効 (テンポラル AA は有効) |
1 | MSAA が無効 |
2 | 2 倍の MSAA を使用 |
4 | 4 倍の MSAA を使用 |
8 | 8 倍の MSAA を使用 |
マルチサンプル アンチエイリアスは、モバイル フォワード レンダリングを使用している場合にのみサポートされ、モバイル ディファードはサポートされません。
高速近似アンチエイリアシング
高速近似アンチエイリアシング (FXAA) は、空間専用のアンチエイリアス手法およびポストプロセス エフェクトです。 高いコントラストのフィルタを使用してエッジを見つけ、ピクセル エッジ間をブレンド (ディザ) することでエッジを滑らかにします。 この手法の名前が示すとおり、レンダリングが高速で、ローエンド デバイスやデスクトップに最適です。 この手法はレンダリングが高速ですが、最終イメージでは、他のアンチエイリアス手法と比較したときに忠実度が下がる可能性があります。
| r.FXAA.Quality | 説明 |
|---|---|
0 | コンソール |
1 | PC 中間ディザリング (3 サンプル使用) |
2 | PC 中間ディザリング (5 サンプル使用) |
3 | PC 中間ディザリング (8 サンプル使用) |
4 | PC 低ディザリング (12 サンプル使用、デフォルト) |
5 | PC 高ディザリング (12 サンプル使用) |