Choose your operating system:
Windows
macOS
Linux
モバイル プラットフォームの開発においては、特定のデバイスをターゲットにする際の注意事項、 そしてタイトルのリリース対象デバイス リストに合わせたグッドプラクティスがあります。デバイス上でパフォーマンスを最大限に活用するために特定のライティング ティアを使用して開発し、 特定のライティング ティアがターゲット オーディエンスで最適に動作するようにします。また、作業しているプロジェクトをモバイルで開発する場合に 念頭に置いておくべき提案も含まれています。
パフォーマンス レベル
Unreal Engine (UE4) はモバイル デバイス上で様々なライティング機能をサポートしています。この機能はパフォーマンスに負荷をかけるので、処理の遅いモバイル デバイス上ではゲームのパフォーマンスを下げる原因になります。UE4 のほとんどのライティング機能は混合や一致が可能である一方、 これらの機能を以下のティアに分類する場合に役立ちます。モバイル ゲームのビルド時には、要求されるゲームのグラフの品質、 モバイル ゲームのビルド時には、要求されるゲームのグラフの品質、およびサポート対象のデバイスの種類をもとに、使う機能を決定してください。Epic でテスト済みのデバイスおよび最適性については、 iOS 開発 のデバイス互換性と Android 開発 を参照してください。
LDR (Low Dynamic Range)
Low Dynamic Range (LDR) は、UE4 がサポートするライティングの中で最もパフォーマンスが高いです。ライティング機能や Post Processing 機能を必要としないゲームにお勧めです。
このモードを使用するには、 プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を無効にしなければなりません。
長所 |
制限事項 |
推奨事項 |
---|---|---|
|
|
|
基本的なライティング
このレベルのライティングは、最大のパフォーマンスで幅広いモバイル デバイスに対応しつつ、静的なライティングと Fully Rough 設定の マテリアル を使用して凝ったライティングでレベルを作成します。
このモードを使用するには、 プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を有効にしなければなりません。
長所 |
制限事項 |
推奨事項 |
---|---|---|
|
|
|
フル HDR ライティング
このレベルのライティングでは、UE4 で使用できるほとんどの HDR ライティング機能に加えてポストプロセス機能も利用できます。クオリティの高いライティング機能のため、 パフォーマンス負荷がかなり高くなります。
このモードを使用するには、 プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を有効にしなければなりません。
長所 |
推奨事項 |
---|---|
|
|
太陽からのピクセル単位のライティングを使ったフル HDR ライティング
この段階では、UE4 のモバイルで使用できる HDR ライティング機能の全てを利用します。これは Full HDR Lighting と同じで、長所も推奨事項も同じですが、 高品質に対してはピクセル単位のライティングを自動的に使用するシーンに単一の指向性ライトを追加する点が異なります。
このモードを使用するには、 プロジェクト設定エディタ のレンダリング セクションで、プロジェクトの [Mobile HDR] を有効にしなければなりません。
長所 |
推奨事項 |
---|---|
|
|
Shader Complexity ビュー モード
Mobile Previewer の Shader Complexity ビューモードにより、 ターゲットとしている特定のデバイスに対するマテリアルのおおよその負荷が分かります。画面の色は、ターゲットとしているデバイスに対するマテリアルの負荷を表しています。 緑はパフォーマンス良好、赤は負荷が高め、白またはピンクは非常に高いという意味です。
使用手順は、まずメイン ビューポートから [View Modes] リストをクリックし [Optimization Viewmodes (ビューモードを最適化)] > [Shader Complexity (シェーダーの複雑度)] を選択するか、キーボードのショートカット Alt + 8 を押します。
Mobile Sun Temple に Shader Complexity を使ってマテリアル負荷を表してみると、こうなります。
|
|
|
---|---|---|
柱のマテリアルの負荷がかなり大きく、透過ボリューム シートの負荷は 非常に 大きいです。負荷が大きすぎます。透過シートを削除してください。 |
柱には 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 設定
ローエンド / ハイエンド モバイル デバイスに対応した Unreal Engine 4 プロジェクト用のコンテンツを作成する場合、機能またはアートワークが、 あるデバイス群では機能しなくなることがよくあります。こうした問題への対処方法は沢山ありますが、莫大な時間とリソースが必要な上に、エラーが発生しやすい場合がほとんどです。その対策として UE4 には Material Quality Level システムが付いています。このシステムは、どのデバイスがどの機能を使用するのか完全に制御することで、 1 つのマテリアルを様々なデバイスで使えるようにビルドすることができます。
次のセクションでは、これらのシステムの UE4 プロジェクトでの使用方法を説明します。
Material Quality Level のプレビュー
UE4 Editor で、様々な Material Quality Level 設定の結果を表示することができます。 手順は、 [Main Toolbar (メイン ツールバー)] から [Settings (設定)] を選び [Material Quality Level] でプレビューしたいレベルを選択します。
[Material Quality Level (マテリアル品質レベル)] を Low、Medium、High に設定すると、それぞれ以下のようになります。
Material Quality Level の設定
デバイスに Material Quality Level (マテリアル品質レベル) を設定するには以下の手順に従います。
コンソールで設定する方法
` (backtick) キーを押してコンソールを開き、次のいずれかの数字の前に「 r.MaterialQualityLevel 」を打ち込みます。
マテリアル品質レベル番号 |
設定 |
---|---|
0 |
Low |
1 |
High |
2 |
Medium |
1 が「High」、2 が「Medium」です。
デバイスのプロファイルから設定する方法
エディタ内で以下の手順を行うことにより、コンフィギュレーション (.ini) ファイルを使って、使用するデバイスにマテリアル品質を設定することができます。
-
メイン ツールバーの [Windows] > [Developer Tools (開発ツール)] から [Device Profiles (デバイス プロファイル)] をクリックします。
-
[Device Profiles] の [Android_Low] プロファイルの左側にある [レンチの形] のアイコンをクリックしてプロファイル オプションを開きます。
-
[Console Variables (コンソール変数)] セクションの [Rendering (レンダリング)] オプションの [+ (プラス記号)] アイコンをクリックします。入力ウィンドウが表示されたら 「R.MaterialQualityLevel」 と入力して [Enter] キーを押すと、コマンドがリストに追加されます。
-
コマンドが追加されたら、デフォルト値を 1 から 0 に変更します。ローエンド モデルの Android デバイス上でプロジェクトを表示する場合、最速のマテリアル設定が使われます。
別の品質レベルのプレビュー
[Preview Rendering Level (レンダリング レベルをプレビュー)] を調節すると、別のハードウェアで実行したプロジェクトの見え方を Unreal Engine 4 エディタで確認することができます。以下の手順に従います。 メインツールバー から [Settings (設定)] > [Preview Rendering Level (レンダリング レベルのプレビュー)] で使用するプレビュー レベルを選択します。
Material Quality Level の切り替え方法
Quality Switch マテリアル式は、1 つのマテリアルに対して異なる複雑度を定義することができます。例えば、ハイエンドで正常に実行できる複雑な演算やテクスチャ解読が ローエンドでは実行できない場合、ローエンド モバイル デバイスにとっては重すぎるハイエンド用の表示をこのノードで簡素化に指定することができます。
マテリアルで 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 ] を調節することで、プラットフォームで使用するレンダリング オプションのオーバーライドが可能になります。
Android:
-
Open GLES 3.1
-
Vulkan
iOS:
-
Metal
[Quality Options (品質オプション)] に表示されている項目を調整することで、プラットフォームで使用するレダリング オプションをオーバーライドすることができます。オーバーライドを使用するためには、まず [Enable Quality Overrides (品質のオーバーライドを有効にする)] オプションをクリックし、 所定の品質レベルにオーバーライドしたいオプションを選びます。
使用したいオプションをすべて選択したら、 [Update Preview Shaders (シェーダーのプレビューを更新)] ボタンを押して、すべてのマテリアルを再コンパイルして、指定したオプションで動くようにします。
モバイル レンダリング オプション
[Project's Settings (プロジェクトの設定)] メニューの [Rendering] セクションには、 モバイル プロジェクトでライティングと最適化の処理方法を調整するプロパティが多数含まれています。これらの設定およびプロジェクトでのエフェクトについて、次のセクションで説明します。
プロジェクト設定へのアクセス方法
メイン ツールバー から [Edit (編集)] > [Project Settings (プロジェクト設定)] を選びます。
[Project Settings (プロジェクト設定)] を開いたら、その中の [Engine] セクションにある [Rendering] カテゴリをクリックします。以下のセクションを使って調整をします。
-
Mobile
-
Lighting
-
Mobile Shader Permutation
モバイル レンダリング オプション
[Mobile] カテゴリで、モバイル プロジェクトのライティングと外観に直接影響を与えるプロパティを調整することができます。以下がプロパティと説明です。
プロパティ名 |
説明 |
---|---|
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] セクションには、マテリアル用に生成されたシェーダーを無効 / 有効にする様々なオプションがあります。 それらのオプションによって、アプリケーション サイズを小さくし、メモリを節約し、ロード回数を改善します。
プロパティ名 |
説明 |
||||||||||
---|---|---|---|---|---|---|---|---|---|---|---|
Lighting |
[Project Settings] の [Lighting] セクションのオプションを使って、モバイルのパフォーマンスを調整します。
|
||||||||||
Mobile Shader Permutation Reduction |
[Mobile Shader Permutation Reduction] に表示されているオプションを使って、モバイル パフォーマンスを調整することができます。
|
これらの設定を変更した場合、変更を反映させるためにエディタを再起動する必要があります。
ライティング設定で要求されているシェーダーの置換を無効にすると、ライティングまたはシャドウイングは正しくレンダリングを行わず、 正しく処理を行うために設定をもういちど有効にする必要がある旨のオンスクリーン メッセージが表示されます。
その他の提案事項
以下は、モバイル プラットフォームでのパフォーマンス最適化のためのコンテンツ設定に役立つ提案です。重要なものから順番にリストしました。
-
デバイスの実行前にライティングがビルドされていることを確認してください。
-
ポストプロセス機能は、ビネットやスクリーン スペース リフレクションなどのように負荷が高いため、そのほとんどはモバイル プラットフォームでは無効になっています。ブルームや被写界深度のような 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 を使って、全てのテクスチャ メモリの消費元を確認します。