【Unreal Engine】PCG入門:森と小道をルールで自動配置する

作成: 2026-07-23

広い屋外マップの装飾を、手作業でなくルールで撒くPCG(Procedural Content Generation)の入門。Foliageツールとの使い分け、PCG VolumeとSurface Sampler・Static Mesh Spawnerで木を生やす手順、傾斜フィルタで崖を除外する方法、スプラインに沿って道だけ木を消すDifferenceまで。丘に森を生やし、小道だけ木が生えないグラフを育てます。

Landscape で丘を作り、Foliageツールで木を手で撒いてみた。でも、広いマップを埋めようとすると、何千本もの木を1本ずつ置くのは現実的ではありません。しかも「やっぱり木が多すぎた」と思っても、消して撒き直す作業がまた一苦労です。

この「大量配置」を、手作業ではなく ルール で解決するのが PCG(Procedural Content Generation) です。「どこに・何を・どんな条件で撒くか」をグラフに書けば、配置が自動で生成され、条件を変えれば即座に撒き直されます。この記事では、PCGの基本から、丘に森を生やして小道だけ木を消すところまでを、実際にグラフを育てながら解説します。

PCGはUE5.2で Experimental(実験的) 機能として登場し、 UE5.7世代でProduction-Ready(実用段階) になりました。いずれの場合もプラグインの有効化が必要です。ノード名はバージョンで変わることがあるので、使っているUEで確認してください。

丘一面に自動配置された森と、スプラインの小道だけ木が生えていない様子とソフトブルーのクレイ人形

この記事でわかること

  • PCGとは: 「どこに・何を・条件で」をグラフに書くと自動配置
  • Foliage ツールとの使い分け(手で撒く / ルールで撒く)
  • PCG Volume と Surface Sampler・Static Mesh Spawner で木を生やす
  • 傾斜フィルタ で崖を除外する
  • スプライン に沿って道だけ木を消す(Difference)
  • 実践: 丘に森、小道だけ木が生えないグラフ

Sponsored

PCGとは何か

PCG(Procedural Content Generation) は、配置を ルール(グラフ) で決める仕組みです。手で1つずつ置くのではなく、「どこに・何を・どんな条件で」をノードでつなぐと、その通りに配置が自動生成されます。

「どこに(面の上)・何を(木)・条件で(急斜面は除く)」をグラフに書くと、配置が自動で更新されることを示した図

PCGの何が嬉しいのか。それは、 やり直しがタダ なことです。

  • 密度を変えたい → グラフの数値を変えるだけで、全部が撒き直される
  • 崖には生やしたくない → 条件のノードを1つ足すだけ
  • 道の形を変えた → 配置が自動で追従する

手で撒いたFoliageやActorは、変更のたびに置き直しが必要でした。PCGは「結果」ではなく「ルール」を持つので、 ルールを変えれば結果が自動で更新される 。これが、広いマップを1人で成立させる鍵になります。

Foliageツールとの使い分け

UEには、木や草を撒く道具として、以前から Foliageツール があります。PCGと役割が違うので、使い分けを押さえます。

Foliageツールは手で少量を意図して撒き、PCGはルールで大量を条件で撒く、という使い分けを対比した図
  • Foliageツール(手で撒く): ブラシで、狙った場所に少量を置きます。「入口の脇に目印の木を1本」「見せ場に岩を数個」といった、 意図した配置 に向きます
  • PCG(ルールで撒く): グラフの条件で、広範囲に大量を撒きます。「丘一面に森」「川べりに葦をびっしり」といった、 条件で決まる大量配置 に向きます

目安は、 少量・意図した配置ならFoliage、大量・条件で決まる配置ならPCG です。両方を組み合わせて、大枠はPCGで撒き、見せ場だけFoliageで手を入れる、という使い方もよくあります。

最初のPCG:木を生やす

まずは、丘の上に木を自動で生やしてみます。PCGの最小構成は、 PCG Volume と、その中の PCGグラフ です。

PCG Volumeを置き、PCGグラフでSurface Sampler→Static Mesh Spawnerとつなぐと、面の上に木が生える流れを示した図

手順はこうです。

  1. PCG Volume を置く: レベルにPCG Volumeを配置し、木を生やしたい範囲(丘)を覆う
  2. PCGグラフを作る: Volumeに割り当てるPCGグラフを作り、その中でノードをつなぐ
  3. Surface Sampler: 「面の上に点を撒く」ノード。地形(Landscape)を対象に、点を散布する
  4. Static Mesh Spawner: 撒かれた各点に、木のStatic Meshを配置する
PCGグラフ(最小構成)
Surface Sampler(Landscapeの面に点を撒く)
  → Static Mesh Spawner(各点に木のメッシュを置く)

Surface Samplerが「どこに撒くか(点)」を決め、Static Mesh Spawnerが「何を置くか(メッシュ)」を決める。この2つで、丘の上に木が並びます。 木が1本も出ないときは、Surface Samplerの対象がLandscapeを指しているか を最初に疑ってください。

傾斜フィルタで崖を除外する

丘全体に撒くと、切り立った崖にまで木が生えて不自然になります。そこで、 条件で撒く場所を絞ります

撒いた点のうち、急斜面(法線が寝ている点)を傾斜フィルタで除外し、平らな場所だけに木�を残す様子を示した図

Surface Samplerが撒いた各点は、その場所の 傾き(法線) の情報を持っています。これを使って、 急斜面の点を捨てる フィルタを1つ足します。

  • 各点の傾きを見て、一定より急な(崖のような)点を除外する
  • 残った平らな点にだけ、Static Mesh Spawnerで木を置く

