• ゲーム
  • Industry
  • リソース
  • コミュニティ
  • 学習
  • サポート
開発
Unityエンジン
任意のプラットフォーム向けに2Dおよび3Dゲームを構築
ダウンロードプランと価格
収益化
アプリ内課金(IAP)
ストア全体でIAPを発見し、管理する
Mediation
収益を最大化し、マネタイズを最適化する
Ad Quality
アプリのユーザーエクスペリエンスを保護する
Tapjoy
長期的なユーザーの忠誠心を構築する
すべてのマネタイズ製品
詳しく見る
詳しく見る
発見され、モバイルユーザーを獲得する
UnityベクターAI
プレイヤーを適切なゲームに接続する
Auraのオンデバイス広告
ピークエンゲージメント時にデバイス上のユーザーにリーチする
すべての成長製品
活用事例
3Dコラボレーション
リアルタイムで3Dプロジェクトを構築およびレビューする
没入型トレーニング
没入型環境でのトレーニング
顧客体験
インタラクティブな3D体験を作成する
すべての業界ソリューション
業界
製造業
運用の卓越性を達成する
小売
店内体験をオンライン体験に変換する
自動車
革新と車内体験を高める
全業界
技術ライブラリ
ドキュメント
公式ユーザーマニュアルとAPIリファレンス
開発者ツール
リリースバージョンと問題追跡
ロードマップ
今後の機能をレビューする
用語集
技術用語のライブラリ
インサイト
ケーススタディ
実際の成功事例
ベストプラクティスガイド
専門家のヒントとコツ
すべてのリソース
新機能
ブログ
更新情報、情報、技術的ヒント
お知らせ
ニュース、ストーリー、プレスセンター
コミュニティハブ
ディスカッション
議論、問題解決、つながる
イベント
グローバルおよびローカルイベント
コミュニティストーリー
Made with Unity
Unityクリエイターの紹介
ライブストリーム
開発者、クリエイター、インサイダーに参加する
Unity Awards
世界中のUnityクリエイターを祝う
すべてのレベルに対応
Unity Learn
無料でUnityスキルをマスターする
プロフェッショナルトレーニング
Unityトレーナーでチームをレベルアップ
Unity初心者向け
スタートガイド
学習を開始しましょう
Unityエッセンシャルパスウェイ
Unity は初めてですか?旅を始めましょう
ハウツーガイド
実用的なヒントとベストプラクティス
教育
学生向け
キャリアをスタートさせる
教育者向け
教育を大幅に強化
教育機関向けライセンス
Unityの力をあなたの機関に持ち込む
認定教材
Unityのマスタリーを証明する
サポートオプション
ヘルプを得る
Unityで成功するためのサポート
Success Plan
専門的なサポートで目標を早く達成する
FAQ
よくある質問への回答
お問い合わせ
私たちのチームに連絡する
プランと価格
言語設定
  • English
  • Deutsch
  • 日本語
  • Français
  • Português
  • 中文
  • Español
  • Русский
  • 한국어
ソーシャル
通貨
購入
  • プロダクト
  • Unity Ads
  • サブスクリプション
  • Unity Asset Store
  • リセラー
教育
  • 学生
  • 教育関係者
  • 教育機関
  • 認定資格試験
  • 学ぶ
  • スキル開発プログラム
ダウンロード
  • Unity Hub
  • ダウンロードアーカイブ
  • ベータプログラム
Unity Labs
  • ラボ
  • 研究論文
リソース
  • Learn プラットフォーム
  • コミュニティ
  • ドキュメント
  • Unity QA
  • FAQ
  • サービスのステータス
  • ケーススタディ
  • Made with Unity
Unity
  • 当社について
  • ニュースレター
  • ブログ
  • イベント
  • キャリア
  • ヘルプ
  • プレス
  • パートナー
  • 投資家
  • アフィリエイト
  • セキュリティ
  • ソーシャルインパクト
  • インクルージョンとダイバーシティ
  • お問い合わせ
