Geometry Scripting のユーザー ガイド

Geometry Scripting 関数とブループリント ノードの使用方法に関するガイドです

Geometry Scripting とは?

Geometry Scripting は、Unreal Engine のプラグインです。Geometry Scripting には、ブループリント (BP) や Python を使用してメッシュ ジオメトリを生成および編集できる一連の関数ライブラリが含まれています。利用可能なすべての関数を表示するには、「ジオメトリ スクリプト処理のリファレンス」を参照してください。

Geometry Scripting の UFunctions およびブループリント ノードは、UDynamicMesh オブジェクトで動作します。このオブジェクトは、FDynamicMesh3 C++ 三角ポリゴン メッシュ データ構造を使用して作成されるオブジェクトです。このデータ構造は、Geometry Processing プラグインおよび モデリング エディタ モードで使用されるデータ構造と同じです。

エディタ ユーティリティ ウィジェットアセット アクション で Geometry Scripting を使用すると、カスタム メッシュ解析/処理/編集ツールを作成することができます。また、Geometry Scripting を アクタ ブループリント で使用して、プロシージャル オブジェクトを作成して、複雑なジオメトリ クエリを実装することもできます。

Geometry Scripting は次をはじめとする幅広い用途で使用できます。

  • サードパーティ メッシュ インポータのテストおよび品質分析。

  • メッシュ UV を分析して、無駄なテクスチャ空間を含むアセットを特定する。

  • プロダクション ワークフローのためのメッシュ アセットのスクリプト化されたマージ。

  • Lyra サンプル ゲーム で使用されているレベル デザイン ツール オブジェクトなどのプロシージャル メッシュ アクタ。

プラグインを有効にする

Geometry Scripting を利用するには、関連付けられたプラグインを有効にする必要があります。

プラグインを有効にするか、すでに有効になっていることを確認するには、次の手順に従います。

  1. メニュー バー で、[Edit (編集)] > [Plugins (プラグイン)] を選択します。

  2. 検索バーに、「geometry script」と入力します。

    Enable Geometry Scripting Plugin

  3. Geometry Script プラグインを有効にし、ダイアログのポップアップで、[Yes (はい)] を選択します。

  4. エンジンを再起動します。

Dynamic Mesh オブジェクト

Geometry Scripting は、次の複数の新しいオブジェクト タイプで動作します。

  • UDynamicMesh

  • UDynamicMeshComponent

  • ADynamicMeshActor

スタティックメッシュ、スタティックメッシュ コンポーネント、およびスタティックメッシュ アクタ アーキテクチャと同様に、これらのクラスは厳密には Geometry Script プラグインの一部ではありません。そのため、これらのクラスは、Geometry Framework エンジン モジュール内に格納されており、Geometry Scripting とは独立して使用することができます。

ダイナミック メッシュ

Geometry Scripting を使用可能にするコア コンポーネントは UDynamicMesh オブジェクトです。この UObject は、特定のコンポーネントに関連付けられていないメッシュ データ構造用のコンテナです。これは、明示的なシーン表現を使用することなくメッシュ ジオメトリを作成および操作できるという点で、UProceduralMeshComponent などのこれまでの Unreal Engine のアプローチとは異なります。

たとえば、UDynamicMeshUStaticMesh アセットに基づいて初期化および編集してから、アセットに再度格納することができます。ユーザー インターフェースを提供するエディタ ユーティリティ ウィジェットと併用することで、テクニカル アーティストはブループリントでカスタマイズされた専用のメッシュ編集ツールを作成したり、Python を使用してメッシュ アセットのクエリおよび編集操作をスクリプト化したりすることができます。

また、ゲームプレイ ボリュームなど、エディタのその他の各種メッシュ ジオメトリも UDynamicMesh との間で変換することができます。

ダイナミック メッシュ コンポーネント

UDynamicMesh に加えて、UDynamicMeshComponent も「リアル」 (一時的でなく、シリアル化可能) コンポーネントに昇格されました。このコンポーネントは、UProceduralMeshComponent に類似しているものの、UDynamicMesh によってサポートされているため、ジオメトリ スクリプトで操作することができます。

