モバイル プラットフォーム向けに開発する場合、特定のデバイスを対象とする場合に留意すべき事項や、タイトルをリリースするデバイスのリストに応じた 一般的な推奨事項がいくつかあります。ここでは、特定のライティング ティアを使用した開発を行いデバイスのパフォーマンスを最大限に引き出す方法と、 特定のライティング ティアがターゲット ユーザーにとって最適な理由を説明します。また、モバイルを念頭に置いて開発するプロジェクトで留意すべき いくつかの提案もご紹介します。
パフォーマンス ティア
Unreal Engine 5 (UE) は、モバイル デバイスのさまざまなライティング機能をサポートしています。これらの機能を使用するとパフォーマンスが低下し、低速のモバイル デバイスではゲームのパフォーマンスが低下する可能性があります。UE の モバイル ライティング機能のほとんどを組み合わせて使用することも可能ですが、これらの機能を次のティアに分類すると便利です。モバイル ゲームを作成するときは、ゲームに必要なグラフィックスの品質と、 サポートする必要があるデバイスの種類に基づいて、使用する機能を決定する必要があります。Epic でテストされたデバイスと、そのデバイスに最も適していると思われるティアの詳細については、「iOS 向けの開発」と「Android 向けの開発」の 開発要件を確認してください。
LDR (ロー ダイナミック レンジ)
ロー ダイナミック レンジ (LDR) モードは、UE でサポートされている最低のパフォーマンス レベルです。ライティングやポストプロセス機能を必要としないゲームに最適です。
このモードを使用するには、[Project Settings (プロジェクト設定)] の [Rendering (レンダリング)] セクションでプロジェクトの [Mobile HDR (モバイル HDR)] を無効にする必要があります。
長所 | 制限事項 | 推奨事項 |
---|---|---|
|
|
|
基本的なライティング
このレベルでは、静的なライティング と完全に粗いマテリアルを活用して興味深いライティングを使用して レベル を作成する一方で、パフォーマンスを最大化して幅広いモバイル デバイスにも対応します。
このモードを使用するには、[Project Settings] の [Rendering] セクションでプロジェクトの [Mobile HDR] を有効にする必要があります。
長所 | 制限事項 | 推奨事項 |
---|---|---|
|
|
|
フル HDR (ハイ ダイナミック レンジ) ライティング
このティアでは、UE のモバイルで利用可能な HDR ライティング機能のほとんどと、いくつかのポストプロセス機能を利用します。これらの機能を利用すると 高品質なライティングが得られますが、パフォーマンスにかなりの負荷がかかります。
このモードを使用するには、[Project Settings] の [Rendering] セクションでプロジェクトの [Mobile HDR] を有効にする必要があります。
長所 | 推奨事項 |
---|---|
|
|
太陽からのピクセル単位のライティングによるフル HDR ライティング
このティアでは、UE のモバイルで利用可能な HDR ライティング機能のすべてを利用します。このティアは、基本的に「フル HDR ライティング」と同じで、利点と推奨事項も同じです。 しかし、このライティングの場合、単一の 指向性ライト をシーンに追加するとピクセル単位のライティングを自動的に使用するため高品質を実現できます。
このモードを使用するには、[Project Settings] の [Rendering] セクションでプロジェクトの [Mobile HDR] を有効にする必要があります。
長所 | 推奨事項 |
---|---|
|
|
シェーダー複雑度表示モード
「Mobile Previewer」の「Shader Complexity」表示モードで、 ターゲットにしている特定のデバイスのマテリアル コストを把握できます。画面に表示される色は、対象のデバイスに対するマテリアルの負荷を示しています。 緑はパフォーマンスが良く、明るい赤はパフォーマンスに非常に負荷がかかっており、白またはピンクはマテリアルが非常に高負荷であることを意味します。
これを使用するには、メイン ビューポート で [View Modes (表示モード)] リストをクリックし、[Optimization Viewmodes] を選択して [Shader Complexity (シェーダー複雑度)] を選択するか、キーボード ショートカット Alt + 8 を使用します。
これらは、[Shader Complexity] を使用して表示した場合のマテリアル コストがどのような感じか、Mobile Sun Temple からいくつか例をご紹介します。
柱のマテリアルはここではかなり高負荷で、透過処理のあるボリュメトリック シートも 非常に 高負荷です。このシーンでは、透過処理をしたシートはコストがかかることから、外すように依頼しています。 |
このシーンでは、柱は 5 つのテクスチャ ルックアップすべてを使用し、かなりのレイヤリングを行うため、非常に高負荷となっています。それらがない場合、30fps で十分効率的に動作します。 |
このシーンでは、ツリーが原因でピクセルが 非常に 高負荷になっています。プレイヤーが近づいたり、そのマテリアルで画面を覆ったりした場合、負荷は非常に高くなります。 |
モバイル コンテンツのスケール係数
モバイル コンテンツのスケーリング係数 は、プロジェクトの解像度をスケーリングする 1 つの方法です。プロジェクトの表示に使用されているモバイル デバイスの画面解像度に最適な形でスケーリングします。 プロジェクトの「config」フォルダに「DefaultDeviceProfiles.ini」という名前の新しいコンフィギュレーション (.ini) ファイルを作成することで、複数のデバイス プロファイルを作成して保存 できます。
このファイル内で、次のコマンドを入力し、その後に以下の iOS および Android セクションの値のいずれかを入力することで、特定のデバイスのプロジェクトの解像度をどうするかを指定できます。
r.MobileContentScaleFactor
次の図では、コンフィギュレーション ファイルで設定されているモバイル コンテンツ スケール係数の例を示しています。
この特定のコンフィギュレーション ファイルは Tappy Chicken プロジェクトからのもので、さまざまなモバイル デバイスで再生したときに 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 となります。 |
モバイル マテリアルの品質設定
ローエンド モバイル デバイスとハイエンド モバイル デバイスの両方で実行される UE プロジェクトのコンテンツを構築している場合、ある機能または作品が片方のデバイス セットで機能する一方で、もう片方のデバイス セットでは機能しないという問題に 遭遇することがよくあります。このような問題に対しては多くの対処法がありますが、それらの多くは時間とリソースを大量に消費することからエラーが発生しやすくなります。UE では、 Material Quality Level システムでこの種の問題に対処します。このシステムを利用すると、幅広いデバイスで使用可能な単一のマテリアルをビルドできます。したがって、どのデバイスがどの機能を使用するかを 完全に制御できます。
以下のセクションでは、これらのシステムと、それらを独自の UE プロジェクトで使用する方法について説明します。
マテリアルの品質レベルをプレビューする
メイン ツールバー に移動し、[Settings (設定)] > [Material Quality Level (マテリアルの品質レベル)] でプレビューするレベルを選択すると、エディタ内でさまざまなマテリアルの品質レベルの設定がどのように表示されるのかを 確認できます。
次の画像は、[Material Quality Level] が低、中、高に設定されている場合のマテリアルの外観を示しています。
マテリアルの品質レベルの設定
デバイスのマテリアル品質レベルは、次の方法で設定できます。
コンソールから行う
` (バッククォート) キーを押し、r.MaterialQualityLevel に続いて次のいずれかの値を入力すると、コンソールを表示できます。
マテリアルの品質レベルの番号 | 設定 |
---|---|
0 | 低 |
1 | 高 |
2 | 中 |
3 | 最高 |
高の場合は「1」、中の場合は「2」である点に注意してください。
デバイス プロファイルから行う
コンフィギュレーション (.ini) ファイルを使用すると、エディタ内から次の方法を使用して、ターゲットにする予定のデバイスのマテリアルの品質を設定できます。
-
メイン ツールバー から [Windows] > [Developer Tools (デベロッパーツール)] に移動し、[Device Profiles (デバイスプロファイル)] をクリックします。
-
[Device Profiles] で Android_Low プロファイルを探し、最初の [レンチ] アイコンをクリックしてプロファイル オプションを開きます。
-
[Rendering] オプションの下の [Variables (変数)] セクションで、[プラス] アイコンをクリックし、ポップアップして表示された入力ウィンドウで「R.MaterialQualityLevel」と入力し、Enter キーを押してそのコマンドをリストに追加します。
)
-
新しいエントリが追加されたら、値をデフォルト値から「1」から「0」に変更します。すると、このプロジェクトがローエンドの Android デバイスで表示されたときに、可能な限り高速なマテリアル設定を使用するようになります。
さまざまな品質レベルでプレビューする
[Preview Rendering Level (プレビュー レンダリング レベル)] を調整すると、異なるハードウェアで実行したときにプロジェクトがどのように見えるかを Unreal Editor で確認できます。これを調整するには、 メイン ツールバー に移動し、[Settings] > [Preview Rendering Level] を選択して、使用するプレビュー レベルを選択します。
マテリアルの品質レベルのスイッチ
Quality Switch マテリアル式 を使用すると、1 つのマテリアル内でさまざまなレベルの複雑度を定義できます。たとえば、複雑な数学演算や、 ハイエンドのモバイル デバイスでは機能するもののローエンドのモバイル デバイスでは機能しない大量のテクスチャ読み取りがある場合です。このノードを使用すると、ハイエンドのグラフィックスを表示できないローエンドのモバイル デバイス向けに、簡略的に表示を行うバージョンを指定できます。
マテリアルで Quality Switch を使用するには、まず Quality Switch マテリアル式ノードを マテリアル グラフ に追加し、その出力を Main Material ノードの入力のいずれかに接続する必要があります。次の画像では、M_Brick_Clay_Old マテリアル (スターター コンテンツにあります) が設定されています。そのため、品質レベルを切り替えると、マテリアルの複雑さが軽減します。
モバイル マテリアルのオプション
任意の マテリアル を開いて Main Material ノード をクリックすると、[Details (詳細)] パネルの [Mobile (モバイル)] セクションの下に次のプロパティが表示されます。
プロパティ | 設定 |
---|---|
Float Precision Mode | ピクセル シェーダーで完全 (highp) 精度を使用する方法を決定します。Highp はデフォルト (mediump) よりも低速ですが、精度に関連したレンダリングのエラーに対処するにはこれが有効です。.ush/.usf の半分の精度を維持したい場合にのみ、[Full-Precision for MaterialExpressions Only (MaterialExpressions のみ完全精度)] を使用します。この設定は、高精度をサポートしない旧型のモバイル デバイスには効果がありません。 |
Use Lightmap Directionality | ライトマップの指向性とピクセルごとの法線を使用します。無効にすると、ライトマップは視覚的により平坦に見えるようになりますが、負荷が軽いです。 |
Mobile High Quality BRDF | モバイルで高品質の BRDF 関数を使用します。これにより、ビジュアル エフェクトは向上しますが、GPU コストがかかります。 |
Use Alpha to Coverage | モバイルでのマスクされたマテリアルの範囲にアルファを使用します。この際、MSAA も有効であることも確認してください。 |
これらの機能のレンダリング パスを完全に排除することで、これらのプロパティで性能の低いモバイル デバイスで表示する場合のマテリアルのレンダリング コストを削減できます。
モバイル マテリアル レンダリングのオーバーライド
[Project Settings] > [Platforms (プラットフォーム)] にあるさまざまなターゲット デバイスの [Material Quality (マテリアル品質)] 設定を調整することで、プラットフォームが使用する利用可能なレンダリング オプションをオーバーライドできます。
リストされている [Quality Options (品質)] を調整することで、プラットフォームが使用する利用可能なレンダリング オプションをオーバーライドできます。オーバーライドするには、まず [Enable Quality Overrides (品質のオーバーライドを有効にする)] オプションをクリックしてから、 特定の品質レベルでオーバーライドするオプションを選択する必要があります。
必要なオプションをすべて選択したら、[Update Preview Shaders] ボタンを押します。すると、すべてのマテリアルで再コンパイルが行われ、指定したオプションで動作するようになります。
)
モバイル レンダリング オプション
[Project's Settings] メニュー内の [Rendering] セクションには、モバイル プロジェクト内でのライティングと最適化の処理方法を制御する 多くのプロパティがあります。次のセクションでは、これらの設定と、それらがプロジェクトに与える影響について説明します。
プロジェクト設定にアクセスする
[Project Settings] メニューが開いたら、[Engine] セクションを見つけて、[Rendering] カテゴリをクリックします。以下のセクションを使用して、以下の設定を調整します。
- Mobile
- Misc Lightning
- VR
- Mobile Shader Permutation Reduction
モバイルおよび VR レンダリングのオプション
[Mobile (モバイル)] と [VR] カテゴリでは、モバイル プロジェクトのライティングと外観に直接影響するプロパティを設定できます。独自のプロジェクトのこれらの設定を調べるには、以下をお読みください。
プロパティ名 | 説明 | ||||||
---|---|---|---|---|---|---|---|
Mobile | プロジェクト設定の [Mobile] セクションにあるオプションのリスト。モバイル パフォーマンスの調整に使用します。
|
||||||
VR | プロジェクト設定の [VR] セクションにあるオプションのリスト。モバイル パフォーマンスの調整に使用します。
|
モバイル用の [Misc Lighting] 設定と [Mobile Shader Permutation Reduction] 設定
[Misc Lighting] と [Mobile Shader Permutation Reduction] セクションには、さまざまなオプションが多数用意されており、これらの有効無効を切り替えることでマテリアル用に生成されたシェーダーに対して変化を与えられます。 これにより、アプリのサイズ縮小、メモリの節約、ロード時間の短縮が可能です。
プロパティ名 | 説明 | ||||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|---|---|
Misc Lighting | プロジェクト設定の [Misc Lighting] セクションにあるオプションのリスト。モバイル パフォーマンスの調整に使用します。
|
||||||||||||
Mobile Shader Permutation Reduction | プロジェクト設定の [Mobile Shader Permutation Reduction] セクションにあるオプションのリスト。モバイル パフォーマンスの調整に使用します。
|
これらの設定の変更は、エディタの再起動後に有効になります。
ライティングの設定に必要なシェーダー順列を無効にすると、ライティングまたはシャドウイングが正しくレンダリングされなくなります。 それに伴い、適切に機能させるのに再度有効にする必要がある設定について説明したメッセージが画面に表示されます。
その他の提案事項
モバイル プラットフォームで最適なパフォーマンスを得られるようにコンテンツを設定する際は、次の提案事項が役立ちます。最も重大なものから上から順番にご紹介します。
- デバイスで実行する前に、ライティングがビルドされていることを確認してください。
- ほとんどのポストプロセス機能は、ビネットやスクリーン スペース反射のようにコストが高すぎることから、モバイル プラットフォームでは無効になっています。ブルーム や 被写界深度 (DOF) など、GPU を集中的に使用する一部の機能はデフォルトで有効になっています。そのため、PC とモバイルは同じように動作するように見えますが、一部のデバイスではデフォルト設定で多くの機能に 60 ミリ秒以上かかってしまう場合があります。コンソール コマンド showflag.PostProcessing 0 でこれらの機能をオフにすると、コストの概要を把握できます。
- [Precomputed Visibility (事前計算されたビジビリティ)] を使用しており、それが適切に設定されていることを確認してください。これを行うには、Precomputed Visibility Volumes (事前計算されたビジビリティ ボリューム) をプレイヤーが歩いたりジャンプしたりできるエリアの周りに配置してから、ライティングをビルドします。これらは、ライティングのビルド時およびゲームの実行時に使用される パーシスタントレベル に配置する必要があるため、サブレベル を単独でビルドしないでください。デバイスまたは レベル プレビューア でコンソール コマンド「Stat Initviews」を入力し、Statically Occluded Primitives が「0」より大きいことを確認することで、[Precomputed Visibility] が機能しているかどうかがわかります。エディタでセルを視覚化するには、コンソール コマンド r.ShowPrecomputedVisibilityCells 1 を使用してください。
- マスクされており、透過処理を行ったマテリアルの使用は控えめにしてください。使用する際、画面上で覆う範囲は小さくなるようにしてください。iOS デバイスは各ピクセルを 1 回だけシェーディングすることから、透過処理を行っていないサーフェスのシェーディングに最適です。しかし、マスクされ透過処理を行っているものの場合、すべてのレイヤーをシェーディングする必要があります。フレームの合計 GPU 時間は、オーバードローにより 2 倍以上になることがあります。ホット スポットを調査するには、[Shader Complexity (シェーダー複雑度)] 表示モードを使用します。
- シーン全体のドロー コールは、単一の表示で 700 以下にしてください。これは、大きなランドスケープを見渡すようなオクルージョンが不十分な領域の場合に最も大きな問題となります。この状況は、デバイスの Stat OpenGLRHI または PC の Previewer の Stat D3D11RHI で確認できます。
- シーン全体のトライアングルの数は、どのビューでも 500k 以下にしてください。iPad4 と iPad Air の両方で 30fps を達成できる最大ポリゴン数がこの数字以下であると言われています。この状況は、デバイスの Stat OpenGLRHI または PC の Previewer の Stat D3D11RHI で確認できます。
- マテリアルでは、テクスチャ ルックアップと命令の数をできるだけ少なくしてください。5 つのテクスチャ サンプリングを使用できますが、それらすべてを使用するとマテリアルがかなり高負荷になります。ここでは、PC 命令数を使用して最適化し、 Previewer Shader Complexity で総コストを視覚化してください。
- マテリアルでは独立したテクスチャ フェッチのみを使用してください。つまり、ピクセル シェーダー (BaseColor、ラフネス など) の UV は、スケーリング などの方法で操作しないでください。代わりに CustomizedUVs 機能を使用して、頂点シェーダー で スケーリング を行います。環境マッピングなどの一部の特殊機能では、UV で計算が必要ですが、特殊なケースでは問題ありません。
- メモリの無駄が少ないため、正方テクスチャを使用することをお勧めします。これらには常に 2 のべき乗を使用します (256x256、512x512、1024x1024)。Previewer でコンソール コマンド ListTextures を使用して、すべてのテクスチャ メモリがどこに行くのかを確認します。