Copyright © 2025 Unity Technologies
  • 法規事項
  • プライバシーポリシー
  • クッキーについて
  • 私の個人情報を販売または共有しないでください

「Unity」の名称、Unity のロゴ、およびその他の Unity の商標は、米国およびその他の国における Unity Technologies またはその関係会社の商標または登録商標です(詳しくはこちら)。その他の名称またはブランドは該当する所有者の商標です。

Hero background image

テクニカルアーティストのためのモバイル最適化のヒント(パート 2)

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

このページで学ぶ内容: モバイルゲーム用にアートアセットを最適化するために役立つヒント集の第 2 部。パート I はこちらです。

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

  • ライティング
  • 動的ライトの多用を避ける
  • シャドウを無効にする
  • ライティングをライトマップにベイクする
  • ライトレイヤーを使う
  • 移動するオブジェクトにライトプローブを使用する
  • リフレクションプローブを最小化
  • 透明なマテリアルに注意する
  • シェーダーはシンプルに
  • Lit とUnlit シェーダー
  • 頂点シェーダーでの演算
  • SRP Batcher
  • キャラクターアニメーション
  • 追加のヒント
Unity エディターのライティング設定
これらのバッチングテクニックを活用するために、ゲームオブジェクトを整理しましょう。

ライティング

コンソールや PC の同じ物理ベースのライティングとマテリアルを、ユニバーサルレンダーパイプライン(URP)を使用してスマートフォンやタブレットにスケーリングすることもできます。

ドローコールをバッチ処理

フレームごとに、Unity はレンダリングする必要があるオブジェクトを決定し、ドローコールを作成します。ドローコールはグラフィックス API を呼び出してオブジェクト(三角形など)を描画するものですが、バッチはまとめて実行されるドローコールのグループです。描画するオブジェクトをバッチ処理することで、各オブジェクトをバッチで描画するために必要な状態変更を最小限に抑えます。これは、オブジェクトのレンダリングにかかる CPU コストを削減することで、パフォーマンスの向上につながります。

  • 動的バッチ処理:小さなメッシュの場合、Unity は CPU 上で頂点をグループ化して変換し、それらを一度に描画できます。注:これは、十分な数のローポリゴンメッシュ(頂点属性が 900 未満、頂点数が 300 以下)がある場合にのみ使用します。Dynamic Batcher は、これより大きなメッシュをバッチ処理しないため、毎フレームバッチ処理する小さなメッシュを探すために CPU 時間を浪費します。
  • 静的バッチ処理:動かないジオメトリの場合、Unity は同じマテリアルを共有するメッシュのドローコールを減らすことができます。動的バッチングよりも効率的ですが、より多くのメモリを使用します。
  • GPU インスタンシング:同一のオブジェクトが多数ある場合、グラフィックスハードウェアを使用することで、より効率的にバッチ処理を行います。

SRP バッチング:Advanced の下の URP アセットで SRP Batcher を有効にします。これにより、シーンによっては CPU レンダリング時間が大幅に短縮されます。

動的ライトの多用を避ける

モバイルアプリケーションに動的ライトを追加しすぎないことが重要です。動的メッシュ用のカスタムシェーダーエフェクトやライトプローブ、静的メッシュ用のベイク済みライティングなどの代替手段を検討してください。

URP とビルトインレンダーパイプラインのリアルタイムライトの具体的な制限については、この機能比較表を参照してください。

シャドウを無効にする

シャドウキャスティングは、MeshRenderer とライトごとに無効にできます。ドローコールを減らすために、可能な限りシャドウを無効にします。

また、キャラクターの下のシンプルなメッシュやクアッドに適用されたぼやけたテクスチャを使用して、フェイクシャドウを作成することもできます。また、カスタムシェーダーでブロブシャドウを作成することもできます。

Unity ライトマップの図
シャドウの投影を無効にして、ドローコールを減らします。

ライティングをライトマップにベイクする

グローバルイルミネーション(GI)を使用して、静的ジオメトリにドラマチックなライティングを追加します。オブジェクトに Contribute GI マークを付けることで、高品質なライティングをライトマップの形で保存できます。

