[Tokyo DevDays 26'] UE5.8 最新プロシージャル技術解体新書

494 Views

August 27, 26

スライド概要

2026年8月26日に開催されました「Unreal Engine Tokyo Dev Days 26'」イベントの「UE5.8 最新プロシージャル技術解体新書」講演のスライドです。

サブ資料(チートシート)はこちら
https://www.docswell.com/s/EpicGamesJapan/ZE1W6D-DevDays26-PCG-Primitives-CheatSheet

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

ダウンロード

関連スライド

各ページのテキスト
1.

UE5.8最新プロシージャル技 術 解体新書 Epic Games Japan Developer Relations, Software Engineer 湊 和久 チートシート公開中! https://www.docswell.com/s/EpicGamesJapan/ZE1W6D-DevDays26-PCG-Primitives-CheatSheet

2.

アジェンダ ● ● ● ● ● PCG Primitives 概要 Primitive 理解の5つのコツ 覚えておきたいPrimitive シンプルな都市の生成 まとめ

3.

PCG Primitives 概 要 ● ● ● ● ● PCG Primitives 概要 Primitive 理解の5つのコツ 覚えておきたいPrimitive シンプルな都市の生成 まとめ

4.

PCG Primitives 高度な PCGグラフのライブラリとサンプル群 グラフの作り方が Primitiveの組み合わせに劇的進化! ● PCGの複雑で高度な定型処理をモジュー ル化し、サブグラフとして提供する「ラ イブラリ」プラグイン ● グラフ制作のスタイルが高性能サブグラ フの組み合わせに変化 ● 80以上の Primitive ● 森・街・建物・道路など多彩な環境の実 践サンプル わずか15ノードで...

5.

PCG Toolset とInstant ● MCPとPCG Toolsetを有効化すると、 LLMはプラグイン内のライブラリとサン プルの使い方を読み取り、グラフ制作に 活用します ● PCGロジックを一発実行のツールとして 使う、13種類のグラフ(Instant)が LLMの編集能力を拡張します

6.

【開発中】PCG版City Sample ● PrimitivesとMCPを利用して開発されたCity SampleのPCG実装版 ● あくまでMCPで開発を短期化しただけでであり、人の手でもPrimitiveは活用可能

7.

PCG Primitivesの導入 ● PCG Primitives 系のプラグインを 有効化するだけ ● PCGグラフでPrimitivesに分類され たノードを配置できるようになる

8.

Primitivesプラグインのフォルダ構造 Primitives :ライブラリ本体 Examples :グラフサンプル集 Levels :デモレベル Grammer :グラマー拡張 後述 Instants :即時コマンド群

9.

デモレベルには基本なにもない

10.

Examplesのグラフ等を展開して見るのに使う で、ここを見てみると...

11.

例の15ノードが広がっている

12.

Examplesはただのサンプルではなく… Primitives :ライブラリ本体 Examples :グラフサンプル集 Levels :デモレベル Grammer :グラマー拡張 Instants :即時コマンド群

13.

LLMの参照対象である ・PCGグラフ作成スキル(Skill_PCGGraphGeneration)にサンプルを徹底利用する 指示が仕込まれている ・「サンプルを読め」・・・これは人間の利用者にも当てはまる サンプルグラフではプリミティブなノードを使用しており、正しく構成しやすくなっています。 ## サンプルグラフ / 以下のサンプル PCG を利用できます。 - PCG グラフを構築する際の正しいパターンとベストプラクティスについては、これらのサ ンプルグラフを大いに参考にしてください。 - ユーザーのリクエストに取り組む前に、役立ちそうなサンプルグラフの構造をすべて取得し てください。 - グラフをゼロから構築する前に、既存のグラフ(サンプルまたは過去に作成したもの)がユー ザーのニーズにすでに合致していないか確認してください。 - GetGraphStructure を使って、関連するサンプルグラフをすべてロードしてください。 - サンプルグラフは多めに取得する方針とし、「Basics」のサンプルグラフは必ず複数取得し てください。 “THE 関数”というグラフ群で、いき なり読むのはなかなか辛いが…

14.

Primitives時代もグラフの全体像は変わらない が スポーン 位置加工 ランダム フィルタ 閉スプライン 生成 ランダム 点散布

15.

リッチ ちょいちょい高度な処理が入っていたりもする … 領域縮小 再帰分割 領域拡張 セグメント 抽出 形状による セグメント 形状切り抜き 抽出

16.

Primitive 理解の5つのコツ ● ● ● ● ● PCG Primitives 概要 Primitive 理解の5つのコツ 覚えておきたいPrimitive シンプルな都市の生成 まとめ

17.

● グラフを読むにはPrimitvesノードへの 理解が必要 ● ネイティブノードと別体系のこれらの ノードを読む5つコツを伝授!

18.

理解のコツ① Primitiveは「動詞」で分けられてる ● 「Create」「Subdivide」「Align」など 動詞でカテゴライズされたフォルダ群 ● 下に Create_Spline_Shape などの 「V+O」的な命名のグラフが続く、 ● のだが・・・

19.

理解のコツ① Primitiveは「動詞」で分けられてる メッシュ生成 (下流) スプライン生成 (上流)

20.

理解のコツ① Primitiveは「動詞」で分けられてる ● あくまで「動詞」単位 ● ゆえに、人間視点では別物と思われる機 能が同じカテゴリに入っている ● LLMが「作業の段取りを言語化」した際 に、自然と適切なグラフが見つかるフォ ルダ構成といえる ● 我々人類も発想の転換が必要! LLMのためかぁ~! 日本人にはつらい!

21.

参考 ● Shared:汎用のコールバック用グラフ ● _Template_:自作用のひな形グラフ群 ○ 一部のデフォルト処理にも使われる

22.

理解のコツ② グラフの中身を読むな、Descriptionを読め ● Graph Settings > Description に グラフの説明が書かれている ● LLMはこのDescriptionからグラフ の入出力と処理内容を掴む ● グラフ実装を読む必要性は薄い ● Descriptionが未記入のグラフは、 さして注目しなくて問題ない シーン内に、指定した辺の数を持つ独立したク ローズドスプラインの多角形(n-gon)シェイプ を作成します。辺の数は最小で 3 です。プライマ リ入力としてポイント、スプライン、クローズド スプライン、または Polygon2D が指定されてい る場合、シェイプは各入力ポイントにコピーされ ます。PrimaryInputReferences_Types: {None, Type:Point, Type:Spline, Type:ClosedSpline, Type:Polygon2D} OutputTypes: {Type:ClosedSpline}

23.

【人類用】Primitives一覧用データテーブル ● 各 Primitives の位置づけ、Description、入出 力を集約したデータテーブル ● 全76種のPrimitivesをまとめてキャッチアップ 和訳版を作っておくのを お勧め!

24.

【人類用】Primitivesチートシート 和訳版+α 作っておきました https://www.docswell.com/s/EpicGamesJapan/ZE1W6D-DevDays26-PCG-Primitives-CheatSheet

25.

理解のコツ③ Primitiveは Generic化 されている ● ● ● 入力は「Primary Input」という Any型ピンにまとめて流し込む 受け入れ可能な型の範囲なら処理 が進み、 そうでなければ、定められた フォールバック処理が走る “閉スプライン、多角形、サーフェイ スを受け取って、点群を返す”ノード Primary Input ClosedSpline, Polygon2D, Surface Output Point

26.

理解のコツ③ Primitiveは Generic化 されている ● 入力は多くて2つ ● 異なる型の2つの入力を組み合わせ られる場合に、Secondary Inputが 登場 “Primary Inputの形状をSecandary Inputの形状で切り抜く”ノード Primary Input Spline, ClosedSpline, Polygon2D Secondary Input ClosedSpline, Polygon2D

27.

理解のコツ④ サンプルのノード名はコメントである ● ノード名は処理コメントでリネーム済み LLMのためか~!

28.

理解のコツ④ サンプルのノード名はコメントである ● ノード名は処理コメントでリネーム済み ● Primitivesとしてのアセット名はSubgraph欄で確認

29.

理解のコツ⑤ Primitiveのグラフ仕込みは無視でよい Primitiveノードをクリックすると、詳細パネルに4つの差し替え可能なPCGグラフが現 れ、ギョッとさせられるが・・・ Input Processing Graph (入力の型を揃える前処理) Input Fallback Graph (適合しない入力だった場合のふるまい) Core Processing Graph (Primitivesの本体処理) Prepare Outputs Graph (定められた出力に準じるための後処理)

30.

理解のコツ⑤ Primitiveのグラフ仕込みは無視でよい Primitiveノードをクリックすると、詳細パネルに4つの差し替え可能なPCGグラフが現 れ、ギョッとさせられるが・・・ Input Processing Graph (入力の型を揃える前処理) Input Fallback Graph (適合しない入力だった場合のふるまい) Core Processing Graph (Primitivesの本体処理) Prepare Outputs Graph (定められた出力に準じるための後処理) 無視でOK!

31.

理解のコツ⑤ Primitiveのグラフ仕込みは無視でよい ● コールバック用グラフの存在は基 本無視でOK ● よってSharedフォルダ内のグラ フも当面読まなくてよい ● Primitivesにプリセットされたも のをそのまま使用する精神で ● コールバックグラフに付随する オーバーライドパラメータに意識 を集中

32.

覚えておきたい Primitive ● ● ● ● ● PCG Primitives 概要 Primitive 理解の5つのコツ 覚えておきたいPrimitive シンプルな都市の生成 まとめ

33.

グラフの起点となる基本的なPrimitives スプライン生成 Get系 コンポーネントで置いたスプライ ンを読むより、Primitiveでスプ ラインを置きにいくケースが多 他のアクタのPCG出力を読むため にアクタを参照する 閉スプラインを作る Create_Spline_Shapeと、開放型 のCreate_Spline_lineがある タグで参照するGet_ActorData とアクタピッカーのある Get_ActorDataByRefの2種

34.

Subdivideで大きく領域をとって小さく分割~ Subdivide_Areas_withGrid エリアを最長辺に揃えた格子で細分割する 初期状態 Subdivide_Areas_WithRecursiveSplit 最長辺に直交する方向で再帰的に分割する 初期状態 Subdivide_Areas_withSpline 分割後 反復1 反復2 反復3 セカンダリのスプラインでエリアを切り分ける 初期状態 分割後

35.

応用系 基本系 主なフィルタ用Primitives Filter_RandomChoice シードと目標比率でランダムに選ぶ Filter_Points_Overlapping Extent 属性が重なり合う点を取り除く Filter_Tags タグでデータを Selected / Unselected に振り分ける Filter_AttributeValue 属性値の比較条件を満たす要素だけを通す Filter_Areas_BySize 面積(平方メートル)でエリアを選ぶ Filter_Areas_Largest 最大面積のエリアだけを選ぶ Filter_Areas_Smallest 最小面積のエリアだけを選ぶ やたら充実してますなあ 全12種類!

36.

Spawnはどうなってる? 割り当て スポーン ポリゴン生成 点化したうえでメッシュを割り当 て、それをAsset属性に書き込む ので「Assign」系とされる Spawn_Assetsで入力された点群 上に分かりやすくアセットをス ポーン! 入力された領域にポリゴンを張る 実はオプションでそのままスポー ンさせることもできる PCGアセンブリも使用できる その後の領域計算に使うこともあ れば、そのまま最終出力として使 うこともある

37.

グラマーを用いたビルの構築 L2 L0,L1*,L2 壁* L1 柱, 窓, 壁* ,窓 ,柱 L0 柱, 窓, 壁* ,玄 ,壁 *,窓 ,柱 ● 【水平方向】建物のフットプリントのアウト ラインをセグメント化し、グラマーを適用 ● このとき、1階、中間階、最上階で異なるグ ラマーを適用したい ● 【垂直方向】「1階, 中間階*, 最上階」のよう に階の割り当てをグラマーで記述 ● 本来はかなり複雑で高度な手法だが、 Primitiveの Shape Grammar Definition を 利用すれば容易に実現可能

38.

SGD (ShapeGrammarDefinition) やたら使われてるぜ!

39.

従来の単発のグラマーはShape Grammar Ruleとしてデータセットを作る SGDはそのRuleを複数設定可能なデー タセットである そのうえで、Ruleにシ ンボルを割り当て グラマーを適用可能! (不使用もOK)

40.

なお個々のビルの高さは… サンプルではノイズから 高さを割り当て

41.

屋上の処理 ● フットプリントを屋上の位置までオフセット し、ポリゴンを貼る ● 屋上に装飾のメッシュを置く ● アセット次第でちゃんと絵になる 屋上のヘリが立ってるのは、 最上階のアセットと 屋根オフセットの位置関係ね

42.

シンプルな 都市の生成 ● ● ● ● ● PCG Primitives 概要 Primitive 理解の5つのコツ 覚えておきたいPrimitive シンプルな都市の生成 まとめ

43.

ステップ別の都市構築サンプル ● Examplesのひとつ 「City_Generator_steps」 ● 解説のために7つのステップに分か れており、 ● それぞれにアクタとPCGグラフが 存在

44.

Base スプライン準備 Districts 区分け Lots 地区の生成 Ground 地面タイルと歩道 Buildings 建物のスポーンと屋上 Left_over_lots 広場と樹木の配置 city_Contour 都市外縁の歩道

45.

ステップ1:区分け(道路を引く) Artery_1 (幹線道路1) Artery_2 (幹線道路2) City_Shape ※Description これは、直径約1kmのほぼ円形の小都市(曲がりくねった2本の幹線道路が横断する) を作成する第1ステップです。都市の形状と、それを横切って蛇行する2本の主要幹 線道路を描画します。このグラフはレベル内にスプラインアクタをスポーンするた め、ユーザーはそれらを操作できます。

46.

閉スプラインデータ作成 編集できるように スプラインデータをアクタ化 (同時にタグ付けも) スプラインデータ作成

47.

ステップ2:区分け 前ステップで作った スプラインには タグでアクセス 第2ステップ: 次にそれらを使って、地区(District)、サブ地区(Subdistrict)、グ リッドブロック(Grid Block)を作成します。分割用のスプラインは道路のスポーン に使用されます。生成されたすべてのデータには、後で他のグラフから利用できる ようにタグが付けられます。

48.

ステップ2-1 ● City_Shape閉スプラインをArtery スプラインで分割 ● 細分割スプラインに幅を持たせて 「幹線道路」を敷設 初期状態 分割後

49.

ステップ2-2 ● 細分割化された各領域を「再帰分 割」で1回だけ分割 ● 細分割に使われたスプラインに幅 を持たせて「集散道路」扱いに 初期状態 反復1

50.

ステップ2-3 ● 前回細分化された領域を今度はグ リッドで細分化 ● 細分化に使われたスプラインに幅 を持たせて「区画道路」扱いに 初期状態 分割後

51.

ステップ2-4 ● これらの3種類の道路にFootprints タグをつけ、ステップ2を終了 ● 道路以外のデータは次ステップに ほとんど持ち越していない 「区分け」というより 道路敷設という印象ですな

52.

注:実際のサンプルの見た目 ● 重なる道路を断ち切っておらず、 方向性をもった見た目のメッシュ が折り重なって汚い ● 見た目にかなり問題はあるが、 PCGロジック自体の完成度は高い 高いんだよ!

53.

● 舗装マテリアルをワールドポジ ションで処理し、 ● 非交差のセグメントに中央線でも 引けば・・・ ● 見た目の完成度も爆上がり! 海外の道路っぽい がんばって日本版も 作っていこう

54.

ステップ3:区画の生成 第3ステップ: 都市形状と幹線道路から地区(District)を分割するために使用された 別のPCGグラフを参照します。このグラフでは区画(Lot)の生成とフィルタリングを 行い、グラフの後段で建物や広場(Plaza)を建設できるようにします。

55.

ステップ3-1 ● City_Area閉スプラインから前ス テップの出力の差を取る ● これにより、区画(Lots)が得ら れる

56.

ステップ3-2 ● ランダムチョイスでLotsの10%を 広場用に予約 ● 2000平米未満の区画を落とし、 ● 2000平米以上、8000平米以下の 区画を建築予定地として予約

57.

再帰分割 2反復 ステップ3-3 ● 各建築予定地に対して再帰分割を2 反復で実行 ● 500平米以上を建築可範囲、 500平米未満を建築不可(空地)と して予約 ● これで建築物のフットプリント (すなわち主形状)を決める 500平米~ フィルタ

58.

● 大事なところは突破した! もうわかるはず! ● 以降はサクッといきます!

59.

ステップ4:地面タイルと歩道 第4ステップ: 区画(Lot)を生成する別のPCGグラフを参照します。区画を地面タイル (Ground Tile)で敷き詰め、歩道(Sidewalk)をスポーンします。

60.

ステップ5:建物のスポーンと屋上 さっき 説明した技術のやつね 第5ステップ: 区画(Lot)を生成するPCGグラフを参照し、屋上(Rooftop)付きのさま ざまな建物をスポーンします。

61.

ステップ6:広場と樹木の配置 第6ステップ: 区画(Lot)を生成するPCGグラフを参照し、予約済みの区画を選んで広 場(Plaza)を建設し、建築不可のフットプリントにツリー(Tree)をスポーンさせま す。

62.

ステップ7:都市外縁の歩道 第7ステップ: 都市の外縁部を作成します。都市形状は、外周道路(Peripheral Road) の幅の半分だけ拡張され、その分が考慮されます。

63.

まとめ ● ● ● ● ● PCG Primitives 概要 Primitive 理解の5つのコツ 覚えておきたいPrimitive シンプルな都市の生成 まとめ

64.

今日お話したこと ● PCG Primitivesは高度な処理を1ノードで行い、その組み合わせでプロシー ジャルコンテンツを作成できるライブラリプラグインです ● LLM/MCPのご加護があるが、人間でも使えます ● LLMのためにやたら説明書きが充実しているので、人間もそれを読めばよい ● 高機能なぶんネイティブノードより読みやすく、いくつかサンプルをあたれ ば、おおむね使い方が分かります ● チートシートを用意したので使ってください ● PCG版CitySampleを座して待ちましょう!

65.

Thank ご清聴ありがとうございました