Nanite アセンブリは、Nanite フォリッジシステムの主要なコンポーネントです。木の枝や葉など、複雑で繰り返し可能なジオメトリのレンダリングを効率的に処理するように設計されています。 これは、スケルタル メッシュとスタティック メッシュの両方に対する補足機能であり、小さく、高精細なパーツの「マイクロ インスタンス化」が可能です。
Nanite アセンブリは、Nanite フォリッジのレンダリング パイプラインの重要な部分です。 使用しないと、Unreal Fest The Witcher 4 テクニカル デモで見られたような広大な森をレンダリングする際に、ディスク容量やストリーミング メモリが不足します。
デモの上のシーンでは、最も大きな木のディスク容量は、3.5 ギガバイト (Gb)から、約 29 メガバイト (Mb) に減少しました。 あるビューの木 1 本のみのストリーミング メモリは、約 36 MB から約 2.7 MB に減少しました。 このような削減により、シーン内に数十種類の木のバリエーションを 50 万インスタンス配置し、それぞれの木が 100 万〜1,000 万ポリゴンの高精細であったとしても描画が可能になります。
Nanite アセンブリの仕組み
Nanite アセンブリは、Nanite フォリッジのビルドに使用するパーツ メッシュの集合です。 これは、単一のフォリッジ全体でインスタンス化された精細なメッシュです。 このインスタンスは、アセンブリのローカル空間内で位置、回転、スケールをトランスフォームさせます。 パーツを木の幹などのインスタンス化されていないベース メッシュと組み合わせることで、完全なフォリッジを作成できます。
スケルタル メッシュの場合、パーツは 1 つまたは複数のボーンにアタッチでき、個別のウェイトを設定することで変形を制御できます。 これにより、動的な風に反応するなど、スケルタル アニメーションに正しく反応する、精細なアニメーション化フォリッジを作成できます。
ランタイム時には、Nanite によってアセンブリの詳細度 (LOD) が動的に処理されます。 つまり、カメラの近距離では、アセンブリの個々のパーツは、そのジオメトリの詳細をすべて維持しながら、Nanite インスタンスとしてレンダリングされます。 画面上のオブジェクトが小さくなると、これらのパーツは簡素化されます。Nanite のレンダリング システムは、アセンブリ全体が単一の簡素化されたクラスタで表現されるまで、その複雑さをインテリジェントに軽減します。 これにより、最適なパフォーマンスが確保されます。
Nanite アセンブリ vs 標準インスタンス化
標準インスタンス化については、メモリのオーバーヘッドと、これらがレンダリングされる距離という、考慮すべき要素が複数あります。
標準インスタンス化では、広大な森で必要となるインスタンス化の量に対して、GPU シーン バッファに多大なメモリ オーバーヘッドが生じます。 これにより、近距離および遠距離でこれらのインスタンスをレンダリングすることになり、表示される各インスタンスでは、少なくとも 1 つのルート クラスタの描画が必要となります。 数千本の木に数千本の枝をインスタンス化する場合、非常に単純な状況であっても、高い詳細度を維持するために数百万ものクラスタをラスタライズする必要があります。
どちらの場合も、Naniteアセンブリはパフォーマンスと視覚的な忠実度の維持という点で、はるかに優れた処理能力を備えています。 アセンブリは単にマトリックスの大量配列であるため、インスタンスごとのオーバーヘッドははるかに軽いです。 パフォーマンスのトレードオフとして、インスタンスごとのデータを使用してマテリアル グラフで実行できるような処理が、Nanite アセンブリ パーツでは実行できなくなります。 ですが、これはビルド時にアセンブリ パーツのルート クラスタが結合され、アセンブリの最低解像度レベルが作成されるということでます。そのため、距離が離れると、アセンブリは単一のクラスタまで簡素化されます。これは、独自の内部の階層詳細度 (HLOD) を使用するのと似ています。
距離が離れると、個々のパーツ インスタンスのこれらの簡素化されたレベルは結合され、そのジオメトリはベース メッシュの一部として扱われます。つまり、パーツはインスタンスとしてのアイデンティティを失います。 このため、インスタンスごとのデータはアセンブリ パーツのマテリアル グラフには公開されません。
Nanite アセンブリ スケルタル メッシュの例
以下の例では、Skeletal Assembly (スケルタル アセンブリ) 木のベース メッシュの三角形 (幹と大きな枝) は、そのアセンブリ パーツ メッシュ (枝にアタッチされた小枝) への参照とともに、アセット自体に格納されています。 これらの小枝は、コンテンツ フォルダにある他の小さなスケルタル メッシュ アセットと同じです。
Skeletal Mesh Assemblies (スケルタル メッシュ アセンブリ) の場合、各パーツ インスタンスはベース メッシュのスケルトン上の 1 つまたは複数のボーンにバインドされ、そのピボットはベース メッシュとともにアニメートされます。
この時点で、スケルタル アセンブリ パーツの頂点はスキン処理されないため、バインド ポーズでのみ剛的にアニメートされます。
Nanite アセンブリを作成する
Unreal Engine には、Nanite アセンブリのインポートやエディタ内での作成に役立つ、実験的なプラグインがいくつか含まれています。 以下のプラグインがあります。
| プラグイン名 | 説明 | |
|---|---|---|
Nanite Assembly Editor Utilities (Nanite アセンブリ エディタ ユーティリティ) | これは、ブループリントから Nanite アセンブリを作成するために使用します。 エディタのブループリントに機能を公開し、スタティック アセンブリとスケルトン アセンブリを作成します。 | |
Procedural Content Generation Framework (PCG) Nanite Assemblies Intero (プロシージャル コンテンツ生成フレームワーク (PCG) Nanite アセンブリの相互運用) | これは、PCG グラフからスタティック メッシュ Nanite アセンブリ用のアセンブリを生成するために使用します。 | |
Procedural Vegetation Editor (プロシージャル植生エディタ) | これは、高品質の Nanite 対応植生をエディタ内で直接作成するために使用する、グラフ ベースのエディタです。 これは、実世界の植物の原理を応用し、異なる種類の植生にカスタマイズしてバリエーションを持たせ、自然の成長パターンを再現します。 | |
USD Importer (USD インポーター) | Nanite アセンブリは、USD ファイルから直接インポートできます。 アセンブリ作成用のスキーマは、USD Core プラグインに含まれています。 |
USD を使用して Nanite アセンブリをインポートする
USD Importer (USD インポーター) プラグインを使用して、USD ファイルから Nanite アセンブリを Unreal Engine にインポートできます。 アセンブリの作成に関連するスキーマは、USD Core (USD コア) プラグインに含まれています。 これには、NaniteAssemblyRootAPI、NaniteAssemblyExternalRefAPI、NaniteAssemblySkelBindingAPI があります。
このスキーマの使用方法の詳細は、ソース コード内で提供されるドキュメントを参照してください。
エディタ内作成に Nanite アセンブリ エディタ ユーティリティを使用する
エディタでは、Nanite Assembly Editor Utilities (Nanite アセンブリ エディタ ユーティリティ) プラグインを使用してアセンブリを作成できます。 このプラグインは UNaniteAssemblyStaticMeshBuilder および UNaniteAssemblySkeletalMeshBuilder をブループリントに公開し、既存のアセットからアセンブリを作成する、強力な方法を提供します。
このプラグインには、レベル エディタのスクリプト アクションも含まれており、以下の操作を実行できます。
レベル エディタで選択したスタティック メッシュからスタティック メッシュ アセンブリを作成する。
スケルタル メッシュ アクタとそれにアタッチされたスケルタル メッシュ コンポーネントからスケルタル メッシュア センブリを作成する。
エディタ内作成にプロシージャル植生エディタを使用する
Procedural Vegetation Editor (プロシージャル植生エディタ) (PVE) は、Unreal Engine および Procedural Content Generation (プロシージャル コンテンツ生成) (PCG) フレームワークに統合されている、強力なグラフベース ツールです。 これにより、ユーザーは高品質の Nanite 対応植生アセットをエディタ内で直接作成することができます。 PVE は実世界の植物の原理を利用し、ホルモンの分布と適応応答に基づいて植物の生成をシミュレートします。
このツールと使用方法の詳細は、「プロシージャル植生エディタ」を参照してください。
既知の制限事項
現在、注意すべき制限事項があり、以下のとおりです。
他のアセンブリのアセンブリを作成できない。 現在、システムでサポートされているのは、単一レイヤーのインスタンス化です。
同じパーツ メッシュを参照するアセンブリ間で、ジオメトリは複製されない。 各アセンブリは、パーツ データの独自のコピーを格納します。
スケルタル メッシュでは、個々のパーツにポーズを設定することはできません。パーツのレンダリングはそのバインド ポーズでのみ行われます。
今後のアップデートでは、個々のパーツのインスタンス化アニメーションのサポートが追加される予定です。