42.3K Views
August 28, 23
スライド概要
アーカイブ動画はこちら:
https://youtu.be/934CmNbEy0E?si=ggGCmv3FwlwYUcG-
UnrealEngine5.2で追加されたProcedural Content Generation (PCG) Frameworkはエンジン内で完結したプロシージャル生成環境を提供します。
本セッションでは弊社より公開されたElectricDreamsサンプルを紐解きながら、扱われているプロシージャル生成テクニックを学習します。
まもなく公開されるUnrealEngine5.3におけるPCG関連のアップデートについても紹介します。
Electric Dreams 環境 サンプル プロジェクト Unreal Engine | YouTube
https://www.youtube.com/watch?v=orhnjEkiMZs
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
ElectricDreams環境サンプルにみる プロシージャル生成テクニック Epic Games Japan 鈴木 孝司
背景に対して今後求められる要素は?
はじめに 広大 高密度 高速イテレーション
プロシージャルコンテンツ生成の フレームワーク
プロシージャルコンテンツ生成 =PCG
はじめに State of Unreal GDC 2023
ElectricDreams環境サンプル https://www.unrealengine.com/ja/electric-dreams-environment
PCGの特徴
プロシージャルコンテンツ生成の フレームワーク = PCG
PCGの特徴 エンジン内蔵 プロシージャル生成 非破壊編集 ノードベース & 拡張性 プロシージャルとアートの共存
プロシージャルとアートの共存 外部ツール データ プロシージャル生成 インポート
CitySampleのワークフロー
プロシージャルとアートの共存 PCGフレームワーク
ElectricDreams環境サンプルの解析 ● レベル外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest
目次 ● レベル外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest
ElectricDreamsサンプルの概観
ElectricDreams_Env概観
ハンドクラフトで作られたエリア
PCGで配置された部分
ElectricDreams_PCG概観
ElectricDreams_PCGランタイム生成部
ElectricDreams_PCGCloseRange
BreakDown_Levels概観 ElectricDreams_PCGDitchAssembly ElectricDreams_PCGForest ElectricDreams_PCGLargeAssembly ElectricDreams_PCGSplineExample
目次 ● レベル外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest
SmallAssembly
PCGAssetノード
PCGSettingsアセットをD&D
PCGSettingsのエクスポート w
PCGSettingsのエクスポート ● PCG - Level to PCG Settings ● WPレベルの場合一度ロードしてから ● StaticMeshとその派生コンポーネント ● PackedLevelActor / LevelInstance ● 出力情報 ● 位置情報 ● メッシュ ● マテリアル ● 階層構造 ● タグ
アセンブリレベルの編集
ActorTaggerユーティリティ
アセンブリの例
PCGSettingsからのメッシュ生成
目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest
PCG_Ground
PCG_Groundの概要 水たまり& 濡れデカール生成 中央部の丘の自動生成 クローバーの配置 Movable石生成 スプライン内の床の生成
ディスタンスフィールドの作成
ディスタンスフィールドの作成 Distanceノード 正規化距離(0~1)がDensityに Maximum Distance 各点がターゲットへ向く
大小様々な石の配置
スプラインから生成された床の要素
スプラインから生成された床の要素
自動中央丘生成
自動中央丘生成 Distanceノードで広い空地を見つける
自動中央丘生成
階層構造制御
階層構造制御
階層構造制御
階層構造制御
階層構造制御
階層構造制御 - 相対座標
階層構造制御 - 相対座標
階層構造制御
相対座標で階層構造を再構成
相対座標で階層構造を再構成
階層の間引き
階層の間引き
ApplyHierarchyについて ● PCGの組み込みノードでなく、ElectricDreamsに含まれるカスタムノード ● 将来的にはハードコートされたプロパティ名などを排除して汎用化し、 ネイティブコード化したバージョンを提供予定
依存関係の明確化
依存関係の明確化の例 PCGで作られた箱メッシュの上に 球メッシュを生成する
タグフィルタ - 依存関係だけを伝える
平面検出
平面検出
平面検出
平面検出
DiscardPointsInBumpyAreasの動作 起伏判定 四点の生成 法線判定
DiscardPointsInBumpyAreasの動作
DiscardPointsInBumpyAreasの動作
DiscardPointsInBumpyAreasの動作
DiscardPointsInBumpyAreasの動作 プロジェクションした結果、 青いバウンズと接触していない デコボコ プロジェクションしても 青いバウンズと接触している 平面
DiscardPointsInBumpyAreasの動作 中心点の板を少し浮かせたもの エッジの4点を薄く広げた板
DiscardPointsInBumpyAreasの動作 法線が傾いていて 浮かせた板に接触している デコボコ
DiscardPointsInBumpyAreasの動作
平面検出結果
DiscardPointsInBumpyAreasについて ● [UE5.2]ElectricDreamsサンプルに含まれるサブグラフ ● [UE5.3]DiscardPointsOnIrregularSurfaceと改名して プラグインに標準搭載
目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_Ditch ● PCG_LargeAssembly ● PCG_Forest
PCGDemo_Ditch
PCGDemo_Ditch概観 ボリュームによる除外 壁面アセンブリ選択と アートオーバーライド 樹木や草花の不均一化 壁面 アセンブリの ロードと加工 ツタの絡んだ枯れ木に置 き換え 外側との繋ぎの床生成 土手上の樹木や岩の生成 内側の荒地デカール
ボリュームによる除外処理
ボリュームによる除外処理 PCG_EXIT PCG_EXCLUDE
初期姿勢の保存
アセンブリの選択とアートオーバーライド
アセンブリの選択とアートオーバーライド
アセンブリの選択とアートオーバーライド
中央部を一旦無視してみる
アートオーバーライド
2連Differenceパターン
2連Differenceパターン PCGボリューム オーバーライドボリューム
2連Differenceパターン
Intersection(積集合)でもいいのでは?
Intersection(積集合)でもいいのでは? ボリュームが二つ以上ある場合出力が無くなる 点群 ⋂ ボリューム1 ⋂ ボリューム2 ボリュームが一つならOK 点群 ⋂ ボリューム1
IntersectionとInnerIntersection (UE5.3~) Intersection(5.2) -> InnerIntersection(5.3)に改名
オーバーライド例
賑やかしメッシュの間引き
賑やかしメッシュの間引き
思ったより単純かも?
フラグ付きメッシュに回転&スケール適用 ApplyHierarcheyで参照される アトリビュートを追加
コリジョンフラグによる最適化
目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_Ditch ● PCG_LargeAssembly ● PCG_Forest
LargeAssembly
LargeAssembly概観 スプライン取得& アートオーバーライド ベース層 倒木 ベース層天井 ベース層上の木 上部断崖 断崖周囲の木
スプラインの曲率
スプラインの曲率
スプラインの曲率 低曲率 10m毎 高曲率 5m毎
ベース層用のアセンブリ 高曲率 w:5m 低曲率 w:10m 地すべり
スプラインの曲率
スプラインの曲率
地すべりのアートオーバーライド
制御ボリュームの表示
地すべりのアートオーバライド
断崖生成点の制御
倒木生成
2種類の倒木配置
倒木の生成点
向こう岸の壁情報
倒木の生成点
対岸の板と交差判定
空間が広い方は地面に向けて少し傾ける
垂れた蔓の回転を無効化
倒木配置完了!
目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_Ditch ● PCG_LargeAssembly ● PCG_Forest
PCGDemo_Forest
PCGDemo_Forest 遠くのフォグカード 大きめの樹木生成 小さめの樹木生成 除外エリア 取得 空白地生成 空白地の床など 断崖生成 断崖の根本周辺の岩 全域にまたがる岩や石など 雑草生成
空地生成
空地生成
空地生成 樹木生成 空白地フィールド 空白地用メッシュ配置
空地生成
ImportDataTable
ImportDataTable
樹木のマテリアル分散制御
樹木のマテリアル分散 メ ライ ン イ ト
樹木の振り分け
マテリアルのウェイト付き割り当て
マテリアルのウェイト付き割り当て
樹木のマテリアル分散制御
FogCards
FogCards
UE5.3 https://portal.productboard.com/epicgames/1-unreal-engine-public-roadmap/
リンク ● Unreal Engine 5.2 アップデート ~Rendering/PCG~【GTMF 2023】 https://www.docswell.com/s/EpicGamesJapan/KDE2Q6-UE5_GTMF23_Rendering_PCG ● New Tools for Building Photoreal Worlds in Unreal Engine 5.2 (日本語字幕) https://www.youtube.com/watch?v=zlxpoY1TfkY ● Procedural Tools In UE5 (日本語字幕) https://www.youtube.com/watch?v=aoCGLW53fZg ● Deep Dive into the Electric Dreams Project | Inside Unreal https://www.youtube.com/watch?v=6JUfisUhm68
ご清聴ありがとうございました