2.

UE5 の Nanite が効かない|原因と対処の切り分け

編集

この記事の要点

  • Nanite が効かない原因は「実行環境」「アセット種別」「マテリアル」「そもそも効果が出にくい構成」の4つに切り分けると特定が早くなります。
  • 最初に疑うのは DirectX 12 とシェーダーモデル 6 の設定。ここが外れていると全メッシュがフォールバック描画になります。
  • 特定のメッシュだけ効かない場合は、アセットの種類とマテリアルのブレンドモードを確認します。半透明は Nanite の対象外です。
  • 「有効なのに速くならない」場合はボトルネックがジオメトリではない可能性が高く、オーバードローやマテリアル負荷を疑います。
  • 推測で判断せず、ビューポートの Nanite 可視化モードで実際に色が付くかどうかを毎回確認するのが最短ルートです。

1まず切り分ける:症状は2種類ある

「Nanite が使えない」という相談は、実際には性質の異なる2つの症状が混ざっています。最初にどちらなのかをはっきりさせると、無駄な調査を避けられます。

症状A:Nanite として描画されていない。設定したはずなのにメッシュエディタで有効になっていない、あるいは可視化モードで色が付かない。この場合は環境要因かアセット要因です。

症状B:Nanite としては描画されているが、期待したほど速くならない。可視化モードでは正しく色が付くのに、フレームレートが改善しない。この場合はボトルネックが別の場所にあります。

どちらなのかを判定するには、Unreal Engine 5 (UE5) のビューポート表示メニューにある Nanite の可視化を開き、対象のメッシュに色が付いているかを見ます。ここで色が付かなければ症状A、付いているのに遅ければ症状Bです。

Nanite 可視化で色が付くか 付かない 付く 症状A:適用されていない 症状B:速くならない 環境要因 RHI / SM6 GPU 対応 アセット要因 種別 / 未ビルド マテリアル 描画負荷 オーバードロー マテリアル複雑度 別ボトルネック 影 / ライト CPU / ロジック
可視化モードで色が付くかどうかを最初の分岐にすると、調べる範囲を半分に絞れる

2環境要因:プロジェクト全体で効かない場合

すべてのメッシュで Nanite が効いていないなら、原因はほぼ環境側です。次の順に確認します。

  1. 既定の RHI が DirectX 12 か:プロジェクト設定のプラットフォーム項目を開き、Windows の既定 RHI を確認します。DirectX 11 のままだと Nanite は動作しません。
  2. シェーダーモデル 6 が対象に入っているか:同じ画面のシェーダーフォーマット指定に SM6 が含まれているかを見ます。SM5 のみだと Nanite の要件を満たしません。
  3. 設定変更後にエディタを再起動したか:これらの設定は再起動して初めて反映されます。再起動後は大量のシェーダーコンパイルが走るため、完了するまで正しい結果になりません。時間がかかりすぎる場合はシェーダコンパイルに長時間待たされる問題とその解決策を参照してください。
  4. GPU が要件を満たしているか:DX12 と SM6 世代の機能、とくに 64bit のアトミック演算に対応している必要があります。古い GPU や一部の統合 GPU では要件を満たさず、フォールバックメッシュでの描画になります。
  5. 起動オプションやスケーラビリティ設定:エディタを DX11 指定で起動していないか、Nanite を無効化するコンソール変数が設定ファイルに残っていないかを確認します。
# Nanite の有効/無効を実行時に切り替えて比較する
r.Nanite 1
r.Nanite 0

# フレーム時間の内訳(CPU / GPU のどちらがボトルネックか)を見る
stat unit

# ※ 使用中の RHI は Project Settings の Default RHI などで確認する

要件を満たしていない環境では、エラーではなく「静かにフォールバックへ切り替わる」点が厄介です。見た目が大きく崩れないため気付きにくく、パッケージ後に別マシンで検証して初めて発覚する、ということが起こります。

3アセット要因:特定のメッシュだけ効かない場合

他のメッシュは Nanite で描かれているのに一部だけ効かない場合、そのアセットが対象外か、設定が反映されていません。

チェック項目確認と対処
アセットの種類Nanite の基本対象はスタティックメッシュ。スケルタルメッシュ、破壊用のジオメトリコレクション、ヘアやパーティクル系などの対応可否はバージョンにより異なるため、使用中のバージョンの仕様を前提に判断する
設定が適用済みかスタティックメッシュエディタで Nanite が有効表示になっているかを見る。チェックを入れただけで変更を適用していないケースが多い
ビルドが完了しているか有効化後は Nanite 用データの生成処理が走る。大量変換の直後は処理待ちの可能性がある
インスタンス側の設定レベルに配置したアクタ側で描画関連の設定が上書きされていないかを確認する
ネイティブでない配置方法スプラインに沿って変形させる配置や、実行時に形状を変えるような使い方は Nanite の前提と噛み合わないことがある