UDynamicMeshComponent は、メッシュ編集のリアルタイム プレビューを提供するために使用されるメッシュ モデリング ツールセットの一部として過去数年にわたり開発されてきました。UDynamicMeshComponent は、UProceduralMeshComponent と同様に、メッシュ ジオメトリの更新をサポートしており、頂点属性の更新だけでなく、メッシュ トポロジ全体の作成と変更にも対応しています。これはエディタ内とランタイム時の両方で実行できます。

レイ トレーシングはサポートされていますが、Nanite と Lumen はサポートされていません。

ダイナミック メッシュ アクタ

ADynamicMeshActor は、基本的に UDynamicMeshComponent のコンテナであるという点では、AStaticMeshActor と似ています。ただし、ダイナミック メッシュ アクタは、UDynamicMesh に基づくプロシージャル メッシュの生成を実装したいアクタ ブループリントに対して、固有のサポートを提供しています。

ダイナミック メッシュ アクタを使用し、Geometry Scripting およびモデリング モード ツールは、ボリュームに加えてどちらのタイプのメッシュ アクタも作成および編集できるようになりました。

生成済みダイナミック メッシュ アクタ

AGeneratedDynamicMeshActorADynamicMeshActor のサブクラスで、ブループリントに基づくプロシージャル メッシュ アクタを実装するための追加サポートを提供します。具体的には、このクラスは、ブループリント サブクラスで実装可能な関数 On Rebuild Generated Mesh を提供します。この関数は、コンストラクション スクリプト に代わって、メッシュを生成することができます。この関数により、エディタ内でのインタラクティブなパフォーマンスが向上します。さらに、将来的にはより慎重に管理された大規模なプロシージャル ジオメトリの生成につなげることができます。

Event On Rebuild Generated Mesh は、GeneratedDynamicMeshActor クラスから派生したアクタ ブループリントにのみ存在します。また、Generated Dynamic Mesh Actor 関数は、現時点ではエディタ専用です。

UStaticMesh と UDynamicMesh の主な相違点

UStaticMesh と異なり、UDynamicMesh はアセットではありません。UDynamicMeshComponent は、UStaticMesh のように複数のコンポーネント間で共有されるのではなく、その UDynamicMesh を「所有」します。 この違いにより、たとえば、インスタンス化されたレンダリングを使用することはできません。

これは、ダイナミック メッシュが別のアセット ファイルではなく、レベルのみに格納されることを意味します。UDynamicMeshComponent を複製すると、メッシュの コピー が作成されます (インスタンスではなく新規メッシュが作成されます)。レベルまたはプロジェクト間での転送は、コピー&ペースト で実行する必要があります。

多くの点で、UDynamicMeshComponent は Autodesk 3ds Max、Autodesk Maya、Blender などのデジタル コンテンツ クリエーション (DCC) ツールのメッシュ オブジェクトに非常によく似た動作をします。この処理により、巨大なメッシュがレベル ファイルのサイズを大幅に増加させるという問題が発生する可能性があります。ただし、One File Per Actor (アクタあたり 1 つのファイル) を使用すると、メッシュ データがレベルではなく OFPA アクタ ファイルとともに格納されます (そのため、依然としてサイズが巨大になる可能性があるものの、別のファイルに保存される)。

関数パターン

ほとんどのジオメトリ スクリプトの関数/ノードは、以下に示す Apply Mesh Plane Cut ノードと同様の、きわめて標準的なパターンに従います。

最初の引数 Target Mesh は、操作によって編集される UDynamicMesh です。通常、Geometry Scripting の操作は新しいメッシュを作成するのではなく、入力メッシュを変更することで、一時的なメッシュ オブジェクトが複数作成されることを回避します。入力された UDynamicMesh は常に Target Mesh (同じ名前 == 同じオブジェクト) という名称の出力として返されます。この設定により、より簡単に複数の操作を順番に処理することができます。

Geometry Scripting ノードには、多くのパラメータと設定があります。よく使用されるオプションは引数として公開されています。ただし、その他のオプションは操作固有の オプション 構造体を介して提供されます。適切なオプション構造体を作成するもっとも一般的な方法は、空の Options ピンをドラッグすることです。さらに、以下のように、Options ピンを右クリックして、[Split Struct Pin (構造体ピンを分割)] コンテキスト メニュー項目を使用すると、ノード内のオプション構造体を直接展開することができます。