これで、崖には木が生えず、なだらかな斜面や平地にだけ森ができます。 条件を1ノード足すだけで、配置が賢くなる のがPCGの強みです。急斜面には草だけ、平地には木、といった撒き分けも、フィルタの組み合わせで作れます。

Sponsored

スプラインで道だけ木を消す

森の中に小道を通したいとき、道の上に木が生えていては歩けません。PCGなら、 スプライン(道の線)に沿って、配置を除外 できます。

スプラインで描いた道の周りを、Differenceノードで帯状にくり抜き、道の上だけ木が生えないようにする様子を示した図

使うのは Difference(差分) です。これは、「Aの範囲から、Bの範囲を引く」ノードです。

  • A: 森を撒く範囲(丘全体)
  • B: スプラインで描いた道の周り(帯状の範囲)
  • A − B: 道の帯を除いた範囲にだけ、木を撒く

こうすると、スプラインで引いた道の上とその周りには木が生えず、きれいな小道が通ります。そして スプラインを曲げ直せば、木の生えない帯もその形に追従します 。道を1本引き直すたびに木を消して回る、という手作業から解放されます。

Sponsored

実践:森と小道のグラフを育てる

オープンフィールドRPGの街道、サバイバルの探索マップ、ウォーキングシムの森。 「丘に森があり、その中を小道が抜けている」 は、屋外マップの定番の風景です。ここではその一枚を、Landscape で作った丘を流用して、3段階でグラフを育てて作ります。

作るのは、 丘全体に木を散布し、崖を傾斜フィルタで除外し、スプラインの道に沿って帯状に木を消した 森です。

動かすとこうなります。丘の上に森が一面に広がり、崖には木がなく、道に沿って木の生えない帯が抜けています。そして スプラインを曲げ直すと、道に沿った帯が即座に追従して形を変えます 。手で撒いたFoliageなら木を消して回る作業が、PCGでは線を動かすだけで終わります。

丘全体に森、崖は除外、スプラインの道だけ木のない帯が抜け、スプラインを曲げると帯が追従する様子を示した実例図

グラフの3段階

3つのノードを順に足して、グラフを育てます。

Surface Sampler→傾斜フィルタ→Difference(スプライン)→Static Mesh Spawnerとつながる完成PCGグラフ
PCGグラフ(森と小道)
① Surface Sampler(丘の面に点を散布)
  → ② 傾斜フィルタ(急斜面の点を除外)
  → ③ Difference(スプラインの道の帯を引く)
  → Static Mesh Spawner(残った点に木を置く)
段階ノード役割
① 散布Surface Sampler丘全体に点を撒く
② 崖を除く傾斜フィルタ急斜面の点を捨てる
③ 道を抜くDifference(スプライン)道の帯を引いて木を消す

確かめる

PCGを再生成すると、 丘に森が広がり、崖には木がなく、道に沿って木の生えない帯 ができます。そして道のスプラインを曲げてみてください。帯が形に追従すれば成功です。

うまくいかないときの切り分けです。

  • 木が1本も出ないSurface Samplerの対象がLandscapeを指しているか 。PCG VolumeがLandscapeに重なっているか確認
  • 崖にも木が生える → 傾斜フィルタの閾値。もっと緩い斜面まで除外するなら閾値を下げる
  • 道に木が残る/帯がずれる → Differenceに渡すスプラインの帯の幅、またはスプラインの参照を確認

ポイントは2つです。

  • やり直しがタダ: これがFoliageとの決定的な違いです。密度も、崖の除外も、道の形も、グラフを変えれば全部が撒き直されます。手で消して回る作業がありません
  • 条件を足して賢くする: 傾斜フィルタ、Difference、と条件を重ねるほど、配置が自然になります。まず散布、次に除外、と段階的にグラフを育ててください。大量配置の負荷が気になったら、Naniteメッシュ との組み合わせや LOD・カリング で軽くします

おまけ:先に知っておくと良いこと

大きさと回転にばらつきを付ける。 全部の木が同じ大きさ・同じ向きだと、いかにも「コピー」に見えます。撒いた各点の大きさと回転を、Transform Points系のノードでランダムにばらつかせると、自然な森になります。密度(Points数・Density)とあわせて、この「ばらつき」がリアルさの決め手です。

再生成はエディタで焼くのが基本。 この記事のPCGは、エディタ上で配置を生成(焼く)して使います。ゲーム実行中にリアルタイムで生成する使い方もありますが、負荷や設計が一気に難しくなるので、まずは エディタで焼いて固定する 使い方に留めるのがおすすめです。

大量配置はインスタンス化で軽い。 Static Mesh Spawnerが置く木は、内部でインスタンス化(同じメッシュをまとめて描画)されるので、数千本でも比較的軽く動きます。とはいえ増やしすぎれば重くなるので、stat unit 等で計測しながら密度を決めてください。この「まとめて描画」の中身は Instanced Static Meshで描画コールを減らす で扱っています。

まとめ

ルールで撒くPCGは、次の流れで育てます。

段階やることノード
散布面に点を撒くSurface Sampler
配置点にメッシュを置くStatic Mesh Spawner
絞る崖を除外する傾斜フィルタ
抜く道を消すDifference(スプライン)

そして貫く原則が、 結果でなくルールを持つ ということです。ルールを変えれば結果が自動で更新されるから、広いマップの装飾を1人でも成立させられます。

これで、手作業に頼らずオープンフィールドの見た目を作れるようになりました。あなたのマップで、プレイヤーが一番歩きたくなる道は、どこを抜けていますか。まずは丘に木を撒いて、その中に一本、道を通してみてください。

さらに学ぶために