ベイクしたシャドウとライティングは、ランタイム時にパフォーマンスに影響を与えることなくレンダリングできます。プログレッシブ CPU および GPU ライトマッパーは、グローバルイルミネーションのベイクを高速化できます。

マニュアルとライト最適化記事に従って、Unity でライトマッピングの使用を開始してください。

Unity エディター内の複数のライトレイヤー
レイヤーは、ライトの影響を特定のカリングマスクに制限できます。

ライトレイヤーを使う

複数のライトを含む複雑なシーンでは、レイヤーを使用してオブジェクトを分離し、各ライトの影響を特定のカリングマスクに制限します。

Unity エディターのライトプローブ

移動するオブジェクトにライトプローブを使用する

ライトプローブは、シーン内の何もない空間に関するベイクしたライティング情報を保存し、(直接光と間接光の両方で)高品質なライティングを提供します。動的ライトと比較して計算が高速な球面調和関数を使用しています。

キューブと交差する反射球

リフレクションプローブを最小化

リフレクションプローブはリアルなリフレクションを作成できますが、バッチのコストが非常に高くなります。低解像度のキューブマップ、カリングマスク、テクスチャ圧縮を使用して、ランタイムのパフォーマンスを改善します。

Unity エディターの透明なマテリアル
シーンビューのオーバードロービジュアライゼーションモード

透明なマテリアルに注意する

オブジェクトを透明度でレンダリングすると、不透明なオブジェクトをレンダリングするよりも多くの GPU リソースが消費されます。特に、透明なオブジェクトが複数回重ねられてレンダリングされる場合、これはオーバードローと呼ばれるプロセスです。特にモバイルプラットフォームでは、可能な限り不透明なマテリアルを使用することをお勧めします。オーバードローは、RenderDoc グラフィックスデバッガーを使用してチェックできます。

シェーダーはシンプルに

シェーダーは可能な限りシンプルなもの(Unlit シェーダーなど)を使用し、不要な機能は使用しないようにしましょう。パーティクルなどのシステム専用に設計された Unity の事前構築済みシェーダーを使用します。URP には、モバイルプラットフォーム向けに最適化された軽量の Lit シェーダーと Unlit シェーダーがいくつか含まれています。オーバードローを最小限に抑えるには、ゲーム内のパーティクルの数やサイズを減らします。

パフォーマンス目標のためには、Unlit Opaque マテリアルを可能な限り半分の精度で使用することを検討し、ノードでの複雑な操作に注意してください。シェーダーグラフに関するこのセッションでは、さらに多くのヒントを紹介します。

Lit とUnlit シェーダー

シェーダーの作成時に、マテリアルが光にどのように反応するかを決めることができます。ほとんどのシェーダーは、lit または unlit に分類されます。Unlit シェーダーは、最も高速で計算コストの低いシェーディングモデルです。ローエンドのデバイスをターゲットにしている場合に使用します。

考慮すべき重要なポイントは以下の通りです。

  • ライティングは、ライティングされていないシェーディングモデルには影響しません。つまり、スペキュラリティ計算など、多くの計算は必要ありません。その結果、レンダリングが安価になるか高速になります。
  • 漫画のような様式化されたアートディレクションを使用すると、ライティングされていないシェーディングとうまく調和します。このスタイルは、モバイルプラットフォーム向けのゲームを開発する際に検討すべきものです。
Unity エディターのシェーダーグラフ
シェーダーグラフの頂点ディスプレイスメント

頂点シェーダーでの演算

頂点シェーダーはすべての頂点で機能し、ピクセル(またはフラグメント)シェーダーはすべてのピクセルで実行されます。通常、レンダリングされるピクセル数は画面上の頂点の数よりも多くなります。これは、ピクセルシェーダーが頂点シェーダーよりも頻繁に実行されることを意味します。このため、可能な限り計算をピクセルシェーダーから頂点シェーダーに移すことをお勧めします。いつものように、最適化に取り組んだ後は、さらにプロファイリングを行い、特定の状況に最適なソリューションを決定する必要があります。

