UEでのプロシージャル生成 (PCG)の紹介

概要
こんにちは。Volca の Tsai です。
以前、「Nanite Tessellation を使ったディスプレイスメント表現」の使用方法についてご紹介しましたが、
今回はこのシーンで使用しているUEのPCG機能について紹介します!
PCGとは何か、よく使われるテクニックや、
実際の活用例について説明していきます。
プロシージャルコンテンツ生成 (PCG) とは?
簡単に言うと、PCG(Procedural Content Generation Framework)は
アルゴリズムによりコンテンツを自動的に生成するための技術のことです。
一つ一つのオブジェクトを手動で配置するのではなく、事前に定義したルールに基づいて大量のコンテンツを効率的に作り出します。
これは、ゲーム開発や環境アートにおいて非常に強力なツールで、
特に以下のような大量かつ複雑な環境アセットを作成する際に役立ちます。
例えば:
地形の植生:
森林、草地、岩などを自動で配置都市の建築物:
ルールに基づいて様々なスタイルの建物や都市のレイアウトを生成バイオーム (生態系):
地形や気候条件に応じて、異なる生態系を自動で作り出アイテムの配置:
シーン内に小道具や雑多なオブジェクトを自動で配置
といったような感じです。

Unreal EngineのPCGフレームワークの特長
主な特徴
ブループリントやマテリアルエディタに似たノードグラフシステム
ノード接続で、コンテンツの生成ルールやロジック(どこに、どれだけ、どのくらいの大きさで、どの向きで生成するかなど)を定義できる
ノードは、サンプラー, ポイント操作, フィルター, スポナーなど、様々なカテゴリに分かれている
効率的で反復的なコンテンツ作成、特に大規模なシーンにおいて、手動でオブジェクトを配置する時間を大幅に削減
パラメータやルールを素早く調整し、生成結果をリアルタイムでプレビューできるため、迅速なイテレーションが可能
柔軟性と制御性が高い
自動生成でありながら、パラメータ調整やルール定義を通じて、
全体をアーティスティックにコントロールできます。
既存のワークフローとの統合
PCGフレームワークは拡張性とインタラクティブ性を考慮して設計されており、既存のワールド構築ワークフローに容易に統合できます。
プロシージャルな手法と従来の手法との境界を曖昧にできます。
パフォーマンスの最適化
UEのバージョンアップ(例: UE 5.6)に伴い、
PCGフレームワークも継続的に最適化されており、
マルチスレッド実行やGPUアクセラレーションによるポイント散布など、
より複雑で大規模な環境を処理できるようになっています。
主要なノード
Surface Sampler
ランドスケープ表面に沿ってポイントを生成・制御するノード。
草・木など、独立した構造物の配置に使います。
活用例:
- 草木や石等の配置
- 整理されていない建築物の配置Spline Sampler
スプラインに沿ってポイントを生成・制御するノード。
道・川・配管など、線状の構造物に使います。
活用例:
- 道路やレールの生成
- フェンスや電線などの等間隔配置
- スプラインに沿って建物の配置をガイドするMesh Sampler
既存のメッシュの頂点やサーフェス属性(UV、法線、位置)などから
ポイントや情報を取得するノード。
活用例:
- 既存建物の形状に沿って装飾オブジェクトを配置
- メッシュ上の特定の部分(例:窓、ドア)にエフェクトを配置
- 頂点ごとのカラー情報などを使って配置の強弱を調整Density Filtering
生成されたポイントの密度(間隔)を調整するノード。
過密なポイントを削除したり、ランダム性を持たせるために使います。
活用例:
- 木を一定間隔で生やす
- ランダムに間引いて自然な配置に見せる
- 建物同士が密集しすぎないように調整Static Mesh Generator
ポイントから Static Mesh(静的メッシュ)をスポーンさせるノード。
回転・スケールなども制御可能です。
活用例:
- 森を生成(木のメッシュをポイントごとに配置)
- 街の建物をランダムに生成
- 岩や障害物をランダムスケールで生成Custom Blueprint Nodes
PCG グラフ内でブループリント関数を呼び出すことが可能。
カスタマイズ処理や独自ロジックに対応できます。
活用例:
- 特定の条件で建物のタイプを変更
- 標高や時間に応じた挙動の制御
- 自作のロジックをPCG内に組み込む