ほとんどのノードには、メッシュ ジェネレータのジオメトリ デバッグのサポートを提供する Debug ピンもあります。このピンは積極的に使用されるものではありませんが、将来の機能のためのプレースホルダです。

UDynamicMesh プールを使用する

メイン メッシュから減算されるプリミティブ メッシュを使用するなど、メッシュ ジェネレータ内で一時的なメッシュを作成することはよくあります。このためには、一時的な UDynamicMesh が必要です。一時的な UDynamicMesh は Construct Object From Class 関数を使用して作成できますが、使用後にそのメッシュをガーベジ コレクトする必要があります。ただし、ジェネレータが頻繁に実行される場合は、複数回の実行でメッシュを再利用する方が効率的です。

ダイナミック メッシュ アクタは、UDynamicMeshPool を使用して、これに対応するためのビルトインのサポートを備えています。この設定は、Allocate Compute Mesh を呼び出して一時的なメッシュを取得してから、ブループリントの実行パスが終了する前の任意の箇所でそれを解放することで使用することができます。各一時的なメッシュは Release Compute Mesh を使用するか、Release All Compute Meshes を呼び出すことで、明示的に解放できます。これにより、現在割り当てられている一時的なメッシュをプールから解放します。

エディタ ユーティリティ ウィジェットには、メッシュを割り当てるためのデフォルトのダイナミック メッシュ プール インスタンスはありません。ただし、Create Dynamic Mesh Pool を使用して、このインスタンスを (エディタ ユーティリティ ウィジェットまたはユーティリティ ブループリントの変数などとして) 作成できます。

プロシージャル メッシュを作成する

説明したように、Geometry Scripting の使用例の 1 つに、アクタ ブループリントを使用してプロシージャル メッシュを作成するという使用例があります。以下の例で、Generated Dynamic Mesh Actor の BP サブクラスを使用した例を示します。Event On Rebuild Generated Mesh は、UDynamicMeshComponentUDynamicMesh を追加します。UDynamicMesh は、Geometry Scripting 関数の Append Box に渡され、入力変数に基づいてメッシュが作成されます。

このスクリプトは、パラメトリック ボックス プリミティブ メッシュをパラメータとともに作成し、アーティストは数個の BP ノードのみを使用し、そのパラメータをエディタ内で調整できます。ノードを追加することで、はるかに複雑なメッシュ ジェネレータをブループリントで直接作成することができます。このスクリプトを拡張し、Geometry Scripting の学習を続けるには、「ブループリントによるジオメトリ スクリプト処理」を参照してください。

Procedural Mesh with Geometry Scripting

追記

特定の関数が存在するかどうかを確認するには、「ジオメトリ スクリプト処理のリファレンス」のドキュメントを参照してください。

一部の関数 (Apply PolyGroup Catmull Clark SubD など) はエディタ専用です。この設定が意味するのは、これらの関数は、エディタ ユーティリティ アクタ/アクション/ウィジェット、または Generated Dynamic Mesh Actor の BP サブクラスでのみ使用できるということです。

Geometry Scripting 関数の多くは UDynmicMesh オブジェクトでのみ機能します。これらは、内部メッシュ表現をスタティックメッシュ、スケルタルメッシュ、またはボリュームアクタから UDynamicMesh に変換したり、変換を元に戻したりするための関数です。ランドスケープ、ジオメトリ キャッシュまたはコレクション、グルーム、クロスなど、その他のジオメトリ タイプ向けの関数はありません。

現時点では、UDynamicMeshComponent では次の機能はサポートされていません。

  • Nanite

  • Lumen

  • メッシュ距離フィールド

  • LOD (詳細度)

  • インスタンス化されたレンダリング

アクタのブループリントおよびエディタ ユーティリティ ブループリントは、常にゲーム スレッドで実行されるため、呼び出される Geometry Scripting 関数もゲーム スレッドで実行されます。一部の Geometry Scripting 関数は、C++ の呼び出しから ParallelFor、Async、UE::Tasks::Launch() など、内部のタスク スレッドでタスクの一部を処理します。ただし、これは単一の関数のコンテキストでのみ発生し、関数はそのすべての並列処理が完了するまで復帰しません。

Unreal Engine のドキュメントを改善するために協力をお願いします!どのような改善を望んでいるかご意見をお聞かせください。
調査に参加する
キャンセル