Hero background image

テクニカルアーティスト向けのモバイル最適化のヒント - パート I

このウェブページは、お客様の便宜のために機械翻訳されたものです。翻訳されたコンテンツの正確性や信頼性は保証いたしかねます。翻訳されたコンテンツの正確性について疑問をお持ちの場合は、ウェブページの公式な英語版をご覧ください。

このページで学ぶ内容: Unity で作業するモバイルゲーム開発者向けのアートアセット最適化のヒント。これは、モバイルゲームのアートの最適化に関する2本の記事のうちの最初の記事です

モバイル最適化のヒントは他にも多数あります この包括的な e ブック と Unity Learn コースの 3D Art Optimization for Mobile Applications をご覧ください。

ロボットキャラクターの 3D レンダリング

シルエットに注目

モバイルプラットフォームでは、ポリゴンと頂点のいずれも計算コストが高い。アプリケーションのビジュアル品質に大きく寄与する領域にポリゴンを配置して、処理バジェットを無駄にしないようにします。

ほとんどのモバイルデバイスの画面サイズは小さく、アプリケーション内の 3D オブジェクトの位置も小さいため、3D オブジェクトの小さな三角形の詳細が多数表示されないことがあります。つまり、見えない小さなディテールではなく、大きな形状やオブジェクトのシルエットに寄与するパーツに注目するべきです。テクスチャと法線マップを使用して細部を仕上げます。

LOD 例

LODLODLODる

オブジェクトが遠くに移動すると、LOD(Level of Detail)は、よりシンプルなマテリアルとシェーダーでシンプルなメッシュを使用するように調整または切り替えて、GPUパフォーマンスを洗練させることができます。

LOD 準備に関するその他のヒント

  • 平坦な領域ではより多くのポリゴンを削除し、LODの低いオブジェクトでは三角形の密集した領域を使用しない。
  • LOD はシェーダーの複雑さにも適用できます。シェーダーとマテリアルは、遠くにある 3D オブジェクト用に最適化できます。例えば、オブジェクトがカメラから離れるにつれて使用するテクスチャの数を減らすことができます。
  • 多くの場合、各LODレベル間のトライアングルの数を50%削減する価値があります。
  • カメラからの距離を変えて LOD がどのように見えるかを確認します。
  • デフォームやアニメーション化されたキャラクターやオブジェクトには、クリーンなトポロジーが不可欠です。
  • トポロジーが完璧であることにこだわらないでください。テクスチャとマテリアルを適用すると、プレイヤーやエンドユーザーは 3DD モデルのワイヤーフレームフレームを見ることができません。

LOD を使用しない場合

LOD はすべての状況に適しているわけではありません。例えば、カメラ ビューとオブジェクトの両方が静的なアプリケーションや、オブジェクトがすでに低いポリゴン数を使用しているアプリケーションでの使用は避けてください。LOD では、メッシュ データをリアルタイムで使用できるように保存する必要があるため、メモリのオーバーヘッドとファイルサイズが大きくなります。

Unity のオクルージョン

メッシュを組み合わせてオブジェクトを非表示にする

複数のメッシュを 1 つにまとめることで、レンダリングに必要な描画コールの数を減らすことができます。この手法を適用するには、Hierarchy に空のゲームオブジェクトを作成し、それを結合するメッシュの親にして、メソッド Mesh.CombineMeshes() を実装するスクリプトを親のゲームオブジェクトにアタッチします。

オクルージョンカリングの使用

他のオブジェクトの後ろに隠れているオブジェクトは、依然としてレンダリングされ、リソースが消費される可能性があります。オクルージョンカリングを使用して破棄します。

カメラ ビュー外の錐台カリングは自動ですが、オクルージョンカリングはベイク処理です。オブジェクトを静的オクルーダーまたは静的オクルードとしてマークし、「ウィンドウ」><レンダリング><オクルージョンカリング>ダイアログでベイクするだけです。すべてのシーンで必要というわけではありませんが、多くの場合、カリングによってパフォーマンスを向上させることができます。詳細については、 オクルージョンカリングの操作 チュートリアルを確認してください。

Unity へのモデルのインポート

モデルのインポート