PCGの使用例
ここからは、PCGのSurface Sampler を使って簡単に茂みを作成する方法を解説します。
レベルを作成
Unreal Engine で 新規プロジェクトを作成
[Basic (基本)] レベル テンプレートを使用して、新しいレベルを作成 してレベルを保存
Floor スタティックメッシュを削除し、ランドスケープ モードを使用して、レベルに 新しいランドスケープを追加
スカルプト ツールを使用して、ランドスケープにバリエーションを加える

PCG ボリュームを作成する
先ずは編集からプラグインでProcedural content generation Framework(PCG機能)を追加しましょう。

2. [Selection Mode (選択モード)] に戻り、表示されていない場合は
[Place Actors (アクタを配置)] ウィンドウを有効にします。
3. クラス検索 ボックスを使用して、PCG Volume を見つけ、レベルに 1 つ追加します。


4. PCG ボリュームを X=25、Y=25、Z=25 にスケールします。

PCG コンポーネントを接続する
[Graph] ドロップダウンをクリックし、
リストから PCG_ForestGen を選択します。

ポイントを作成
1.PCG グラフ エディタ ウィンドウで、Surface Sampler ノードをグラフに追加します。
2.Input ノードの下向き矢印をクリックして展開し、Landscape アウトプットを Surface Sampler の Surface インプットに接続します。

3.Surface Sampler を選択し、D キーを押して、デバッグ レンダリングに切り替えます。
4.エディタのウィンドウに戻り、PCG ボリュームを選択して、[Details] パネルの [Generate] ボタンをクリックします。

これでエディタのビューポートにポイントが出現します
バリエーションを加える
1. PCG グラフ エディタで、Surface Sampler を選択します。
2. [Details] パネルで Points Per Square Meter、Points Extents、Looseness の各プロパティを調整して、ポイントを追加します。
Points Per Square Meter :
0.15 に設定すると、空間にさらにポイントが追加されます。
Points Extends :
各ポイントの境界の大きさを制御します。
[X]、[Y]、[Z] の値をそれぞれ 50 に変更します。
Looseness :
生成されたポイントがグリッドにどれだけ一致するかを決定します。Looseness の値は 1.0 のままにします。

3. 次に、Transform Points ノードを追加します。
このノードは、定義された範囲でポイントに追加の移動、回転、およびスケールの変更を行います。
Surface Sampler ノードの Output を Transform Points ノードの Input に接続します。

4. Surface Sampler ノードで [Debug Rendering] を無効にし、Transform Points ノードで [Debug Rendering] を有効にします。
5. 回転にバリエーションを加えるには、[Max Rotation] の [Z] 値を「360」に変更します。これにより、すべてのポイントが 0~ 360 度の間でランダムに回転するようになります。

6. PCG グラフはポイントを生成し、ランドスケープの方向と一致するようにポイントを回転させます。
[Absolute Rotation] チェックボックスをオンにすると、この追加の回転を無効にすることができます。

7.サイズにバリエーションを追加するために、
[Scale Min] の [X]、[Y]、[Z] の値をそれぞれ「0.5」に、
[Scale Max] の [X]、[Y]、[Z] の値をそれぞれ「1.2」に変更します。

スタティックメッシュを生成
1. PCG グラフ エディタで、Static Mesh Spawner ノードをグラフのビューポートに追加します。
Transform Points ノードの Output を Static Mesh Spawner の Input に接続します。
Static Mesh Spawner を選択します。

2. [Details] パネルで、[Mesh Entries] オプションを特定し、[+] ボタンをクリックして、スポーンするスタティックメッシュを追加します。
3. [Mesh Entries] の横にある下向き矢印をクリックして、配列を開きます。
4. [Index [0]] の横にある下向き矢印をクリックします。
5. [Descriptor] の横にある下向き矢印をクリックします。

6.[Static Mesh ] のドロップダウン メニューをクリックして、生成したい樹木を選択します。
この例では、SM_EuropeanBeech_Forest_02_PP を使用しています。

おわりに
Unreal EngineのPCGフレームワークは、生成ロジックを細部まで制御しながら、より効率的かつ柔軟にレベルをデザインできる非常に強力なツールです。
ぜひ活用してみてください。

