Chapter 42

【UE5】Naniteとは?使い方も解説!

daichi_gamedev
daichi_gamedev
2021.08.23に更新

https://www.youtube.com/watch?v=XVF3FYsXemM&list=PLXqaLlKoiVUQm_aR5aIr7XGv-cRKGCXXj&index=6

Naniteとは?

Naniteとは3Dモデルを効率的かつ高速にレンダリングする高性能なシステムで、LODを自動で行ってくれます

LODとはLevel Of Detailの略で、ゲーム内の3Dモデルをそのままのポリゴンで描画すると重くなってしまうので、同じオブジェクトでポリゴン数が異なる3Dモデルを何パターンか用意して、カメラの距離によってモデルを差し替えて低負荷で描画する方法です。今までは手動で行うのが常識だったのでかなり手間がかかる作業でした。LODイメージ↓


「LODで負荷を軽減させて60FPSを死守する」より

ですが、そのLODがNaniteによって自動化され、さらに最低限の負荷になるよう計算されて効率よくレンダリングされます。これによりメモリとディスク領域の消費も削減されます。

Naniteを使ったYouTube

Naniteを使って超大量のオブジェクトをレンダリングしている動画です↓

https://www.youtube.com/watch?v=EgB4C1M6T-c&t=37s
Naniteを使用した熱帯雨林↓
https://www.youtube.com/watch?v=Xh6CkhOH1Nw&t=55s

Naniteの仕組み

Naniteは人間が知覚できる必要な部分だけを処理します。モニター画面の解像度に合わせて描画するため、ポリゴン数を画面のピクセル数を超える事はありません。例えばモニターが1920 x 1080だった場合2,073,600がピクセルになるのでそれ以上ポリゴンを描画しないという事です。

メッシュは三角形のポリゴンから成っており、ゲームではポリゴン数が多ければ多いほど負荷がかかります。Naniteを適用するとカメラから離れるにつれて、ポリゴン数を人間が知覚できない程度にまで少なく描画してくれます。近づくにつれて三角形のポリゴンが増えていき、より細かいディティールを表現しています。

カメラが近い時のメッシュ↓ポリゴン数が多くて細かく描画

カメラが離れた時のメッシュ↓ポリゴン数が少なくなって粗く描画

ちょっとわかりづらいですが、バナナのモデルが三角のポリゴンからなっているのがわかり、カメラを離れると遠いバナナから順に三角形が粗く少なくなっているのを表す色に変化していっています↓

Naniteの使い方

NaniteはNanite設定に切り替えるだけなのでとても簡単です。方法は二つあります。
一つ目の方法はアセットからスタティックメッシュを選択してNaniteからEnableを押す。

二つ目の方法はアセットのスタティックメッシュをダブルクリックして開いて、DetatisからNanite設定のEEnabledにチェックを入れtてApplyChangeをクリック

これらの方法だけでNaniteは使用できます。

Naniteを適用するべきメッシュは?

Naniteはスタティックメッシュに可能な限り有効にすべきと公式で記載されています。Naniteを有効にする事は可能なのはスタティックメッシュとジオメトリメッシュです。特にハイポリゴンのメッシュには適用した方がパフォーマンス的にかなり改善されます。

実際にNanite試してみた

QuixelBridgeでバナナをダウンロードして、Naniteを有効にして一万本設置してみました。ポリゴン数は合計で676万になります。

FPSの差はNaniteありでは97FPSで、Naniteなしだと66FPSでした。違いは歴然ですね


また、ただのLODと違ってモデルが切り替わる瞬間もNaniteでは見えないので、とても自然にレンダリングされます。

Naniteのメッシュを確認する方法

Naniteの描画はNaniteVisualization > Trianglesから確認できます。


カメラが移動するにつれてポリゴンが変化するのがわかります。また、Naniteに適用していないメッシュは表示されないので、Naniteのメッシュとそうではないメッシュを区別する事ができます。

Nanite対応プラットフォーム

現時点ではPlayStation5,XboxSeriesS|X、およびDirectX11または12のドライバーを使用したグラフィックカードを搭載しているPCのみの対応になっています。

著者コメント

NaniteについてはNanite公式ドキュメントで詳細を確認できます。本当にすごい機能ですね。UE5では使うしかない必須機能になっていくと思います🙄