概要
動作確認環境: UE 5.4+
「ZBrushのハイポリモデルやフォトグラメトリのスキャンデータをゲームに持ち込みたいが、LOD作成に膨大な時間がかかる…」――従来のゲーム開発では、ポリゴン数やドローコール数の制約から、アセットの品質には常に妥協が必要でした。
UE5の Nanite は仮想化ジオメトリシステムで、この制約を根本から解消します。数十億ポリゴン規模のメッシュでも、自動LOD・オンデマンドストリーミング・独自レンダリングパスにより効率的にレンダリングされます。アーティストは技術的な制約を気にせず、映画品質のアセットをそのままゲームに持ち込めるようになります。
Naniteの仕組み
Naniteは従来の「距離に応じてLODメッシュを切り替える」アプローチとは根本的に異なります。単一の高精細メッシュデータから、画面上のピクセルスケールで最適な詳細度をリアルタイムに生成するため、LODの切り替わりによる視覚的な違和感が発生しません。
処理の流れは以下の通りです。
- インポート時のデータ処理: メッシュを階層的なクラスターに分解し、複数の詳細度レベルを構築する
- レンダリング時の最適化: カメラ距離・画面上のピクセルサイズに基づいて、各クラスターの最適LODをリアルタイムに決定。画面に見えない部分は描画しない
- オンデマンドストリーミング: 必要なメッシュデータのみをストレージからオンデマンドで読み込む。メモリ使用量を最小限に抑えるため、SSDの使用が強く推奨される(HDDではストリーミング速度がボトルネックとなり、LODの切り替え遅延やポップインが発生しやすい)
- 独自レンダリングパス: 従来のドローコールをバイパスする独自パスで、CPUのドローコールオーバーヘッドを大幅に削減
主なメリット
- 数十億ポリゴン をパフォーマンスを維持してレンダリング可能
- ポリゴン数・ドローコール・メッシュメモリの制約から解放
- ノーマルマップに頼らない 実ジオメトリでの高精細ディテール表現
- 手動LOD設定が不要 — LOD遷移がシームレスで品質低下なし
有効化方法
Naniteの有効化は3通りの方法で行えます。プロジェクトの状況に応じて使い分けてください。
インポート時に有効化
新しいメッシュをインポートする際、インポートオプションの Build Nanite にチェックを入れます。新規プロジェクトでは最初からこの設定をオンにしておくのが効率的です。
ヒント: Lumen / Virtual Shadow Maps を使用しライトマップが不要なプロジェクトでは、「Generate Lightmap UVs」を無効にするとインポート時間とデータ量を削減できます。高精細ジオメトリではライトマップUVの生成だけでも相当な時間がかかるためです。
既存アセットへの一括適用
既にプロジェクトに存在する複数のStatic Meshに対しては、コンテンツブラウザで対象を選択 > 右クリック > Nanite > Enable で一括有効化できます。プロジェクト途中からNaniteを導入する場合に便利です。
個別メッシュでの有効化
特定のメッシュだけ有効化する場合は、Static Mesh Editorの詳細パネル > Nanite Settings > Enable Nanite Support をオンにします。
適用すべきメッシュの基準
Naniteはほぼすべてのメッシュに適用して問題ありませんが、恩恵の大きさには差があります。以下の基準を参考にしてください。
| 適用推奨(恩恵大) | 恩恵が小さいケース |
|---|---|
| 多数の三角形を含むメッシュ | 画面上で非常に大きく表示されるメッシュ |
| 画面上で小さくなる三角形を持つメッシュ | シーンに1インスタンスしかないメッシュ |
| 多数のインスタンスがあるメッシュ | 他のオブジェクトをほとんど遮蔽しないメッシュ |
| 主要なオクルーダーとなるメッシュ | |
| Virtual Shadow Mapsで影を落とすメッシュ |
たとえばスカイスフィアは、画面上で非常に大きく表示され、他のオブジェクトを遮蔽することも少なく、通常はシーンに1つしか配置しないため、Naniteの恩恵は小さいでしょう。しかし、こうした例外は稀です。Naniteがサポートするメッシュであれば有効化してもパフォーマンスへの悪影響は最小限なので、迷ったら有効化しておくのが無難です。
パフォーマンス確認方法
Naniteのパフォーマンスを測定・確認するための方法をいくつか紹介します。
stat Naniteコマンド
コンソールで以下のコマンドを実行すると、Naniteに関する統計情報がオーバーレイ表示されます。
stat Nanite
レンダリング中の三角形数やインスタンス数の概要を確認できます。より詳細なGPUプロファイリングには、stat GPU コマンドで Nanite VisBuffer(可視性・カリング)や Nanite BasePass(マテリアルレンダリング)の処理時間を確認するのが有効です。
ビジュアライゼーションモード
ビューポートの View Mode > Nanite Visualization から、以下のモードでNaniteの動作を視覚的に確認できます。
- Triangles: 描画中の三角形密度をヒートマップ表示。負荷の高い箇所が一目でわかる
- Clusters: クラスターの分割状態を確認。LODの切り替わり具合を把握できる
- Overdraw: オーバードロー量の可視化(紫=低=良好、オレンジ=高=問題あり)
ほかにも Overview、Instances、Material Complexity などのモードがあります。
C++でのNanite状態確認
ランタイムでメッシュのNanite有効状態を確認するには、IsNaniteEnabled() メソッドを使用します。
UStaticMeshComponent* MeshComp = FindComponentByClass<UStaticMeshComponent>();
if (MeshComp && MeshComp->GetStaticMesh())
{
bool bNaniteEnabled = MeshComp->GetStaticMesh()->IsNaniteEnabled();
UE_LOG(LogTemp, Log, TEXT("Nanite enabled: %s"),
bNaniteEnabled ? TEXT("Yes") : TEXT("No"));
}
サポートする機能と連携
Naniteは、UE5の他の主要機能とシームレスに連携します。
- Static Mesh: Lumen GI/リフレクション、Virtual Shadow Maps(VSM)と連携。VSMはNaniteメッシュからシャドウキャッシュを効率的に生成し、多数の動的ライトでも高品質な影を維持できる。ただし、NaniteのFallback Meshが使われるケース(一部マテリアル)ではVSMのパフォーマンスが低下する場合がある
- Skeletal Mesh(UE 5.4で実験的サポート、5.5で安定化): 1ドローコールレンダリング、アニメーションLOD対応。ただしモーフターゲットやクロスシミュレーションには制限あり
- Landscape: 広大な地形を高精細かつ高パフォーマンスで表現。Virtual Shadow Maps関連のパフォーマンスも改善
- Foliage: 大量の植生を個々の葉まで高精細にレンダリング。ただしMaskedマテリアルを多用する草木類ではフォールバックコストに注意
- Geometry Collection: 破壊可能オブジェクトの破片もNaniteで効率的にレンダリング
制限事項と最適化のポイント
Naniteはジオメトリの複雑さを解決しますが、いくつかの制限があります。適用前にこれらを把握しておくことで、トラブルを避けられます。
- Translucentマテリアル: 非対応です。透明マテリアルを使うメッシュにNaniteは適用できません
- Maskedマテリアル: 対応していますが、ハードウェアフォールバックが必要 なためOpaqueと比べてパフォーマンスコストが高くなります。大量のフォリッジ等で使う場合は注意してください
- World Position Offset: 複雑なWPOはNaniteのジオメトリ最適化と競合する可能性があります
- マテリアルの複雑さ: Naniteはジオメトリ側の問題を解決しますが、マテリアルシェーダーの負荷は別問題です。高負荷なマテリアルはフレームレートに影響します。また、1メッシュあたりのマテリアルID数は最大64に制限されています
- ディスク容量: Nanite有効化により、メッシュのディスク使用量が元の2〜3倍になる場合があります。大規模プロジェクトではアセット管理の計画時にこの増加分を見込んでおく必要があります
- 出力解像度: Naniteはピクセルスケールで処理するため、高解像度ほど処理負荷が増加します
- 共有DDC: チーム開発ではDerived Data Cacheを共有して、Naniteメッシュの処理時間をチーム全体で短縮できます
まとめ
- Nanite は仮想化ジオメトリシステムで、自動LOD・オンデマンドストリーミングにより数十億ポリゴンを効率的にレンダリング
- インポート時・一括・個別の3通りで有効化可能
stat Naniteコマンドとビジュアライゼーションモードでパフォーマンスを確認- Translucentマテリアルは非対応、Maskedマテリアルはコスト増に注意
- Skeletal Meshサポートは UE 5.4で実験的、5.5で安定化。SSD環境での運用が推奨