プロシージャル コンテンツ生成フレームワーク (PCG:Procedural Content Generation Framework) は、Unreal Engine 内で独自のプロシージャル コンテンツおよびツールを作成するためのツールセットです。PCG は、迅速で反復的なツールと、建造物やバイオームの生成といったアセット ユーティリティから、ワールド全体に至るまでのあらゆる複雑度のコンテンツをビルドする機能を、テクニカル アーティスト、デザイナー、およびプログラマーに提供します。
重要な概念と用語
- ポイント:PCG グラフによって生成される 3D 空間内の位置。多くの場合、メッシュのスポーンに使用されます。ポイントは、トランスフォーム、境界、色、密度、スティープネス、シードに関する情報を含んでいます。ポイントにはユーザー定義属性を割り当てることができます。
- Point Density (ポイント密度):各種グラフ ノードで使用される値。これは、デバッグ ビューでは、各ポイントのグラディエントとして表されます。密度が 0 の場合は黒で、1 の場合は白です。
必要な設定
プロシージャル コンテンツ生成フレームワークは、プロジェクトで Procedural Content Generation Framework プラグインが有効になっている必要があります。プラグインを有効にする方法の詳細については、「プラグインを操作する」を参照してください。
スタティックメッシュ上のポイントをサンプリングするには、Procedural Content Generation Framework Geometry Script Interop プラグインが必要です。
プロシージャル ノード グラフ
プロシージャル ノード グラフは、プロシージャル コンテンツ生成フレームワークの中心的な構成要素です。
マテリアル エディタと同様の形式を使用して、空間データがレベル内の PCG コンポーネントからグラフに入力され、ポイントの生成に使用されます。ポイントは、一連のノードを使用してフィルタして、変更され、アウトプットはリアルタイムで更新されます。生成されたポイントは、各種アセットのスポーンに使用することができます。
PCG Graph アセットを作成する
PCG Graph アセットを作成するには、次の手順を実行します。
- コンテンツ ドロワー または コンテンツ ブラウザ 内を右クリックして [Create Advanced Asset (高度なアセットの作成)] > [PCG] に移動し、[PCG Graph (PCG グラフ)] を選択します。
- 新しいアセットの名前を選択して、Enter キーを押します。
PCG グラフを編集する
PCG グラフ エディタを使用して、PCG Graph アセットを設定および編集することができます。エディタの操作は、ブループリントまたはマテリアル エディタに似ています。また、いくつかの PCG 固有のツールやパネルも含まれています。
番号 | 説明 |
---|---|
1 | ノード パレット |
2 | デバッグ ドロップダウン |
3 | ビューポート |
4 | Details (詳細) パネル |
5 | 属性リスト |
ブループリントでの作業と同様に、ノード パレットからビューポートにノードをドラッグするか、コンテキスト メニューを使用して、グラフにノードを追加することができます。
グラフが PCG コンポーネントに接続され、コンテンツの生成に使用されている場合は、PCG グラフに行われた変更が、エディタのビューポートでリアルタイムに更新されます。
PCG ノード
PCG グラフは、一連の PCG ノードで構成されており、各ノードが最終結果に貢献する演算を実行します。
これらのノードは、次のカテゴリに分かれています。
カテゴリ | 説明 |
---|---|
Blueprint (ブループリント) | ブループリント関連のノードが含まれます。これには、PCGBlueprintElement から派生したユーザー ブループリントを実行するための一般的なノードが含まれます。 |
Color (カラー) | ポイント上の色に影響を与えるノードが含まれます。 |
Debug (デバッグ) | デバッグに役立つノードが含まれます。 |
Density (密度) | ポイントの密度に影響するノードが含まれます。 |
Filter (フィルタ) | 基準に基づいて、またはポイント単位でデータをフィルタするノードが含まれます。 |
IO | 外部データとのインタラクションを制御するノードが含まれます。 |
Metadata (メタデータ) | ポイントの属性であるか、属性セットの属性であるかを問わず、属性を操作するノードが含まれます。 |
Params (パラメータ) | アクタまたはブループリント変数からのパラメータの取得を制御するノードが含まれます。 |
Sampler (サンプラ) | ボリューム、サーフェス、メッシュなど、空間データのソースからポイントを生成するノードが含まれます。 |
Spatial (空間) | データ間の空間的な関係を作成したり、内部の空間データを変更したり、データを取得したりするノードが含まれます。 |
Spawner (スポナー) | 新しいデータを作成したり、指定された位置にアクタを配置したりするノードが含まれます。 |
Subgraph (サブグラフ) | サブグラフの使用を処理するノードが含まれます。 |
Transforms (トランスフォーム) | ポイント上のトランスフォーム情報を変更するノードが含まれます。 |
ブループリントと同様に、グラフの可読性を高めるために、コメント と Reroute ノード を追加することができます。
PCG コンポーネント
PCG コンポーネント プロシージャル ノード グラフは、PCG コンポーネントを使用してレベルをサンプリングすることができます。このコンポーネントは、プロシージャル ノード グラフのインスタンスを保持し、エディタとランタイム時の両方で、プロシージャル コンテンツの生成を管理します。 PCG コンポーネントは、アクタにコンポーネントとして追加したり、PCG ボリュームの一部として使用します。PCG ボリュームはプロシージャル コンテンツをすばやく設定するうえで役立つ基本ボリュームです。
PCG グラフを PCG コンポーネントに接続するには、次の手順を実行します。
- エディタのビューポートまたは アウトライナー で、接続先の PCG ボリューム または ブループリント クラス を選択します。
-
[Details] パネルで、[PCG Component (PCG コンポーネント)] をクリックします。
-
[Graph (グラフ)] ドロップダウンをクリックして、使用したい PCG ノード グラフを選択します。
-
[Generate (生成)] ボタンをクリックして、結果を確認します。
PCG でデバッグを行う
デバッグは、PCG ワークフローに欠かせないプロセスです。
各ノードには、PCG グラフの各ステップでポイント データを視覚化するために使用できる、次のデバッグ オプションがあります。
- Debug Rendering (デバッグ レンダリング)
- Enable / Disable node (ノードの有効化/無効化)
- Inspect (調査)
ノードの [Details] パネルで [Debug (デバッグ)] チェックボックスをオンにするか、D キーを押して、各ノードで [Debug Rendering] のオン/オフを切り替えます。
各ノードの有効/無効を切り替えるには、ノードの [Details] パネルで [Enabled (有効)] チェックボックスをオンにするか、E キーを押します。
また、ノードを調べることで、ノードが生成するすべてのポイントを 属性 リストに表示することができます。
[Debug] ドロップダウン メニューから PCG コンポーネントを選択します。次に、ビューポートで調べたいノードを右クリックし、[Inspect] を選択します。または、A キーを押すこともできます。
シンプルな森林ボリュームを作成する
プロシージャル生成ツールの一般的な使用例は、オープンなワールド環境でのバイオームの生成です。
基本的な森林バイオーム ジェネレータを作成するには、次の手順を実行します。
このサンプルでは、マーケットプレイスでダウンロードした Megascans Trees:セイヨウシデ コレクションのマテリアルとスタティックメッシュを使用しています。
レベルを作成する
- Unreal Engine で 新規プロジェクトを作成 します。
- [Basic (基本)] レベル テンプレートを使用して、新しいレベルを作成 します。レベルを保存します。
- Floor スタティックメッシュを削除し、ランドスケープ モードを使用して、レベルに 新しいランドスケープを追加 します。
-
スカルプト ツールを使用して、ランドスケープにバリエーションを加えます。
PCG ボリュームを作成する
- [Selection Mode (選択モード)] に戻り、表示されていない場合は [Place Actors (アクタを配置)] ウィンドウを有効にします。
-
クラス検索 ボックスを使用して、PCG Volume を見つけ、レベルに 1 つ追加します。
- PCG ボリュームを X=8.0、Y=8.0、Z=8.0 にスケールします。
PCG Graph アセットを作成する
- コンテンツ ドロワー または コンテンツ ブラウザ 内を右クリックして [Create Advanced Asset] > [PCG] に移動し、[PCG Graph] を選択します。
- 新しいアセットに「PCG_ForestGen」という名前を付けて、Enter キーを押します。
- PCG_ForestGen をダブルクリックして、PCG グラフ エディタを開きます。
PCG コンポーネントを接続する
- エディタのビューポートまたは アウトライナー で、[PCG Volume] を選択します。
- [Details] パネルで、[PCG Component] をクリックします。
-
[Graph] ドロップダウンをクリックし、リストから PCG_ForestGen を選択します。
ポイントを作成する
- PCG グラフ エディタ ウィンドウで、Surface Sampler ノードをグラフに追加します。
-
Input ノードの下向き矢印をクリックして展開し、Landscape アウトプットを Surface Sampler の Surface インプットに接続します。
- Surface Sampler を選択し、D キーを押して、デバッグ レンダリングに切り替えます。
- エディタのウィンドウに戻り、PCG ボリュームを選択して、[Details] パネルの [Generate] ボタンをクリックします。
これで、エディタのビューポートに生成されるポイントが表示されるようになりました。ポイントは、ランドスケープの形状に一致しています。
バリエーションを加える
- PCG グラフ エディタで、Surface Sampler を選択します。
- [Details] パネルで Points Per Square Meter、Points Extents、Looseness の各プロパティを調整して、ポイントを追加します。
- [Points Per Square Meter] を「0.15」に調整すると、空間にさらにポイントが追加されます。
- Points Extends プロパティは、各ポイントの境界の大きさを制御します。[X]、[Y]、[Z] の値をそれぞれ「50」に変更します。
- Looseness プロパティは、生成されたポイントがグリッド形状にどれだけ忠実に一致しているかを決定します。Looseness の値は 1.0 のままにします。
-
次に、Transform Points ノードを追加します。このノードは、定義された範囲でポイントに追加の移動、回転、およびスケールの変更を行います。Surface Sampler ノードの Output ピンを Transform Points ノードの Input ピンに接続します。
- Surface Sampler ノードで [Debug Rendering] を無効にし、Transform Points ノードで [Debug Rendering] を有効にします。
-
回転にバリエーションを加えるには、[Max Rotation (最大回転)] の [Z] 値を「360」に変更します。これにより、すべてのポイントが 0~ 360 度の間でランダムに回転するようになります。
- PCG グラフはポイントをスポーンし、ランドスケープの通常の方向と一致するようにポイントを回転させます。[Absolute Rotation (絶対回転)] チェックボックスをオンにすると、この追加の回転を無効にすることができます。
-
サイズにバリエーションを追加するには、[Scale Min (スケール最小)] の [X]、[Y]、[Z] の値をそれぞれ「0.5」に変更します。[Scale Max (スケール最大)] の [X]、[Y]、[Z] の値をそれぞれ「1.2」に変更します。
最終結果では、十分なバリエーションを備える一連のポイントが生成されます。
スタティックメッシュをスポーンする
-
PCG グラフ エディタで、Static Mesh Spawner ノードをグラフのビューポートに追加します。Transform Points ノードの Output ピンを Static Mesh Spawner の Input ピンに接続します。
- Static Mesh Spawner を選択します。
- [Details] パネルで、[Mesh Entries (メッシュ エントリ)] オプションを特定し、[+] ボタンをクリックして、スポーンするスタティックメッシュを追加します。
- [Mesh Entries] の横にある下向き矢印をクリックして、配列を開きます。
- [Index [0]] の横にある下向き矢印をクリックします。
- [Descriptor (記述子)] の横にある下向き矢印をクリックします。
-
[Static Mesh (スタティックメッシュ)] のドロップダウン メニューをクリックして、スポーンしたい樹木を選択します。この例では、SM_EuropeanHornbeam_Forest_01 を使用しています。
配列内の各メッシュ エントリの Weight プロパティを使用して、スタティックメッシュを追加することで、バリエーションのバランスをとることができます。Unreal Engine は、すべてのスタティックメッシュ エントリのウェイト値を加算し、その数値をそれぞれのウェイトで除算して、各エントリがスポーンする確率を決定します。