ゲーム開発
Unity
UnrealEngine
C++
Blender
Houdini
ゲーム数学
ゲームAI
グラフィックス
サウンド
アニメーション
GBDK
制作日記
IT関連
ツール開発
フロントエンド関連
サーバサイド関連
WordPress関連
ソフトウェア設計
おすすめ技術書
音楽
DTM
楽器・機材
ピアノ
ラーメン日記
四コマ漫画
その他
おすすめアイテム
おもしろコラム
  • ゲーム開発
    • Unity
    • UnrealEngine
    • C++
    • Blender
    • Houdini
    • ゲーム数学
    • ゲームAI
    • グラフィックス
    • サウンド
    • アニメーション
    • GBDK
    • 制作日記
  • IT関連
    • ツール開発
    • フロントエンド関連
    • サーバサイド関連
    • WordPress関連
    • ソフトウェア設計
    • おすすめ技術書
  • 音楽
    • DTM
    • 楽器・機材
    • ピアノ
  • ラーメン日記
    • 四コマ漫画
      • その他
        • おすすめアイテム
        • おもしろコラム
      1. ホーム
      2. 20250504_01_ue_nanite_optimize

      【UE5.5】Nanite、Lumen、VSMの概要についてまとめる

      UnrealEngineグラフィックスHoudiniNaniteLumenVirtual Shadow Map最適化
      2025-05-12

      マイケル
      マイケル
      みなさんこんにちは! マイケルです!
      エレキベア
      エレキベア
      こんにちクマ~~~
      マイケル
      マイケル
      今回は久しぶりにUnrealEngine5を触ります! UE5の中でも特に強力なグラフィックス機能である、 Nanite、Lumen、VSMについて簡単に触れていきます。
      エレキベア
      エレキベア
      UE5の目玉となっていた機能クマね
      マイケル
      マイケル
      これらの機能を活用した CitySample なんかは一時期話題になったよね。 UE5のリアルタイムグラフィックスのクオリティの高さはこれらの技術により実現されているといっても過言では無いと思います。
      20250504_01_ue_optimize_01

      エレキベア
      エレキベア
      こんな大量のオブジェクトをリアルタイム描画できるなんてすごいクマ~~
      マイケル
      マイケル
      Nanite、Lumen、VSMの機能は相互に関係しあっていて、最適化含めグラフィックス機能を扱う上での知識として必要になります。 今回はそれぞれの機能の概要についてまとめて、雰囲気を掴んでみます!
      エレキベア
      エレキベア
      楽しみクマ~~~

      参考書籍・サイト

      マイケル
      マイケル
      Nanite関連について詳しく触れている書籍は多くなく、公式ドキュメント以外だと下記スライドを参考にさせていただきました。 いずれも同じ著者が書かれていて、頻繁な更新が行われる機能をこのようにまとめていただけているのは非常にありがたいです!
      エレキベア
      エレキベア
      丁寧に書いてくださってありがたいクマ~~~
      マイケル
      マイケル
      書籍に関しては、自分の把握している範囲だと下記で触れていました。 初めに触るとっかかりとしてよさそうだったので貼っておきます!

      Unreal Engine 5 リアルタイム ビジュアライゼーション 第2版

      マイケル
      マイケル
      またグラフィックス周りの最適化については、下記書籍内で具体例をいくつか記載されていてとても参考になりました。 読んだことが無い方はこちらも見てみることをおすすめします!

      背景アーティスト導きの書

      各機能の概要

      マイケル
      マイケル
      まずはざっくり、それぞれの機能概要を表でまとめてみました。 メリットや注意点、従来機能との比較はそれぞれ下記のようになります。
      Nanite、Lumen、VSMの機能概要
      機能
      〇 メリット
      △ 注意点
      Nanite
      ・仮想化ジオメトリストリーミングにより高精細なメッシュを描画する
      ・自動で最適な詳細度(LOD)描画を行う
      ・Opaque、Maskedマテリアル以外は非対応
      ・Masked、WPO使用マテリアルはパフォーマンスが悪い
      ・スケルタルメッシュ描画は5.5で実験段階
      ・シャドウマップ非対応(VSM推奨)
      Lumen
      ・ベイク無しで動的なGIを実現する
      ・Naniteジオメトリと相性が良い
      ・処理負荷が比較的高い
      ・残像が起きやすい
      Virtual Shadow Map (VSM)
      ・VirtualTextureの仕組みを活用することで質の高いシャドウ描画を行う
      ・Naniteジオメトリと相性が良い
      ・処理負荷が比較的高い
      Nanite、Lumen、VSMの従来機能との対応
      機能
      従来の機能
      〇 優位性
      Nanite
      ・LOD
      ・高ポリゴンのメッシュを最適化して描画できる
      ・メッシュ個別のLOD作成が不要
      Lumen
      ・Lightmapによる焼き付け
      ・Screen Space Global Illumination (SSGI)
      ・Path Tracer
      ・リアルタイムにGIが行える
      Virtual Shadow Map (VSM)
      ・シャドウマップ
      ・レイトレーシングのシャドウ
      ・距離フィールドシャドウ
      ・Lightmassによる自動計算されたシャドウ
      ・Naniteジオメトリに対応し、高品質
      エレキベア
      エレキベア
      従来の機能を置き換えるような形になるのクマね これはグラフィックス周りにおいてかなり影響が大きい話クマ
      マイケル
      マイケル
      それではこれらの機能を一つ一つ見ていきます!

      Naniteの概要

      Naniteとは

      マイケル
      マイケル
      改めてになりますが、Naniteは 仮想化ジオメトリストリーミングにより高精細(高ポリゴン)のメッシュを効率的に描画する仕組み になります。 Lumen、VSMの処理にも大きな影響を与えるため、中核となる機能といっても過言ではないと思います。
      エレキベア
      エレキベア
      仮想化ジオメトリストリーミングって何クマ?
      マイケル
      マイケル
      ざっくりいうと、メッシュを分割して構築した階層構造を用いて、リアルタイムに適した詳細度でポリゴンを描画する処理になります。 数百万レベルの高ポリゴンメッシュをリアルタイムにLOD制御してくれるようなイメージだね。
      20250504_01_ue_optimize_11
      ▲車のポリゴンメッシュを表した状態

      20250504_01_ue_optimize_12
      ▲遠ざかるとポリゴン数が削減されていることが確認できる

      エレキベア
      エレキベア
      そんな夢のような機能があるのクマね・・・ それがあればどんな重いメッシュも使い放題というわけクマか
      マイケル
      マイケル
      とはいえNaniteにも苦手なメッシュや非対応のものもあるため注意が必要です。 簡潔にまとめると下記のようになります。
      機能概要
      機能
      〇 メリット
      △ 注意点
      Nanite
      ・仮想化ジオメトリストリーミングにより高精細なメッシュを描画する
      ・自動で最適な詳細度(LOD)描画を行う
      ・Opaque、Maskedマテリアル以外は非対応
      ・Masked、WPO使用マテリアルはパフォーマンスが悪い
      ・スケルタルメッシュ描画は5.5で実験段階
      UEバージョンによる変遷
      UEバージョン
      変更点
      5.0
      ・Naniteの登場
      5.2
      ・Maskedマテリアル、WPOの対応
      5.3
      ・Nanite Tessellation (実験的機能)追加
      5.5
      ・SkeletalMeshへの対応(実験的機能)追加
      エレキベア
      エレキベア
      Makedマテリアル、WPOを使用したマテリアルはパフォーマンスが悪いのクマね 確かにこれは注意が必要そうクマ

      Naniteの処理内容

      マイケル
      マイケル
      Nanite及び仮想化ジオメトリがどのような処理になっているかというと、 メッシュをクラスタ単位に分割して階層構造を構築し、クラスタ単位で描画メッシュを切り替える ことでLODのような挙動を実現しているようです。 Nanite Visualizationから内容を確認することができ、CitySampleで区アスタとポリゴンを表示してみたものが下記になります。
      20250504_01_ue_optimize_04
      ▲CitySampleの例のシーン

      20250504_01_ue_optimize_05
      ▲Nanite Visualization > Clusters からクラスタを表示した状態

      20250504_01_ue_optimize_06
      ▲Nanite Visualization > Triangles から分割されたポリゴンを表示した状態

      エレキベア
      エレキベア
      カメラを動かすと動的に切り替わるのが確認できるクマね
      マイケル
      マイケル
      処理自体は高度な内容になるため深くは触れませんが、下記動画で細かい内容を解説しているようなので興味ある方は見てみると面白いかもしれません。

      参考: A Deep Dive into Nanite Virtualized Geometry | Youtube

      エレキベア
      エレキベア
      うーむ、中々難しい内容クマね・・・
      マイケル
      マイケル
      またProfilerで見た際にNanite処理がどこに当たるのかというと、主に下記4つが関係するようです。
      20250504_01_ue_optimize_13
      ▲ProfileGPUで見た状態、Naniteに関連する箇所は赤枠部分

      処理
      概要
      VisBuffer
      ・見えるメッシュのみに絞り、詳細度を決定する
      LumenSceneSceneUpdate
      ・LumenSceneの更新を行う
      BasePass
      ・VisBufferで求めた情報を元にMaterialを描画する
      ShadowDepths
      ・VSMの計算を行う
      マイケル
      マイケル
      実際に表示するメッシュを決定している部分はVisBufferの処理になっていて、Lumen、VSMにも影響していることが読み取れます。 この辺りは下記スライドで細かく解説いただいていました。

      参考: Unreal InsightsとProfileGPUから見るLumenとNanite + 5.4までのアップデート

      マイケル
      マイケル
      そしてその他、細かい情報を取得するためのコマンドが用意されています。 必要に応じて駆使するとよさそうです。
      • NaniteのShading情報表示
        • r.ShaderPrint 1
        • r.Nanite.ShowStats 1
      20250504_01_ue_optimize_07
      ▲Shading情報の表示

      • 追加のVisualize機能使用
        • r.Nanite.Visualize.Advanced 1
      20250504_01_ue_optimize_14
      ▲r.Nanite.Visualize.Advanced 1 に設定すると追加のVisualize機能が使用できる

      • ProfileGPUでシェーディング情報可視化
        • r.Nanite.ShowMeshDrawEvents 1
        • 各シェーディングパスもPrifileGPUで確認可能になるはずだが、UE5.4だと上手く確認できず・・・
      エレキベア
      エレキベア
      各状態を可視化してくれるのはありがたいクマね

      Naniteの設定方法

      マイケル
      マイケル
      Naniteの設定方法は簡単で、インポート時に「Build Nanite」を有効にするか StaticMeshEditor上でも有効にすることが出来ます。 各種設定もここから行えますね!
      20250504_01_ue_optimize_08
      ▲StaticMeshEditorからのNaniteの設定

      各項目の設定内容:
      Nanite のフォールバック メッシュと精度の設定

      マイケル
      マイケル
      複数アセットを一括で設定することも出来て、その場合ContentBrowserから選択した状態で右クリック > Nanite項目から行えます。
      20250504_01_ue_optimize_09
      ▲ContentBrowserからも設定が行える

      エレキベア
      エレキベア
      設定は本当に簡単クマね
      マイケル
      マイケル
      また余談になりますが、ContentBrowserからは「NaniteEnabled」でフィルタをかけることでNanite有効・無効アセットを一括で検索することも出来ます。
      20250504_01_ue_optimize_10
      ▲ContentBrowser上から「NaniteEnabled」でフィルタをかけることができる(Column表示にすると分かりやすい)

      エレキベア
      エレキベア
      ContentBrowser結構高機能クマね

      Nanite対応アセット

      マイケル
      マイケル
      こんなに便利なら全てNaniteアセットにすればいいのでは・・・?と思いますがそうはいきません。 UE5.5の現状はNaniteに対応されていないアセットもいくつかあるため、注意が必要です
      機能
      〇 使用可能
      △ 注意が必要
      × 使用不可
      ジオメトリ
      ・スタティックメッシュ
      -
      ・スケルタルメッシュ(※5.5から実験的機能として使用可能)
      マテリアル
      ・Opaqueマテリアル
      ・Maskedマテリアル
      ・WorldPositionOffset(WPO)使用マテリアル
      ・Opaque、Masked以外のマテリアル

      参考: Naniteのサポートされている機能 | Unreal Engine 5.5 ドキュメンテーション

      マイケル
      マイケル
      そしてNaniteがサポートされるプラットフォームにも指定があるためこちらも注意が必要です。 もし非対応環境もサポートする場合には、手動のLOD設定も視野に入れなければならなそうです。

      参考: サポートされるプラットフォーム | Unreal Engine 5.5 ドキュメンテーション

      エレキベア
      エレキベア
      こればっかりは悩ましいクマね・・・

      Nanite Tesselation (実験的機能)

      マイケル
      マイケル
      そして最後に紹介になりますが、UE5.3からは実験的機能として「Nanite Tesselation」という機能も追加されたようです。 こちらはディスプレイスメントマップを適用したメッシュをNaniteジオメトリとして扱うことが出来る機能になります。
      20250504_01_ue_optimize_02
      ▲Naniteテッセレーションを使用した例

      引用:Nanite テッセレーション | Unreal Engine 5.5 ドキュメンテーション

      20250504_01_ue_optimize_03
      ▲マテリアルからディスプレイスメントマップを接続する

      引用:Nanite テッセレーション | Unreal Engine 5.5 ドキュメンテーション

      エレキベア
      エレキベア
      おお~~これが出来ればマテリアルでいろいろ操作して遊べそうクマね
      マイケル
      マイケル
      導入方法については下記の記事で書いてくださっていたので、興味がある方はこちらも触ってみてください

      参考:
      [UE5]Nanite Tessellation を使ってみよう

      Lumenの概要

      Lumenとは

      マイケル
      マイケル
      次にLumenは、ベイク無しで動的なGI(関節光、リフレクション)を実現する機能になります。
      20250504_01_ue_optimize_16
      ▲Lumen無効

      20250504_01_ue_optimize_15
      ▲Lumen有効

      エレキベア
      エレキベア
      リアルアイムにGIクマか・・・ そんなこと本当にできるのクマ?
      マイケル
      マイケル
      事前の焼き付けが必要だったこれまでと比べたらすごいよね。 事前にLumenSceneと呼ばれる照明情報を作成してからライティングすることで実現していて、 処理負荷は比較的高いけど、Naniteメッシュと相性がよく効率的に構築することができるんだ。
      機能概要
      〇 メリット
      △ 注意点
      ・ベイク無しで動的なGIを実現する
      ・Naniteジオメトリと相性が良い
      ・処理負荷が比較的高い
      ・残像が起きやすい
      従来機能との対応
      従来の機能
      〇 優位性
      ・Lightmapによる焼き付け
      ・Screen Space Global Illumination (SSGI)
      ・Path Tracer
      ・リアルタイムにGIが行える
      エレキベア
      エレキベア
      Naniteがここにも効いているのクマね

      Lumenの処理内容

      マイケル
      マイケル
      Lumenの処理内容としては、LumenSceneという簡略化したシーンを構築してトレースすることで描画します。 ざっくりと下記のような流れになっています。
      • LumenSceneの構築
        • 各メッシュのカードを生成して照明計算を行う
        • 計算結果を元にメッシュorディスタンスフィールドを表示する
      • LumenSceneのトレース
        • 下記いずれかの方法でトレースを行う
          • Software RayTracing (ディスタンスフィールド)
          • Hardware RayTracing (メッシュ)
      マイケル
      マイケル
      LumenSceneは、Visualizationから表示できます。 SurfaceCacheを表示すると、計算できる部分などの表示も確認することが出来ます。
      20250504_01_ue_optimize_19
      ▲LumenSceneの表示

      20250504_01_ue_optimize_18
      ▲SurfaceCacheの表示(マゼンタ: 計算できない部分 黄色: SurfaceCacheに入っていないもの)

      エレキベア
      エレキベア
      事前に必要な情報を計算してからトレースを行うクマね
      マイケル
      マイケル
      細かい内容については下記スライドで紹介されていたのでご参照ください! こちらでは シーン全体のDeferred Rendering と例えられていて確かにと思いました。

      参考: Unreal Engine5 Lumenの仕組みと肝心なところ

      Lumenの設定方法

      マイケル
      マイケル
      Lumenは Project Settings > Rendering から有効にできます。 それに加えて GIのスケーラビリティ設定を High以上に設定するとゲーム内で有効になります。
      20250504_01_ue_optimize_20
      ▲Project Settings > Rendering から設定を行う

      参考:
      Lumen の設定 | Unreal Engine 5.5 ドキュメンテーション
      Lumen パフォーマンス ガイド - スケーラビリティ設定 | Unreal Engine 5.5 ドキュメンテーション

      エレキベア
      エレキベア
      ここでGIをどのように表現するかを設定できるのクマね
      マイケル
      マイケル
      プロジェクト設定は全体に設定されるけど、CineCameraやPostProcessでも設定出来るので 細かい調整が必要な場合にはこれらを使用しましょう。
      マイケル
      マイケル
      トレース方法としては Hardware RayTracingを使用すると綺麗に反射が表現できますが、対応機種は限定されるため注意が必要です。 こちらの挙動を確認したい場合、Project Settingsから「Support Hardware ray Tracing」「Use Hardware Ray Tracing When available」を無効にすることで、明示的に設定することができます。
      • トレース方法の種類
        • Software RayTracing
          • ディスタンスフィールドに対して行う
        • Hardware RayTracing
          • メッシュに対して行う
      20250504_01_ue_optimize_17

      対応条件参考:
      ハードウェア レイ トレーシング | Unreal Engine 5.5 ドキュメンテーション

      最適化の方法

      マイケル
      マイケル
      最後にLumenをどう最適化、調整すべきかについてですが 基本はスケーラビリティを変更することで大まかに変更しつつ、 それに加えてNaniteの設定を調整したり、Lumen解像度など細かい調整を行うことで最適化していくのがよいそうです。
      • 基本はスケーラビリティの設定
        • Epic: 30fps向け、High: 60fps向け
      • アセット側の対応
        • StaticMeshを出来るだけNanite化
        • Naniteの軽量化
        • Lumenカードをマージ
        • Lumenカードの解像度を下げる
        • Lumen計算の複数フレーム分散

      参考:
      Unreal InsightsとProfileGPUから見るLumenとNanite + 5.4までのアップデート
      Lumen パフォーマンス ガイド | Unreal Engine 5.5 ドキュメンテーション

      マイケル
      マイケル
      Nanite設定がLumenのパフォーマンスに影響を与えることを考えると、ポリゴン数が少ないメッシュでもNanite化しておくことは意味がありそうですね
      エレキベア
      エレキベア
      UE5以降のグラフィック最適化は、Naniteが主軸となりそうクマね

      Virtual Shadow Map (VSM)の概要

      VSMとは

      マイケル
      マイケル
      最後にNanite、Lumenと一緒に出てくることの多いVSMについてですが、こちらは Virtual Shadow Mapの略になります。 名前の通りVirtualTextureの仕組みを活用したShadowMapで、タイル状に並べた高解像度のShadowMapを使用することで、高品質なシャドウ描画を行うことが出来ます。

      参考:
      仮想シャドウマップ | Unreal Engine 5.5 ドキュメンテーション

      機能概要
      〇 メリット
      △ 注意点
      ・VirtualTextureの仕組みを活用することで質の高いシャドウ描画を行う
      ・Naniteジオメトリと相性が良い
      ・処理負荷が比較的高い
      従来機能との対応
      従来の機能
      〇 優位性
      ・シャドウマップ
      ・レイトレーシングのシャドウ
      ・距離フィールドシャドウ
      ・Lightmassによる自動計算されたシャドウ
      ・Naniteジオメトリに対応し、高品質
      20250504_01_ue_optimize_24
      ▲従来のShadowMap

      20250504_01_ue_optimize_21
      ▲VirtualShadowMap

      20250504_01_ue_optimize_23
      ▲タイル状に並べたShadowMapを使用する

      エレキベア
      エレキベア
      むむ、これもNaniteと相性がよい機能なのクマね

      VSMの処理内容

      マイケル
      マイケル
      VSMの処理内容としては、ざっくりと下記のようになります。
      • ShadowMapの作成
        • VirtualTextureを使用し、必要な場所に必要な解像度で作成する
      • ShadowMapの描画
        • Shadow Map Ray Tracing(SMRT)によりシャドウ描画を行う
      マイケル
      マイケル
      ShadowMapは、VirtualTextureを使用して画面に移った範囲に応じて必要な解像度で作成し、VirtualPageを表示することで確認できます。 この作成処理はNaniteメッシュを使用すると効率よく作成できるようです。
      20250504_01_ue_optimize_23
      ▲タイル状に並べたShadowMap

      20250504_01_ue_optimize_22
      ▲画面に映った範囲に応じて必要な解像度で描画する

      エレキベア
      エレキベア
      必要な箇所ほど高解像度で描画されるというわけクマね

      VSMの設定方法

      マイケル
      マイケル
      VSMの有効化に関しては、Project Settings > Rendering から切り替えることができます。
      20250504_01_ue_optimize_25

      エレキベア
      エレキベア
      Lumenと同じくプロジェクトの設定として設定できるクマね
      マイケル
      マイケル
      その他、細かい設定については r.Shadow.Virtual.XXX 形式のコンソールコマンドがいくつか用意されているようなので、こちらから調整しましょう。

      最適化の方法

      マイケル
      マイケル
      最適化の方法としては下記のような方法があります。 この中でキャッシュの確認については CachePageの表示で確認 することが出来るため、まずは無効になっているオブジェクトが無いか確認してみましょう。
      • キャッシュを無効化するオブジェクトを減らす
      • Distant Lights、Onepass Projectionを有効にする
      • LodBiasでShadowMapのLODを調整する
      • Max Physical Pagesを減らす

      参考:
      仮想シャドウマップ - キャッシュ | Unreal Engine 5.5 ドキュメンテーション

      20250504_01_ue_optimize_26
      ▲CachePageを表示すると、現在のCache状態が確認できる

      20250504_01_ue_optimize_27
      ▲r.shadow.virtual.showstats 1 でVSMの状態を確認することも出来る

      エレキベア
      エレキベア
      これでVSMもざっくり分かった気がするクマ~~~

      おわりに

      マイケル
      マイケル
      というわけでUE5のグラフィックス機能についてでした! どうだったかな?
      エレキベア
      エレキベア
      UEのグラフィックス機能がすごいのは知っていたクマが、改めて見るとメッシュ、ライティング、シャドウイングと常識を大きく覆す機能だったクマね 特にNaniteはそれぞれに影響を与えていて肝になると思ったクマ
      マイケル
      マイケル
      Naniteの影響が大きいから、最適化もこれまでのやり方とは大きく異なってくるね 素晴らしい機能とはいえ、現状だとまだ未サポートのメッシュもあったりするから、それらとこのグラフィックス機能のバランスを取って調整するスキルが必要そうだ!
      マイケル
      マイケル
      どちらにせよUEを触る以上は付き合っていかないといけない部分だから、メリット・デメリットを理解してガンガン活用していこう! それでは今日はこの辺で!アデューー!!
      エレキベア
      エレキベア
      クマ~~~~~~~

      【UE5.5】Nanite、Lumen、VSMの概要についてまとめる ~完~


      UnrealEngineグラフィックスHoudiniNaniteLumenVirtual Shadow Map最適化
      2025-05-12

      関連記事
      【Houdini20.5】主要な環境変数と設定方法についてまとめる【Windows/Mac】【Steam版】
      2025-05-05
      【Houdini20.5】観覧車をプロシージャルに作ってみる【SOP・VEX】
      2025-01-03
      【書籍紹介】「コンピュータグラフィックス」に出てくる用語をまとめる【CGエンジニア検定】
      2024-07-13
      【UE5】Niagara SimulationStageによるシミュレーション環境構築
      2024-05-30
      【Unity】Boidsアルゴリズムを用いて魚の群集シミュレーションを実装する
      2024-05-28
      【UE5】第三回 ミニゲーム制作で学ぶUnrealC++ 〜UI・仕上げ実装 編〜
      2024-05-18
      【UE5】第二回 ミニゲーム制作で学ぶUnrealC++ 〜キャラクター・ゲーム実装 編〜
      2024-05-18
      【UE5】第一回 ミニゲーム制作で学ぶUnrealC++ 〜UnrealC++の概要 編〜
      2024-05-18