加算や乗算などの基本的な演算の処理が高速化されています。より遅い演算の回数はできるだけ少なくするのがベストです。GLES 2.0 を使用するような古いデバイスでは、使用される複雑な計算の量を低く抑える必要があります。

SRP Batcher

SRP Batcher をオンに切り替えるときは、Profiler ビューの Statistics ウィンドウと Rendering Section の頂点グラフを確認してください。FPS の隆起を除けば、処理される三角形と頂点の数は劇的に減少します。オブジェクトは URP と互換性のあるシェーダーを使用しているため、レンダーパイプラインは関連するすべてのジオメトリデータを自動的にバッチ処理して、処理されるデータ量を削減します。

キャラクターアニメーション

デフォルトでは、Unity はアニメーション化されたモデルを Generic リグでインポートしますが、開発者がキャラクターをアニメーション化するときは Humanoid リグに切り替えることがよくあります。ヒューマノイドリグは、インバースキネマティクスとアニメーションのリターゲティングをフレームごとに計算するため、同等のジェネリックリグよりも 30 ~ 50% 多くの CPU 時間を消費します。

スキンメッシュのレンダリングにはコストがかかります。SkinnedMeshRenderer を使用するすべてのオブジェクトに必要です。ゲームオブジェクトがアニメーションのみを必要とする時間がある場合は、BakeMesh 関数を使用してスキンメッシュを静的ポーズで固定し、実行時によりシンプルな MeshRenderer に切り替えます。

主にヒューマノイドキャラクターを対象とした Unity の Mecanim システムは非常に洗練されていますが、単一の値(UI 要素のアルファチャンネルなど)をアニメーション化するためによく使用されます。アニメーターを使いすぎないようにしましょう。特に、UI 要素と組み合わせてトゥイーン関数を作成したり、シンプルなアニメーション(DOTween や LeanTween など)にサードパーティ製のライブラリを使用することを検討してください。

Unity エディターの内部ライティングシーン
フレームデバッガーツールでドローコール、バッチング、レンダリングサイクルのすべてのステップをチェック

追加のヒント

フレームごとに特定の時間予算で作業する

各フレームには、目標とする 1 秒あたりのフレーム数(fps)に基づいた時間予算があります。理想的には、30fps で動作するアプリケーションでは、1 フレームあたり約 33.33ms(1000ms / 30fps)が許容されます。同様に、60 fps を目標にすると、1 フレームあたり 16.66 ミリ秒になります。

デバイスは短時間(カットシーンやロードシーケンスなど)はこの予算を超えることがありますが、長時間は超えられません。

プリセット

デフォルト設定に依存せず、プラットフォーム固有のオーバーライドタブを使用して、テクスチャやメッシュジオメトリなどのアセットを最適化します。設定を誤ると、ビルドサイズが大きくなり、ビルド時間が長くなり、メモリ使用量が少なくなる可能性があります。特定のプロジェクトを強化するベースライン設定のカスタマイズに役立つプリセット機能の使用を検討してください。

カメラの使用を制限する

各カメラには、意味のある仕事をしているかどうかにかかわらず、ある程度のオーバーヘッドが発生します。レンダリングに必要なカメラコンポーネントのみを使用してください。ローエンドのモバイルプラットフォームでは、各カメラは最大 1ms の CPU 時間を使用できます。

フルスクリーンエフェクトを避ける

グローなどの全画面のポストプロセッシングエフェクトは、パフォーマンスを劇的に低下させる可能性があります。タイトルのアートディレクションでは慎重に使用してください。

Renderer.material には注意する

スクリプトで Renderer.material にアクセスすると、マテリアルが複製され、新しいコピーへの参照が返されます。これにより、マテリアルがすでに含まれている既存のバッチが壊れます。バッチ化されたオブジェクトのマテリアルにアクセスする場合は、代わりに Renderer.sharedMaterial を使用します。