Unreal Engine 5 - Mass Frameworkを用いた群衆AI制御の解説【CEDEC 2022】

191.2K Views

August 24, 22

スライド概要

講演動画:https://youtu.be/0fGBa6C_Bjg

Unreal Engine5で新しく実装されたMass Frameworkとアップデートについて紹介します。
Mass FramewokrはThe Matrix Awakensデモ用に設計されAIシミュレーションに使用されました。
このシステムにより、リアルタイムに膨大なエージェントを効率的にシミュレートすることができます。
本講演では、そのシステムのアーキテクチャや実際にどのように使われているか、AI機能のアップデートについてお話します。
https://cedec.cesa.or.jp/2022/session/detail/227

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

Unreal Engine5 MassFrameworkによる群衆AI制御の解説 Epic Games Japan Ken Kuwano

2.

注意 ● 本講演では 開発中のUE5.1 (/UE5/Main)を利用 ● 紹介する機能はExperimentalの扱い ● UIなどが今後変更になる可能性があります ● 機能や名称などが今後変更になる可能性があります

5.

新機能 UE5.0 ではExperimentalとして以下の機能を追加しました ● StateTree ● SmartObjects ● ZoneGraph ● MassFramework (Entity, Gameplay, AI, Crowd)

6.

MassAIのイメージ ZoneGraph MassEntityConfig MassAgent MassSpawner SmartObjects StateTree

7.

目次 ● ● ● ● ● ● システム概要 StateTree SmartObjects ZoneGraph MassFramework その他

8.

システム概要

9.

システム概要 MassFrameworkによるAIシステムは主に以下の要素から構成 ● ● ● ● ● ● MassAgent MassSpawner SmartObjects StateTree ZoneGraph MassEntityConfig

10.

MassAI 動作 範囲 ZoneGraph SmartObjects MassAgent 行動 生成 定義 MassEntityConfig MassSpawner StateTree

11.

MassSpawner 全ては MassSpawner から開始 It all starts with the MassSpawner 何を生成するか? What to spawn? and 何処に生成するか? Where to spawn?

12.

MassSpawner 生成数 MassEntityConfig 生成位置

13.

Mass Entity Definition

14.

Mass Entity Definition

15.

MassSpawner Mass Spawnerはグループ毎に1つをレベル上に配置 City Sample の場合は複数のSpawnerを利用

16.

群衆 交通車両 駐車車両 Crowd Traffic vehicles Parked vehicles Zone Graph上に 密度ベース分布 Zone Graph上に 密度ベース分布 Density based distribution on the ZoneGraph Density based distribution on the ZoneGraph 点群分布 Point cloud distribution

18.

Cmd: MassTraffic.DebugViewerLOD 1

19.

StateTree

21.

StateTree とは ● AIの動作を定義できる、拡張性のある階層型ステートマシン ● 軽量の評価システム、メモリに厳重に格納 ● BehaviorTreeのSelector, StateMachineの State, Transition を組み合わせた ようなもの

22.

StateTree の概要

23.

StateTree を利用したAgentの動作

24.

StateTree を利用したAgentの動作 状態 state 徘徊 Wander 到達 SO利用 徘徊 Reach UseSO Wander パス準拠 前方 パス準拠 LookAlongPath (Glance:一瞬見る) LookAlongPath (Constant:注視) LookAlongPath (Glance:一瞬見る) アニメーション 歩行 ベンチ 歩行 Animation Walk BenchEnter Walk 視線 LookAt ※SO:SmartObjects

25.

StateTree の概要 Conditions Root Evaluators State Task Transition

26.

StateTree を利用したAgentの動作

27.

StateTree Idling:アイドル → Wander:徘徊

28.

StateTree Wander:徘徊 → インタラクション対象を見つける

29.

StateTree Wander:徘徊 → Reach:到達 対象のオブジェクトに到達

30.

StateTree Smart Object(ベンチ)で待機

31.