また、元のメッシュ自体に問題があるケースもあります。極端に破綻したジオメトリ、重複頂点だらけのデータ、法線が壊れているモデルは、Nanite 化しても期待どおりの結果になりません。DCC ツール側で一度クリーンにしてから再インポートするほうが結局早いことが多いです。

4マテリアル要因:半透明と特殊な表現

Nanite が適用されない典型例のひとつがマテリアル側の条件です。Nanite は不透明な表面を効率よく描くために設計された仕組みで、半透明のブレンドモードを使うマテリアルは対象外です。半透明を割り当てたメッシュは、Nanite ではなく従来のパスで描画されます。

そのため、ガラス、水、煙、光の膜のような表現を含むアセットでは、次のような対処が現実的です。

  1. 不透明で表現できる部分と半透明が必要な部分をメッシュとして分ける。建物なら躯体は Nanite、窓ガラスだけ別メッシュで従来描画にする、といった分割です。
  2. 半透明ではなくマスク(切り抜き)で代用できないかを検討する。ただしマスクは扱いによって負荷が変わるため、置き換えれば必ず軽くなるとは限りません。
  3. 頂点位置を動かすような表現を使う場合は、使用中のバージョンでの対応状況を確認する。この領域はバージョン間で仕様が変化してきた部分なので、公式ドキュメントで自分の環境の記述を確認するのが確実です。

5「有効なのに速くならない」ときの見方

可視化モードで正しく色が付いているのに改善しない場合、Nanite の設定をいじっても解決しません。次を疑ってください。

○ 確認すべき順序
まず統計表示で CPU と GPU のどちらが待たされているかを見ます。GPU 側なら描画パスの内訳を確認し、ジオメトリ以外(影、ライティング、ポストプロセス)が支配的でないかを調べます。CPU 側ならそもそも描画以外の処理が原因です。
△ ありがちな誤解
Nanite はマテリアル評価やライティングの負荷を下げません。三角形を減らしても、画面を覆うピクセルに対して重いシェーダを走らせていれば結果は変わりません。ライティングや影の設定を見直すほうが効くケースは多いです。

とくに多いのが、密度の高い草木や葉のようなアセットでの重なり(オーバードロー)です。切り抜きを多用する表現は、Nanite の得意分野とは性質が異なるため、素直に効果が出ないことがあります。この場合は、そもそも配置数を見直す、遠景を別の表現に置き換えるといった設計側の対処が必要です。

もうひとつ見落としやすいのが、Nanite の詳細ジオメトリがそのまま使われない処理があることです。当たり判定や一部の機能ではフォールバック側の形状が使われます。フォールバックの精度設定を極端に高くしていると、そちらの負荷が別途乗ってきます。

6大規模レベルで発生する固有の問題

広いマップでは、Nanite 単体ではなくレベル構成側の問題が絡んできます。World Partition を使っている場合、遠景の表示は 古いHLODアクタを検出、HLODをリビルドする必要があります で扱うような HLOD の仕組みに依存します。HLOD が古いままだと遠景が想定と違う見え方になり、「Nanite が効いていない」と誤認する原因になります。レベルを大きく編集したあとは HLOD のリビルドを行い、ビルドの状態を最新にしてから評価してください。

また、World PartitionとWorld Compositionの違いを理解しないまま古い構成を引きずっていると、ロードの単位と Nanite の効きどころがずれて、原因の切り分けが難しくなります。レベルの分割方式そのものを確認しておくと無駄な調査を減らせます。

7調査チェックリスト

順番やること判定
1Nanite 可視化モードで色が付くか見る付かない→2へ/付く→5へ
2既定 RHI が DirectX 12、シェーダーフォーマットに SM6 が入っているか外れていれば修正して再起動
3スタティックメッシュエディタで Nanite 有効表示になっているか無効なら有効化して適用
4アセット種別とマテリアルのブレンドモードを確認半透明・非対応種別なら設計を分割
5統計表示で CPU / GPU のどちらが律速か確認ジオメトリ以外が支配的ならそちらを最適化
6オーバードローとマテリアル複雑度を可視化して確認重なりが多ければ配置・表現を見直す
7HLOD やレベル構成が最新の状態か確認古ければリビルドしてから再評価

この順で潰していけば、たいていの「Nanite が効かない」は原因までたどり着けます。重要なのは、可視化モードと統計表示という客観的な材料を使い、印象で判断しないことです。設定を一度に複数変えると何が効いたのか分からなくなるため、1項目ずつ変えて確認する進め方を推奨します。

編集
Post Share
子ページ

子ページはありません

同階層のページ
  1. Nanite とは?有効化の手順と対応条件
  2. Nanite が使えない・効かないメッシュの条件と対処
  3. Nanite と LOD の違いと使い分け