森の中に道を通したあとで、「もう少し右に曲げたい」と思うことがあります。道の近くの木を消し、空いた場所にまた木を足す。配置を整える作業は、地形や道を直すたびに繰り返すことになります。
PCGは、配置を作るためのルールを残せる仕組みです。「この地面に木を置く。ただし急斜面と道の周りは空ける」と組んでおけば、道の形を変えてから、そのルールで配置を生成し直せます。
この記事では、まず地面に物が並ぶところまで作り、そこに「置かない場所」の条件を足していきます。木の素材がなくても、UEに入っている箱で同じ手順を試せます。
この記事でわかること
- 配置候補の「点」と、そこに置くメッシュの関係
- PCG Volumeとグラフで、地面に物を並べる手順
- 急斜面の候補を取り除く方法
- 曲線の周りを空け、道の変更に合わせて配置を作り直す方法
PCGは「点を作って、そこに置く」
PCG(Procedural Content Generation)は、手順や条件からコンテンツを生成する仕組みです。今回は、地面に木を配置するために使います。
ここで大事なのが、最初に作るのは木ではなく、木を置く候補の点だということです。点には位置だけでなく、向きや大きさなどの情報もあります。まず候補を作り、置きたくない場所の点を取り除き、最後に残った点へ木を置きます。

この手順を、PCGグラフにノードをつないで作ります。ノードは「点を作る」「点を取り除く」など、一つの処理を担当する部品です。線に沿って配置のデータが流れます。
木が多すぎたら候補を減らし、道を広げたければ 除外する範囲を広げる。配置結果を一本ずつ直す代わりに、配置を決める条件を直せるのがPCGの使いどころです。
Foliageツールとの使い分け
Foliageでも、ブラシで木や草をまとめて配置できます。PCGとの違いは、本数よりも「配置する場所をどう決めるか」です。

| 方法 | 配置を決める操作 | 向いている作業 |
|---|---|---|
| Foliage | ブラシで配置する場所を描く | 景色を見ながら、道端の草や岩を足していく |
| PCG | 地面・傾斜・道などの条件をグラフにする | 道や地形を変更しながら、同じルールで森を作り直す |
たとえば、森全体はPCGで作り、入口の草をFoliageで足す使い方もできます。ただし、PCGの除外条件が、別に手で置いた木や草まで消すわけではありません。それぞれの方法で置いたものを、別々に調整します。
最初のPCG:地面に物を並べる
ここからはエディタ上で作業します。まずは、Landscapeの一角に箱か木が並べば成功です。急斜面や道は、並ぶことを確かめてから扱います。
地面とプラグインを用意する
Landscapeがあるレベルを開きます。まだなければ、Landscape入門の手順で地面と小さな丘を作ってください。最初は地面 の一角だけを使います。
「Edit → Plugins」で Procedural Content Generation Framework を有効にし、求められたらエディタを再起動します。PCGはUE5.7でProduction-Ready(本番制作に使える段階)になりました。以下では、この世代の基本的なノードを使います。
配置するものには、手元の木の Static Mesh を使えます。Static Meshは、木や岩などの立体モデルのアセットです。素材がなければ、コンテンツブラウザの設定で「Show Engine Content」をONにして、Engine/BasicShapes/Cubeを選べる状態にします。箱で配置の仕組みを確かめてから、木に差し替えても構いません。
範囲とグラフを用意する
PCG Volumeは、このグラフで配置する範囲を囲むActor(レベルに置くオブジェクト)です。地面の上だけに浮かせず、箱の中に地面が入るように置きます。
- 「Place Actors」で
PCG Volumeを検索してレベルへ置き、PCG_PracticeVolumeと名付けます。 - 拡大ツールで、平地と丘の斜面が一部ずつ入る大きさにします。まずは数十mほどの範囲で十分です。高さも含めて地面と重ねます。
- コンテンツブラウザで右クリックし、「PCG → PCG Graph」から
PCG_ForestPracticeを作ります。テンプレートを選ぶ画面が出る場合は、空のグラフから始めます。 - レベルのPCG Volumeを選び、詳細のPCGコンポーネントで「Graph」にこのグラフを指定します。今回は「Is Partitioned」をOFFにして、範囲を分割しない構成で試します。

Volumeはレベルに置く範囲、グラフはその中で使う配置ルールです。同じものではないので、グラフを作ったらVolumeへ割り当てるところまで行ってください。
3つのノードをつなぐ
PCG_ForestPracticeを開き、空白部分を右クリックして、次の3つのノードを追加します。

| ノード | 今回の役割 | 接続 |
|---|---|---|
| Get Landscape Data | Landscapeの面を取得する | Out → Surface SamplerのSurface |
| Surface Sampler | その面に候補の点を作る | Out → Static Mesh SpawnerのIn |
| Static Mesh Spawner | 各点へメッシュを置く | 配置するアセットを設定する |
Surface Samplerを選び、詳細を次の値から試します。
| 設定 | 最初の値 | 意味 |
|---|---|---|
| Points Per Squared Meter | 0.1 | 1m²あたりの候補数の目安。値を上げると密になる |
| Point Extents | X/Y/Zともに50 | 点が持つ範囲の半分の大きさ。ここでは既定の小さな範囲を使う |
| Looseness | 1 | 点の位置にばらつきを持たせる |
| Unbounded | OFF | Volumeの範囲内に絞る |
「Bounding Shape」入力は今回はつながなくて構いません。UnboundedがOFFなら、別の範囲を渡していない場合に、このPCG Volumeの範囲を使います。
次にStatic Mesh Spawnerを選びます。「Mesh Selector Type」をPCGMeshSelectorWeightedにし、「Mesh Entries」の+で項目を1つ追加します。その「Descriptor → Static Mesh」に木かCubeを指定し、「Weight」は1にします。
グラフを保存し、レベルのPCG Volumeへ戻って、PCGコンポーネントの 「Generate」 を押します。Volumeの中の地面に、指定したメッシュが並べば成功です。Cubeは中心を地面の位置に合わせて置かれるので、半分ほど埋まって見えても、候補が生成されたことは確認できます。最初から置かれているInput・Outputノードは、この配置例では未接続のままで構いません。
出ないときは、木より先に「点」を見る
何も出ないとき、原因を一度に探す必要はありません。まずSurface Samplerが点を作れているかを確かめます。
グラフでSurface Samplerを選び、Dキーで Debug(途中の結果の表示) をONにします。デバッグ対象の選択欄や「Debug Tree」でPCG_PracticeVolumeのコンポーネントを選び、Generateします。ビューポートに小さな箱などの印が出れば、それが配置候補です。もう一度Dを押すと表示を消せます。