● Root ○ Reacting ■ ■ ■ ○ Flee:逃走先レーン捕捉、逃走、パス注視、完了時:Root HandleObstacle:障害物レーン捕捉、逃走、パス注視、完了時:Root Hit:3sec停止、衝突位置注視、衝突アニメーション再生、完了時:Root Idling ■ Smart Objects:オブジェクト要求、失敗でIdling ● ● ○ Use:オブジェクト使用、前方注視、完了時:Idling Wait at Intersection:空きスロット完了、失敗時:Wander/閉鎖時:Idling ■ ■ Reach Slot:スロットまで移動、パス注視、失敗時:Parent、完了時:次へ Wait:0sec停止、完了時:Wait ● ● ○ ○ Reach:オブジェクト捕捉、オブジェクトまで移動、パス注視、失敗時:Idling/成功時:次へ Wait Look:完了時:Wait Hit Wait Hit:衝突アニメーション再生、完了時:Root Wander:移動先レーン捕捉、移動、パス注視、失敗時:Idle/完了時:Idling/オブジェクト検出時:SmartObjects Idle:15sec停止、前方注視、完了時:Idling

32.

StateTree の使い方 - StateTree Content Browserで右クリック-> Artificial Intelligence -> State Tree 必要なTaskや状態遷移を追加

33.

StateTree の使い方 - MassEntityConfig MassEntityConfig の Traitsに ”StateTree”を選択して、利用した いStateTree アセットを設定 ⇒ Agentは自動的にここでセットさ れたStateTreeを利用して動作

34.

StateTree BehaviorTree

35.

StateTree vs BehaviorTree StateTree ● ● ● 状態ベースの行動定義 Mass Frameworkで利用可能 MassEntityConfigへ登録 共通 ● Agentの動作を定義する BehaviorTree ● ● ● ノードベースの行動定義 一般的なAIで利用可能 BehaviorTreeComponentへ登録

36.

SmartObjects

37.

SmartObjects とは ● インタラクション可能な配置されたオブジェクト ● ● AIが条件を満たした時にシナリオに応じたインタラクションをする アニメーションを連動して再生し動作に信憑性を持たせる https://docs.unrealengine.com/5.0/ja/smart-objects-in-unreal-engine---overview/ 【使用例】 ● ベンチ ● 信号機 ● 自動販売機

38.

SmartObjects の利用フロー 意思決定 ● StateTreeで予めSmartObjectsを実行するTask を用意、状態遷移によってTask実行の意思決定 ● StateTreeのTaskからSmartObject要求 (Claim SO)を実行 ● StateTreeのTaskからSmartObject利用 (Use SO)を実行 ● Subsystemを介してSmartObjectが有効化 ● ProcessorからContextual Animationによって オブジェクトに則したアニメーションを再生 Decision Making タスク実行 Play Task スマートオブジェクト要求 Claim Smart Object スマートオブジェクト利用 Use Smart Object 連動アニメーション Contextual Animation

39.

SmartObjects を利用したインタラクション

40.

SmartObjects へのアプローチ 状態 state 徘徊 Wander 到達 SO利用 徘徊 Reach UseSO Wander パス準拠 前方 パス準拠 LookAlongPath (Glance:一瞬見る) LookAlongPath (Constant:注視) LookAlongPath (Glance:一瞬見る) アニメーション 歩行 ベンチ 歩行 Animation Walk BenchEnter Walk 視線 LookAt ※SO:SmartObjects

41.

SmartObjects の使い方 - SmartObjectComp 追加

42.

SmartObjects の使い方 - SmartObjectComp SmartObject Componentの追加 SmartObject Definitionの設定

43.

SmartObjects の使い方 - SmartObjectDefinition SmartObject Definition作成 SmartObject Definitionの設定

44.

SmartObjects の使い方 - SmartObjectDefinition プレビュー スロット インタラクション情報 ビヘイビア インタラクション定義

45.

ContextualAnimation ● 静的および動的なワールド要素や他のキャラクターと相互作用するキャラク ターをサポートするためのツールとランタイムロジック ● アニメーションパック (UContextualAnimSceneAsset) を設定

46.

ContextualAnimation Editor

47.

ContextualAnimation Editor ● ● トラックのドアオープンと、キャラクターのドアオープンの複数AnimMotageを連動させる キャラクターの移動はMotionWarpingを使用

48.

SmartObjects の使い方 - MassEntityConfig SmartObject User の追加

49.

ZoneGraph

51.

ZoneGraph とは ● ● ● ● 軽量なナビゲーションシステム デザイン主導の流れを表現 セグメントで接続された回廊構造 実用的なAnnotation情報を持つ ○ ○ ○ 危険, 遮断 Smart Objects 稼働率, 密度 【使用例】 ● 歩道、交差点、車道

52.

ZoneGraph のユースケース

53.

ZoneGraph のユースケース ZoneGraphDisturbanceArea を使用した進行の遮断例

54.

