Unreal Engine 5 ElectricDreams環境サンプルにみるプロシージャル生成テクニック【CEDEC 2023】

23.9K 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

profile-image

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

シェア

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

関連スライド

各ページのテキスト
1.

ElectricDreams環境サンプルにみる プロシージャル生成テクニック Epic Games Japan 鈴木 孝司

2.

背景に対して今後求められる要素は?

3.

はじめに 広大 高密度 高速イテレーション

4.

プロシージャルコンテンツ生成の フレームワーク

5.

プロシージャルコンテンツ生成 =PCG

6.

はじめに State of Unreal GDC 2023

7.

ElectricDreams環境サンプル https://www.unrealengine.com/ja/electric-dreams-environment

8.

PCGの特徴

9.

プロシージャルコンテンツ生成の フレームワーク = PCG

10.

PCGの特徴 エンジン内蔵 プロシージャル生成 非破壊編集 ノードベース & 拡張性 プロシージャルとアートの共存

11.

プロシージャルとアートの共存 外部ツール データ プロシージャル生成 インポート

12.

CitySampleのワークフロー

13.

プロシージャルとアートの共存 PCGフレームワーク

14.

ElectricDreams環境サンプルの解析 ● レベル外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest

15.

目次 ● レベル外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest

16.

ElectricDreamsサンプルの概観

17.

ElectricDreams_Env概観

18.

ハンドクラフトで作られたエリア

19.

PCGで配置された部分

20.

ElectricDreams_PCG概観

21.

ElectricDreams_PCGランタイム生成部

22.

ElectricDreams_PCGCloseRange

23.

BreakDown_Levels概観 ElectricDreams_PCGDitchAssembly ElectricDreams_PCGForest ElectricDreams_PCGLargeAssembly ElectricDreams_PCGSplineExample

24.

目次 ● レベル外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest

25.

SmallAssembly

26.

PCGAssetノード

27.

PCGSettingsアセットをD&D

28.

PCGSettingsのエクスポート w

29.

PCGSettingsのエクスポート ● PCG - Level to PCG Settings ● WPレベルの場合一度ロードしてから ● StaticMeshとその派生コンポーネント ● PackedLevelActor / LevelInstance ● 出力情報 ● 位置情報 ● メッシュ ● マテリアル ● 階層構造 ● タグ

30.

アセンブリレベルの編集

31.

ActorTaggerユーティリティ

32.

アセンブリの例

33.

PCGSettingsからのメッシュ生成

34.

目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_LargeAssembly ● PCG_Ditch ● PCG_Forest

35.

PCG_Ground

36.

PCG_Groundの概要 水たまり& 濡れデカール生成 中央部の丘の自動生成 クローバーの配置 Movable石生成 スプライン内の床の生成

37.

ディスタンスフィールドの作成

38.

ディスタンスフィールドの作成 Distanceノード 正規化距離(0~1)がDensityに Maximum Distance 各点がターゲットへ向く

39.

大小様々な石の配置

40.

スプラインから生成された床の要素

41.

スプラインから生成された床の要素

42.

自動中央丘生成

43.

自動中央丘生成 Distanceノードで広い空地を見つける

44.

自動中央丘生成

45.

階層構造制御

46.

階層構造制御

47.

階層構造制御

48.

階層構造制御

49.

階層構造制御

50.

階層構造制御 - 相対座標

51.

階層構造制御 - 相対座標

52.

階層構造制御

53.

相対座標で階層構造を再構成

54.

相対座標で階層構造を再構成

55.

階層の間引き

56.

階層の間引き

57.

ApplyHierarchyについて ● PCGの組み込みノードでなく、ElectricDreamsに含まれるカスタムノード ● 将来的にはハードコートされたプロパティ名などを排除して汎用化し、 ネイティブコード化したバージョンを提供予定

58.

依存関係の明確化

59.

依存関係の明確化の例 PCGで作られた箱メッシュの上に 球メッシュを生成する

61.

タグフィルタ - 依存関係だけを伝える

62.

平面検出

63.

平面検出

64.

平面検出

65.

平面検出

66.

DiscardPointsInBumpyAreasの動作 起伏判定 四点の生成 法線判定

67.

DiscardPointsInBumpyAreasの動作

68.

DiscardPointsInBumpyAreasの動作

69.

DiscardPointsInBumpyAreasの動作

70.

DiscardPointsInBumpyAreasの動作 プロジェクションした結果、 青いバウンズと接触していない デコボコ プロジェクションしても 青いバウンズと接触している 平面

