アセットのパフォーマンス最適化ガイド
部屋をロードした際にFPSが低下する場合、配置されているアセット(家具や植物)の最適化が必要です。 本ガイドでは、エディタのデバッグモードを使用して問題のあるアセットを特定し、修正する手順を解説します。
概要
Naniteを有効にできるにもかかわらず、有効になっていないメッシュが多数存在しています。これらの問題は主に、実際には不透明なジオメトリのみを使用しているにもかかわらず、Masked Materialを使用しているアセットで発生します。以下を確認する必要があります:
- Naniteが有効になっている(可能な限り)
- Masked Materialを最小限にする(Naniteと相性が悪い)
- World Position Offset (WPO) が不要な場合は無効にする
- Overdraw(描画の重なり) を最小限に抑える
1. Naniteの適用確認
最も基本的な最適化は、静的メッシュに対してNaniteを有効にすることです。
チェック方法
- エディタモードに入る
- ビューポートオプションから Nanite Visualization モード(「Masks」を選択)に切り替える
Nanite Enabled = Noと表示されるメッシュを探す
:::danger
問題点: 多くのメッシュで Nanite Enabled = No になっている場合、パフォーマンスに悪影響を与えます。特に頂点数が多い家具や装飾オブジェクトで問題になります。
:::
対策
- アセットのプロパティで全てのStatic Meshに対して Naniteを有効(Enable Nanite) にしてください
- 特に頂点数が多いアセットでは必須です
- 有効化後、Nanite Visualizationモードで変更を確認してください
2. Masked Material(透過マテリアル)の削減
植物の葉やフェンスなどで使われる「Masked Material(抜き)」は、描画コストが非常に高いです。不透明なマテリアルと比べて何倍も重く、可能な限り避けるべきです。
チェック方法
- ビューポートで Shader Complexity (Pixel Programmable) モードに切り替える
- カラーコーディングを確認:
- 紫色: 非常に負荷が高い(Expensive)- 重大なパフォーマンス問題
- 赤色: 負荷が高い - 要注意
- 緑色: 負荷が低い - 許容範囲のパフォーマンス
:::warning 要注意: 植物(Plants)やペンダントライトなどで、全体が紫色や赤色に光っている場合は即座に最適化が必要です。これらは非効率的にMasked Materialを使用している可能性があります。 :::
例:良好なパフォーマンス
最適化後、ほとんどのメッシュはShader Complexityモードで緑色に表示され、許容範囲のパフォーマンスを示すはずです。
対策
- Masked Materialの使用を避ける: 可能であれば
Opaque(不透明)マテリアルに変更し、ジオメトリで形状を表現する方が、Nanite環境下では高速な場合があります - 植物のMasked素材を置き換える: 植物の場合、透過テクスチャのMaskedマテリアルではなく、不透明マテリアルを使った立体ジオメトリの使用を検討してください
- LODの使用: 遠く離れたときは単純なメッシュに切り替える
- 必須の場合のみ使用: チェーンリンクフェンスなど、ジオメトリでの置き換えが現実的でない場合のみMasked Materialを使用する
3. World Position Offset (WPO) の確認
WPO(World Position Offset)は風で揺れるカーテンや植物に使われますが、計算コストがかかります。多くのアセットでは、不要なのにランタイムでマテリアル内のWPOが有効になっています。
チェック方法
- ビューポートで Evaluate WPO モードに切り替える
- カラーコーディングを確認:
- 赤色: WPOが有効(計算コストあり)
- 緑色: WPOが無効(高速、追加計算なし)
:::danger よくあるミス: 動かない静的な家具やオブジェクトがWPOモードで赤く表示される。これは毎フレーム不要な頂点計算を行っていることを意味します。 :::
対策
- 不要なWPOをオフにする: 静的な家具やアニメーションしないオブジェクトが赤く表示されている場合、マテリアル設定でWPOが誤ってオンになっています
- アニメーション要素のみWPOを維持: カーテン、旗、風で揺れる植物など、本当にアニメーションする要素のみWPOを有効にすべきです
- マテリアルエディタで確認: マテリアルを開き、World Position Offsetノードが不要なのに接続されていないか確認してください
4. Overdraw(描画の重なり)の確認
半透明のオブジェクトが重なると、ピクセルの再描画(Overdraw)が発生し、GPU負荷が増大します。パストレーシングモードでは、色が明るいほど重なりが激しいことを示します。完全に不透明な白色の場合、オブジェクトが互いに重なっているか、非常に近接して配置されていることを意味します。
チェック方法
- ビューポートで Quad Overdraw モードに切り替える
- 色の強度を確認:
- 白色・非常に明るい色: 極度のOverdraw(重大なパフォーマンス問題)
- 明るい色: 高いOverdraw(要注意)
- 暗い色: 最小限のOverdraw(許容範囲)
:::warning 重大な問題: 完全に不透明な白色のエリアは、オブジェクトが互いに重なっているか、近すぎる位置に配置されていることを示し、大量のピクセル再計算を引き起こしています。 :::
対策
- 重なるオブジェクトを分離: 半透明要素が重ならないように配置を調整する
- パーティクルエフェクトを制限: 半透明パーティクル(煙、炎エフェクト)を重ねすぎない
- ガラスの配置を見直す: 近接した複数のガラス板はOverdrawを引き起こす可能性があります
- 隠れたジオメトリを確認: 誤ってオブジェクトが互いの内部に配置されていないか確認し、位置を修正する
修正後のパフォーマンス確認
最適化を適用した後、改善を確認します:
- 部屋を再ロードし、リアルタイムウォークスルーモードでFPSを確認
- 全ての可視化モードを再実行して修正を確認:
- Nanite Visualization: 対象となる全メッシュが「Enabled」と表示されるべき
- Shader Complexity: 主に緑色で、紫・赤が最小限
- Evaluate WPO: 意図的にアニメーションするオブジェクトのみが赤色
- Quad Overdraw: 明るい白色エリアがない
:::tip 成功の指標: FPSが明らかに改善し、ウォークスルー時に部屋がスムーズに感じられるはずです。問題が続く場合は、残りの問題を特定するためにアセットを一つずつ確認してください。 :::
ワークフローまとめ
アセット制作またはレビュー時には、必ず以下の順序でビューポートの可視化モードを切り替えてチェックしてください:
- Lit (通常表示): 見た目の確認 - 正しく見えるか?
- Nanite Visualization (Masks): 静的メッシュでのNanite漏れの確認
- Evaluate WPO: 静的オブジェクトでの不要なアニメーション計算の確認
- Shader Complexity (Pixel Programmable): 重すぎるマテリアルの確認(紫色を避ける!)
- Quad Overdraw: 半透明オブジェクトの極度な重なりがないか確認
クイックチェックリスト
- ✅ 全ての静的メッシュでNaniteが有効
- ✅ 可能な限りMasked Materialを不透明に置き換え
- ✅ 実際にアニメーションするオブジェクトのみWPOが有効
- ✅ 極度なOverdraw(Quad Overdrawモードで白色エリア)がない
- ✅ 部屋のロード時およびウォークスルー時にFPSが安定
この体系的なアプローチにより、アセットが本番の部屋で使用される前に、FPS低下の主要な原因を排除できます。
トラブルシューティングのヒント
問題: 「Naniteを有効にしたがパフォーマンスが改善しない」
- Masked Materialがまだ使用されていないか確認 - Naniteの効率はMasked Materialで低下します
- WPOが無効になっているか確認 - WPOは完全なNanite最適化を妨げます
問題: 「Shader Complexityで全て緑色なのにまだ重い」
- Quad Overdrawを確認 - 半透明の重なりが原因かもしれません
- 実際のFPS低下のタイミングをプロファイル - 問題は特定のエリアにあるかもしれません
問題: 「どうやって確認すればいい?」
- 初期診断には Shader Complexity 可視化モードが最も有効です
- それ以外に、Nanite/WPO/LODなどの設定を行っていない場合、3~4つのリンクで正しく機能しません