ZoneGraph の使い方 1. Zone Shape Actorをレベルに配置 ● 形状も手動で調整 2. Lane の設定 ● Lane Profile, Tags等の設定 3. Zone Graphのビルド実行 ● [Build]->[Build ZoneGraph]を選択

55.

ZoneGraph の使い方 ZoneShapeComponent ZoneShapeを構成する、レーン情報を持つ コンポーネント ● Tags レーンの属性 ● Lane Profile レーンの属性、方向、幅などのプリセット

56.

ZoneGraph の使い方 - Project Settings

57.

ZoneGraph Debug Display: [P]key NavigationMesh

58.

ZoneGraph vs NavigationMesh ZoneGraph ● ● ● ● Mass Frameworkと連動 Mass Agentを生成する範囲や、Agentが 移動することが可能な領域を定義 PointToPointによるパス検索と移動 動的なレーンの変更は現在不可 共通 ● ● ● ● レベル上に配置、編集が可能 配置した後にビルドが必要 レベル上に専用のData Actorが作成される show navigationでデバッグ表示可能 NavigationMesh ● ● ● ● Navigation Systemと連動 AIControllerを持つPawnの行動・制御範 囲を定義 WayPointによるパス検索と移動 動的なメッシュの変更が可能

59.

MassFramework

60.

MassFramework Plugins MassEntity MassGameplay MassAI ● ● ● Framework Fundamentals Scheduling Composition Tools (Traits) ● ● Basic Subsystems etc ● ● ● In World Representation LOD Mechanisms StateTree ● ● ● Spawning Replication etc ● ● ● Navigation AI Behaviors ZoneGraph Interface ● ● ● SmartObjects Animation etc

61.

MassFramework Plugins MassEntity MassGameplay MassAI ● ● ● Framework Fundamentals Scheduling Composition Tools (Traits) ● ● Basic Subsystems etc ● ● ● In World Representation LOD Mechanisms StateTree ● ● ● Spawning Replication etc ● ● ● Navigation AI Behaviors ZoneGraph Interface ● ● ● SmartObjects Animation etc

62.

MassFramework Plugins MassEntity MassGameplay MassAI ● ● ● Framework Fundamentals Scheduling Composition Tools (Traits) ● ● Basic Subsystems etc ● ● ● In World Representation LOD Mechanisms StateTree ● ● ● Spawning Replication etc ● ● ● Navigation AI Behaviors ZoneGraph Interface ● ● ● SmartObjects Animation etc

63.

MassFramework Plugins MassEntity Engine Plugins MassGameplay MassAI City Sample Plugins MassCrowd MassTraffic ● Crowd and traffic behaviors

64.

OOP (オブジェクト指向プログラミング) UE ActorComponent モデル Update vs DOD (データ指向設計) UE MassFramework モデル コンポーネント アクター フラグメント エンティティ Component Actor Fragment Entity Update Memory Update Memory

65.

DOD - データ構成 (Fragment) 計算で使用する最小のデータ、処理ロジックは持たない 【意】断片、破片、かけら 【例】Transform、Velocity、LOD index、など FMassVelocityFragment FMassSimulationLODFragment float FMassVelocity Fragment FVector FMassSimulation LODFragment TEnumAsByte TEnumAsByte

66.

DOD - データ構成 (Trait) 特性を示す、Fragmentによって構築される 【意】特性、特徴 【例】移動する、注視される、等 UMassMovementTrait UMassMovement Trait UMassLookAtTargetTrait FMassVelocity Fragment FMassForce Fragment FMassLookAt TargetTag UMassLookAt Target Trait FTransform Fragment

67.

DOD - データ構成 (Entity) Fragmentのコレクション、処理ロジックは持たない 【意】本体、実在物、実体 【例】MassAgent (人、車) など Entity Trait Fragment Entity Trait Chunk Fragment Fragment Trait Fragment Fragment Trait Shared Fragment Tag

68.

DOD - データ構成 ID:10 ID:10 速度 歩行 Entity Walk Trait Velocity 力 Force Fragment Fragment Trait Fragment 回避係数 回避 Avoidand Scale Avoid 時間 Duration Entity Trait Fragment

69.

DOD - データ構成 (Archetype) ● Fragmentの構成が同じEntityはArchetypeに纏められる ● Entityの構成はランタイム時に発展しArchetypeの移行が定期的に発生 ● メモリはArchetype毎に固定サイズのかたまり(chunk)で割り当てられる ID:10 Archetype Entity Frament Trait Frament Trait Frament Entityはデータの一元管 理のためにFragmentを Archetypeに登録 Chunk Chunk Chunk