ここでは、モデルをインポートする際に留意すべきいくつかの優れたヒントを紹介します。

  • アニメーションタイプ:アニメーションデータを含まない FBX メッシュをインポートする場合は、「インポート Settings」の「Rig」タブで「アニメーション Type」を「None」に設定します。メッシュをヒエラルキーに配置する場合、この設定により、Unity は未使用のアニメーターコンポーネントを生成しません。
  • リグとブレンドシェイプを無効にする:メッシュにスケルタルアニメーションやブレンドシェイプアニメーションが不要な場合は、可能な限りこれらのオプションを無効にしてください。
  • 法線と接線を無効にする:メッシュ マテリアルに法線や接線を必要としないことが確実な場合は、これらのオプションをオフにしてさらに節約します。
  • インポート設定:モデルをランタイムで変更しない場合は、インポート設定の「Model(モデル)」タブで「Read/Write Enabled(読み取り/書き込み有効)」オプションを無効にして、メモリにコピーが作成されないようにしてください。
  • 静的/動的バッチ処理:静的バッチ処理は、描画コールの数を減らす一般的な最適化手法です。レンダリング中に移動、回転、スケールしない多数の頂点で構成されるオブジェクトに最適です。ターゲットモデルのメッシュレンダラーを含む Inspector で静的をチェックします。
テクスチャ圧縮の比較

テクスチャチャサイズと色空間

テクスチャはさまざまなサイズに設定できます。詳細度の低いテクスチャのサイズを減らすと、帯域幅幅を削減ヘルプます。例えば、拡散テクスチャを 1024 x 1024 に設定し、関連するラフネス/メタリックマップを 512 x 512 に設定できます。テクスチャのサイズを選択的に小さくし、その後にビジュアルが劣化していないかを常に確認してください。

ほとんどのテクスチャリングソフトウェアは、sRGB色空間を使用してテクスチャを操作およびエクスポートします。

sRGB 色空間では拡散テクスチャを使用することをお勧めします。色として処理されないテクスチャは、sRGB色空間内にあってはなりません。これらのテクスチャには、メタリックマップ、ラフマップ、法線マップなどがあります。マップは色ではなくデータとして使用されるためです。これらのマップで sRGB を使用すると、マテリアルのビジュアルがおかしく結果ます。

注:InspectorウィンドウのsRGB(カラー テクスチャ)設定のラフネス、スペキュラー、法線マップなどの項目にチェックマークがないことを確認します。

屋根板のテクスチャのディテール

テクスチャにディテールをベイクする

アンビエントオクルージョンや小さなスペキュラーハイライトなどの要素をベイクしてから、拡散テクスチャに追加できます。このアプローチにより、スペキュラーハイライトとアンビエントオクルージョンを得るために計算コストの高いシェーダーやUnityの機能に頼りすぎる必要がなくなります。

色付きのグレーステクスチャのデモ

色付きのグレースケールテクスチャ

可能な限り、シェーダーで色を付けられるグレースケールのテクスチャを使用してください。これにより、テクスチャチャメモリを節約できますが、着色を実行するためのカスタムシェーダーを作成するコストがかかります。この方法では、すべてのオブジェクトが適切に表示されるとは限らないため、このテクニックは選択してください。これは、均一な色のオブジェクトに適用する方が簡単です。

テクスチャフィルタリングのバイリニアとトリリニアの比較

テクスチャフィルタリング

テクスチャフィルタリングは、多くの場合、シーン内のテクスチャの品質を向上させますが、テクスチャの品質を向上させるにはより多くの処理が必要になることが多いため、パフォーマンスを低下させることもあります。テクスチャフィルタリングは、GPU のエネルギー消費の半分をアカウントこともあります。よりシンプルで適切なテクスチャフィルタを選択することで、アプリケーションのエネルギー需要を減らすのに役立ちます。

  • Nearest/Pointフィルタリング:これは最もシンプルで計算負荷が最も低いテクスチャ フィルタリング形式ですが、近くで見るとテクスチャがギザギザに見えることがあります。
  • バイリニアフィルタリング:バイリニアフィルタリングは、テクスチャ内のカラーピクセルの隣接するテクセルをサンプリングして平均化します。近接フィルタリングとは異なり、バイリニアフィルタリングではピクセルのグラデーションが滑らかであるため、ピクセルのブロッキングが少なくなります。バイリニアフィルタリングの副効果として、近くで見るとテクスチャがぼやけることがあります。
Unity エディター上のスプライトアトラス

テクスチャチャサイズと色空間

