ゲーム用のモデルを作るとき、長年ついてまわった作業があります。 ポリゴンを削る ことと、 LODを何段階も用意する こと。ZBrushで作り込んだ数百万ポリゴンのモデルも、そのままでは持ち込めない。それが常識でした。
Nanite は、この前提を崩す仕組みです。 数十億ポリゴン規模でも、そのまま置ける 。手動のLOD作成も不要になります。この記事では、Naniteが何をしているのかと有効化の方法、 知らないとハマる制限 、そして 可視化モードで効き方を目で確かめる 手順を解説します。
この記事でわかること
- Naniteは 画面のピクセルに合わせて詳細度を決める 仕組み
- 手動LODが不要 になり、切り替わりの段差も見えない
- 有効化は 3通り (インポート時・一括・個別)
- Translucentは非対応 ——これが最大の落とし穴
- 実践:ハイポリを並べて 可視化モードで確かめる
Naniteは何をしているのか
従来のLODは、 あらかじめ何段階かの簡略メッシュを用意しておき、距離で切り替える 仕組みでした。だから作る手間がかかり、切り替わる瞬間に 形が変わって見える(ポップ) 問題もありました。
Naniteの発想は違います。

Naniteは、1つの高精細メッシュを クラスタ(三角形の小さなまとまり) に分解して保持します。そして描画のたびに、 画面上で必要な細かさに合わせて、どのクラスタをどの精度で使うかを 決めます 。
ポイントは 「画面のピクセルを基準にしている」 ことです。遠くの岩は画面上で数ピクセルにしかならないので、そのぶんだけの三角形しか使いません。近づけば必要な分だけ細かくなります。 段階ではなく連続的に変わる ので、切り替わりが見えません。
さらに、必要なデータだけをストレージから読み込む オンデマンドストリーミング で動いています。この性質上、 SSDが強く推奨 されます。HDDだと読み込みが追いつかず、ディテールが遅れて現れる(ポップイン)ことがあります。
結果として得られるもの:
- ポリゴン数を気にせずモデルを持ち込める
- 手動でLODを作る作業がなくなる
- ノーマルマップで凹凸を「描く」代わりに、 実際の形状 で表現できる
- 同じメッシュを大量に置いても、ドローコールが膨らみにくい
有効化する3つの方法
状況に応じて使い分けます。

| タイミング | 手順 | 使う場面 |
|---|---|---|
| インポート時 | インポートオプションの Build Nanite にチェック | 新しく取り込むとき |
| 一括 | コンテンツブラウザで複数選択 → 右クリック → Nanite → Enable | 途中から導入するとき |
| 個別 | Static Mesh Editor → Nanite Settings → Enable Nanite Support | 特定の1つだけ試すとき |
新規プロジェクトなら、 インポート時にオンにしておく のがいちばん手間がかかりません。
Lightmap UVの生成は切れることがあります。 LumenとVirtual Shadow Mapsを使い、ライトマップを焼かない構成なら、インポート時に
Generate Lightmap UVsをオフにできます。高精細メッシュではこの生成だけでかなりの時間がかかるので、効果は小さくありません。
どのメッシュに効くか
対応しているメッシュなら 基本的に全部オンで構いません 。悪影響はほとんどないので、迷ったら有効化しておくのが実務的です。
そのうえで、 恩恵の大きさには差があります 。

| 効果が大きい | 効果が小さい |
|---|---|
| 三角形が多いメッシュ | 画面いっぱいに映るメッシュ |
| 同じものを大量に置く(岩、瓦礫、建物) | シーンに1つしかないメッシュ |
| 他を遮蔽する 大きな壁・地形 | 何も遮蔽しないもの |
| Virtual Shadow Mapsで影を落とすもの |
分かりやすい例外が スカイスフィア です。画面いっぱいに映り、1つしか置かず、何も遮蔽しない——Naniteの得意分野から全部外れています。ただし、こうした例外はまれです。
知らないとハマる制限
Naniteは万能ではありません。 特に1つ目は必ず踏む ので、先に知っておいてください。