70.

DOD - 処理ロジック Archetype 処理ロジックはすべてのデータ構成から分離 ● ● ● Processor ○ Fragmentsの追加/削除 ○ 構成の変更はフレーム終了時に書き込み Subsystem ○ Processorの処理サポート EntityQuery ○ データの一部を素早くマッチングさせる Chunk Chunk EntityQuery Processor Subsystem Chunk

71.

DOD - まとめ ID:10 Entity Archetype ① Entityはデータの一元 管理のためにFragmentを Archetypeに登録 Frament Trait Frament Trait Frament ② Processorの毎フレーム の処理のリクエスト Chunk EntityQuery Processor Subsystem Chunk Chunk ③ EntityQueryを介しての Fragment設定や更新処理

72.

その他

73.

パフォーマンス ● 負荷(処理)は基本的にGameThreadで発生します ● ● Agent, Trait の数が多いほど負荷が高くなる ● ● ● 当然ですがGameThreadでのボトルネックになりやすくなります 純粋にStateTreeやProcessorの評価コストが増加することによります MassFrameworkは群衆AIの制御に特化した機能 ● AnimationやCharacterMovementの移動に掛かるコストそのものを抑止するものではない ● 一括での設定や制御のしやすさを特徴、メモリやキャッシュミスへの配慮 最適化ポイント ● LODを効果的に活用 ● 非同期処理の活用

74.

パフォーマンス CitySampleの1シーン (22.6ms) 1.8ms 0.2ms 3.4ms (約15% = 3.4/22.6ms) 1.4ms

75.

パフォーマンス Game Thread Frame UWorld_Tick TG_PrePhysics TG_EndPhysics TG_PostPhysics Executor Processor Executor Processor Executor Processor Mass StateTree Processor xxx Processor Foreground Worker#1 ProcessorTask Mass StateTree Processor Foreground Worker#2 ProcessorTask xxx Processor MassTrafficUpdate Intersections Processor xxx Processor MassTrafficPost PhysicsUpdate TrafficVechicles Processor MassTrafficUpdate DistanceTo NearestObstacle Processor xxx Processor

76.

デバッグ ● VisualLogger ● GameplayDebugger ● MassDebugger ● ConsoleCommand

77.

デバッグ - GameplayDebugger Cmd: EnableGDT

78.

デバッグ - VisualLogger Cmd: VisLog

79.

デバッグ - MassDebugger Cmd: mass.Debug

80.

デバッグ - ConsoleCommand ● EntityManager.PrintArchetypes Archetypeの内容をログ出力 ● mass.PrintEntityFragments <Entity> Entityの持つFragment情報をログ出力 ● ai.debug.mass.FreezeMovement 1 MassAgentの移動を停止 ● ai.debug.mass.SetDebugEntityRange デバッグ用トラッキングEntityの範囲指定 ● mass.LogArchetypes Archetyp ログ表示 ● mass.LogFragmentSizes 使用されているすべてのフラグメントタイプとそのサイズをログに出力 ● mass.LogMemoryUsage UMassEntitySubsystem で使用するメモリの総サイズをログに出力 ● massentities.EnableCommandDetailedStats 1 CSV profilerでキャプチャ時にMassCommandBufferのイベント名を出力

81.

デバッグ - ConsoleCommand CitySample.DisplayEntities 1

82.

まとめ ● Mass FrameworkはUE 5.0でExperimental ● ● ● ● ● 基本的な機能は動作しており高いパフォーマンスを発揮 現在の機能セットはまだ Unreal Actor に及ばない プロジェクトでの拡張にはC++での追加が必要 セットアップやデバッグが大変 今後も継続したアップデートを提供 ● ● ● ● MassEntity, StateTree, SmartObject, MassGemeplay等の正式サポート MassGemeplayのReplicationサポート Processorのマルチスレッド実行 (“mass.FullyParallel 1”) Spawning フロー、UI/UX、デバッグ機能の改善

83.

参考 [ドキュメント] AI (人工知能) https://docs.unrealengine.com/5.0/ja/artificial-intelligence-in-unreal-engine/ Large Numbers of Entities with Mass in UE5 | Feature Highlight | State of Unreal 2022 https://www.youtube.com/watch?v=f9q8A-9DvPo