メモリのほとんどはテクスチャに使用される可能性が高いため、ここでのインポート設定は重要です。一般的に、アセットをインポートする際には、以下のガイドラインに従うようにしてください。

  • 最大サイズを小さくする:視覚的に許容できる結果が得られる最小限の設定を使用します。これは非破壊的で、テクスチャチャメモリをすぐに減らすことができます。
  • 2 の累乗(POT)を使用する:Unityでは、モバイル テクスチャ圧縮形式(PVRCTまたはなど)のPOTテクスチャ寸法が必要です。
  • テクスチャのアトラス:複数のテクスチャを 1 つのテクスチャに配置することで、描画コールを減らし、レンダリングをスピードアップできます。Unity スプライトアトラスまたはサードパーティ製の TexturePacker を使用してテクスチャをアトラスします。
  • Read/Write Enabled オプションをトグルします。このオプションを有効にすると、CPU と GPU の両方のアドレス可能メモリにコピーが作成され、テクスチャのメモリフットプリントが 2 倍になります。ほとんどの場合、これを無効にしておいてください。ランタイム時にテクスチャを生成する場合は、Texture2D を介して実行します。適用し、makeNoLongerReadable <set を true に渡します。
  • 不要なミップマップを無効にする:2D スプライトや UI グラフィックスなど、画面上で一定のサイズを保つテクスチャにミップマップは必要ありません。カメラからの距離が異なる 3D モデルのミップマップは有効にしておきます。
  • バイリニアフィルタリングの使用:これにより、パフォーマンスとビジュアル品質のバランスを取ることがヘルプます。
  • 3 リニアフィルタリングを選択的に使用する:バイリニアフィルタリングよりも多くのメモリ帯域幅を必要とします。
  • バイリニアおよび 2 x 異方性フィルタリングの使用:見た目とパフォーマンスの両方を向上させるために、3 つの線形と 1 つの異方性の性の代わりにこれらを選択します。
  • 異方性レベルを低く保つ:重要なゲームアセットには、2 より高いレベルのみを使用してください。
圧縮テクスチャの比較

テクスチャを圧縮

iOS と Android の両方で Adaptive Scalable テクスチャ 圧縮(ATSC)を使用します。開発中のゲームの大部分は、ATSC 圧縮をサポートする最小スペックのデバイスをターゲットにする傾向があります。唯一の例外は、次のとおりです。

  • A7 以下のデバイスをターゲットにした iOS ゲーム(iPhone 5、5S など):PVRTC の使用
  • 2016年以前のデバイスをターゲットにしたAndroidゲーム:UseEricsson テクスチャ圧縮(ETC2)
テクスチャチャチャンネル

テクスチャチャチャンネルを使用して複数のテクスチャを 1 つにまとめる

テクスチャチャンネルのパッキングは、1 つのテクスチャに 3 つのマップを含めることができるため、テクスチャチャメモリを節約するのに役立ちます。つまり、テクスチャチャサンプラーの数が少なくなります。このアプローチは、一般的にラフネス、滑らかさ、メタリックを 1 つのテクスチャにパックするために使用されます。また、すべてのテクスチャマスクに適用できます。例えばアアルファマスクできます。透明度を持つ画像は 32 ビット形式を必要とするため、メモリフットプリントが大きくなりますが、アルファマスクを保存するためにフリーチャンネルを使用することで、拡散テクスチャを 16 ビットに保ち、ファイルサイズを効果的に半分にすることができます。

緑のチャンネルを使用して最も重要なマスクを格納します。緑のチャンネルは通常、眼は緑に対して感度が高く、青に対しては感度が低いため、より多くのビットがあります。

ProBuilder での手動 UV テクスチャ

UV 展開

UV マップは、3D モデルの表面に 2D テクスチャを投影します。UV アンラップは、UV マップを作成するプロセスです。

  • UV アイランドを簡単にパッキングし、無駄なスペースを減らすために、アンラップされたテクスチャの個々のユニットである UV アイランドはできるだけ直線に保つのがベストプラクティスです。直線 UV は、テクスチャへの階段効果を防ぐのにも役立ちます。
  • モバイルプラットフォームでは、テクスチャ空間が限られています。そのため、テクスチャのサイズは通常、コンソールや PC よりも小さくなります。優れた UV パッキングにより、テクスチャから最大限の解像度を引き出すことができます。
  • UV をまっすぐにしてテクスチャの品質を向上させることで、少し歪んだ UV を使用することを検討してください。
  • 場合によっては、形状の可読性を高めるために、エッジとシェーディングを誇張してハイライトする必要があります。モバイル プラットフォームでは通常、より小さなテクスチャが使用されるため、その狭いスペースで必要なすべてのディテールをキャプチャするのは難しいかもしれません。
  • モバイルアプリケーションでは、使用するテクスチャを少なくし、余分なディテールを 1 つのテクスチャにベイクします。これは重要です。なぜなら、小さなモバイルスクリーンでディテールが見えるようにするためには、テクスチャ自体にベイクしたほうがよいディテールがあるからです。