71.

DiscardPointsInBumpyAreasの動作 中心点の板を少し浮かせたもの エッジの4点を薄く広げた板

72.

DiscardPointsInBumpyAreasの動作 法線が傾いていて 浮かせた板に接触している デコボコ

73.

DiscardPointsInBumpyAreasの動作

74.

平面検出結果

75.

DiscardPointsInBumpyAreasについて ● [UE5.2]ElectricDreamsサンプルに含まれるサブグラフ ● [UE5.3]DiscardPointsOnIrregularSurfaceと改名して プラグインに標準搭載

76.

目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_Ditch ● PCG_LargeAssembly ● PCG_Forest

77.

PCGDemo_Ditch

78.

PCGDemo_Ditch概観 ボリュームによる除外 壁面アセンブリ選択と アートオーバーライド 樹木や草花の不均一化 壁面 アセンブリの ロードと加工 ツタの絡んだ枯れ木に置 き換え 外側との繋ぎの床生成 土手上の樹木や岩の生成 内側の荒地デカール

79.

ボリュームによる除外処理

80.

ボリュームによる除外処理 PCG_EXIT PCG_EXCLUDE

81.

初期姿勢の保存

82.

アセンブリの選択とアートオーバーライド

83.

アセンブリの選択とアートオーバーライド

84.

アセンブリの選択とアートオーバーライド

85.

中央部を一旦無視してみる

86.

アートオーバーライド

87.

2連Differenceパターン

88.

2連Differenceパターン PCGボリューム オーバーライドボリューム

89.

2連Differenceパターン

90.

Intersection(積集合)でもいいのでは?

91.

Intersection(積集合)でもいいのでは? ボリュームが二つ以上ある場合出力が無くなる 点群 ⋂ ボリューム1 ⋂ ボリューム2 ボリュームが一つならOK 点群 ⋂ ボリューム1

92.

IntersectionとInnerIntersection (UE5.3~) Intersection(5.2) -> InnerIntersection(5.3)に改名

93.

オーバーライド例

94.

賑やかしメッシュの間引き

95.

賑やかしメッシュの間引き

96.

思ったより単純かも?

97.

フラグ付きメッシュに回転&スケール適用 ApplyHierarcheyで参照される アトリビュートを追加

98.

コリジョンフラグによる最適化

99.

目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_Ditch ● PCG_LargeAssembly ● PCG_Forest

100.

LargeAssembly

101.

LargeAssembly概観 スプライン取得& アートオーバーライド ベース層 倒木 ベース層天井 ベース層上の木 上部断崖 断崖周囲の木

102.

スプラインの曲率

103.

スプラインの曲率

104.

スプラインの曲率 低曲率 10m毎 高曲率 5m毎

105.

ベース層用のアセンブリ 高曲率 w:5m 低曲率 w:10m 地すべり

106.

スプラインの曲率

107.

スプラインの曲率

108.

地すべりのアートオーバーライド

109.

制御ボリュームの表示

110.

地すべりのアートオーバライド

111.

断崖生成点の制御

112.

倒木生成

113.

2種類の倒木配置

114.

倒木の生成点

115.

向こう岸の壁情報

116.

倒木の生成点

117.

対岸の板と交差判定

118.

空間が広い方は地面に向けて少し傾ける

119.

垂れた蔓の回転を無効化

120.

倒木配置完了!

121.

目次 ● 外観 ● PCG_SmallAssembly ● PCG_Ground ● PCG_Ditch ● PCG_LargeAssembly ● PCG_Forest

122.

PCGDemo_Forest

123.

PCGDemo_Forest 遠くのフォグカード 大きめの樹木生成 小さめの樹木生成 除外エリア 取得 空白地生成 空白地の床など 断崖生成 断崖の根本周辺の岩 全域にまたがる岩や石など 雑草生成

124.

空地生成

125.

空地生成

126.

空地生成 樹木生成 空白地フィールド 空白地用メッシュ配置

127.

空地生成

128.

ImportDataTable

129.

ImportDataTable

130.

樹木のマテリアル分散制御

131.

樹木のマテリアル分散 メ ライ ン イ ト

132.

樹木の振り分け

133.

マテリアルのウェイト付き割り当て

134.

マテリアルのウェイト付き割り当て

135.

樹木のマテリアル分散制御

136.

FogCards

137.

FogCards

138.

UE5.3 https://portal.productboard.com/epicgames/1-unreal-engine-public-roadmap/

139.

リンク ● 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

140.

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