| 制限 | 内容 |
|---|---|
| Translucent(半透明) | 非対応 。ガラス、水面、エフェクトには使えません |
| Masked(マスク) | 対応するが コストが高め 。大量の草木で使うときは注意 |
| World Position Offset | 複雑な変形はNaniteの最適化と相性が悪いことがあります |
| マテリアルの負荷 | Naniteが解決するのは ジオメトリだけ 。重いシェーダーは重いまま |
| ディスク容量 | 元の 2〜3倍 に増えることがあります |
| マテリアルID | 1メッシュあたり 最大64 |
「Naniteにしたらメッシュが消えた」 。この場合、原因はほぼ確実にTranslucentマテリアルです。ガラスや水を含むモデルは、その部分だけNaniteを使わない構成にします。
そしてもう1つ、誤解されやすい点です。 Naniteはジオメトリの問題を解決する仕組みであって、マテリアルは別問題 です。数百万ポリゴンが軽く動いても、そこに重いシェーダーを乗せればフレームレートは落ちます。
Skeletal Meshへの対応 は、UE 5.4で実験的に導入され、 5.5で安定化 しました。ただしモーフターゲットやクロスシミュレーションには制限が残ります。
そして 草木(Foliage)については、後のバージョンで専用の仕組みが追加されました 。上の表にある「Maskedはコストが高め」という制限は、大量の葉をMaskedマテリアルで描くことが前提でした。新しい方式では葉の形そのものを別の持ち方で表現するため、森のような密度でもNaniteの恩恵を受けやすくなっています。 使えるかどうかはお使いのバージョン次第 なので、Project Settings → Rendering のNanite関連の項目を確認してください。
実践:ハイポリを並べて、効き方を見る
オープンワールドの岩場、廃墟の瓦礫、フォトグラメトリでスキャンした遺跡——「高精細なモデルを大量に置く」場面はどのジャンルでも出てきます。ここでは Naniteが実際に何をしているかを、目で確かめます 。
数字を眺めるだけでは腑に落ちません。 可視化モードで見る のがいちばん早い理解です。
再現用の準備: 三角形の多いStatic Meshを1つ用意します。フォトグラメトリ素材でも、Quixel Bridgeの岩でも構いません。
| 対象 | 設定 |
|---|---|
| ハイポリのStatic Mesh | 最初は Naniteオフ の状態から始めます |
| レベル | そのメッシュを 50個ほど 並べて配置 |
ステップ1:オフの状態を測る。 メッシュを並べたら、まず現状を記録します。
ビューポートでコンソール(` キー)を開き、stat unit を実行します。Draw(描画に使っている時間)の数値を控えておいてください。
ステップ2:Naniteを有効にする。 コンテンツブラウザでそのメッシュを右クリック → Nanite → Enable 。
処理が終わったら、もう一度 stat unit を見ます。 Draw の数値が下がっていれば 、効果が出ています。
ステップ3:可視化モードで中を覗く。 ここが本題です。ビューポート左上の View Mode(既定では Lit) をクリックし、 Nanite Visualization から表示を切り替えます。

| モード | 見えるもの | 見方 |
|---|---|---|
| Triangles | 三角形の密度 | 近くほど密、遠くほど疎 になっていれば正常 |
| Clusters | クラスタの分割 | 色ごとのまとまりが、距離で大きさを変える |
| Overdraw | 重なって描かれている量 | 紫が良好、オレンジが問題 |
Triangles にして、カメラを前後に動かしてみてください。 近づくと密度が上がり、離れると下がります。この変化が Naniteが毎フレームやっていること です。しかも Lit に戻すと、その変化はまったく見えません。
ステップ4:stat Nanite で数字も見る。 コンソールで stat Nanite を実行すると、実際に描画している三角形数やインスタンス数が表示されます。 元のメッシュの総ポ リゴン数より、ずっと少ない数 が出ているはずです。
これが「数十億ポリゴンでも動く」理由です。 持っているデータの量と、実際に描く量は別物 です。
うまくいかないときの切り分けです。
- メッシュが表示されない → マテリアルがTranslucentです。Opaqueに変えるか、Naniteをオフに
Nanite → Enableが出てこない → Static Meshではないか、対応していない形式です- 可視化モードで何も変わらない → そのメッシュがNanite化されていません。Static Mesh Editorで
Enable Nanite Supportを確認 Drawが下がらない → もともと三角形が少ないメッシュか、ボトルネックが別(マテリアルなど)にあります
ポイントは2つです。
- 持っているデータ量と、描く量は別: Naniteは「全部描く」のではなく「必要な分だけ描く」仕組みです。
stat Naniteの数字と元のポリゴン数を比べると、それが数字で確認できます - 効果を測るときは
Drawを見る:stat unitのGameはゲームスレッド、Drawが描画側 です。Naniteが効くのはこちらなので、比較する数値を間違えないようにします
ジオメトリを軽くしても重い場合、犯人はマテリアルかもしれません(→ マテリアル入門)。表示距離そのものを絞りたいなら LODとCulling が別の切り口です。
おまけ:先に知っておくと良いこと
Naniteにしてもコリジョンは別データです。 描画が軽くなっても、当たり判定は従来どおりSimple/Complexの設定に従います。「Naniteにしたから当たり判定も最適化された」ということはないので、コリジョンは変わらず自分で設計します(→ SimpleとComplexの使い分け)。
ディスク容量の増加は見込んでおく。 Nanite化するとメッシュのデータ量が2〜3倍になることがあります。1つ2つなら気になりませんが、プロジェクト全体で有効化すると、リポジトリのサイズにはっきり効いてきます。
古いプロジェクトでは、まずレンダリング設定を確認。 UE4から移行したプロジェクトなどでは、Naniteの前提となる設定(Shader Model 6 など)が揃っていないことがあります。Project Settings → Rendering を確認してください。
C++から状態を確認できます。
UStaticMeshComponent* MeshComp = FindComponentByClass<UStaticMeshComponent>();
if (MeshComp && MeshComp->GetStaticMesh())
{
const bool bNanite = MeshComp->GetStaticMesh()->IsNaniteEnabled();
UE_LOG(LogTemp, Log, TEXT("Nanite enabled: %s"), bNanite ? TEXT("Yes") : TEXT("No"));
}
大量のアセットに対して「Naniteが漏れていないか」を調べたいときに使えます。
まとめ
Naniteを使うと きに押さえる点は、この5つです。
| 観点 | 結論 |
|---|---|
| 何が変わるか | 手動LODが不要 、ポリゴン数の制約から解放 |
| 有効化 | インポート時/一括/個別の3通り。 迷ったらオン |
| 効くメッシュ | 三角形が多い・大量に置く・遮蔽が大きいもの |
| 最大の落とし穴 | Translucentは非対応 |
| 誤解しやすい点 | 解決するのは ジオメトリだけ 。マテリアルとコリジョンは別 |
そして理解の核心が1つ。 持っているポリゴン数と、実際に描くポリゴン数は違う ということです。ここが腑に落ちると、「数十億ポリゴン」という表現が誇張ではないことが分かります。
一度 Nanite Visualization の Triangles にして、カメラを動かしてみませんか?