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
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Unreal Engine5 MassFrameworkによる群衆AI制御の解説 Epic Games Japan Ken Kuwano
注意 ● 本講演では 開発中のUE5.1 (/UE5/Main)を利用 ● 紹介する機能はExperimentalの扱い ● UIなどが今後変更になる可能性があります ● 機能や名称などが今後変更になる可能性があります
新機能 UE5.0 ではExperimentalとして以下の機能を追加しました ● StateTree ● SmartObjects ● ZoneGraph ● MassFramework (Entity, Gameplay, AI, Crowd)
MassAIのイメージ ZoneGraph MassEntityConfig MassAgent MassSpawner SmartObjects StateTree
目次 ● ● ● ● ● ● システム概要 StateTree SmartObjects ZoneGraph MassFramework その他
システム概要
システム概要 MassFrameworkによるAIシステムは主に以下の要素から構成 ● ● ● ● ● ● MassAgent MassSpawner SmartObjects StateTree ZoneGraph MassEntityConfig
MassAI 動作 範囲 ZoneGraph SmartObjects MassAgent 行動 生成 定義 MassEntityConfig MassSpawner StateTree
MassSpawner 全ては MassSpawner から開始 It all starts with the MassSpawner 何を生成するか? What to spawn? and 何処に生成するか? Where to spawn?
MassSpawner 生成数 MassEntityConfig 生成位置
Mass Entity Definition
Mass Entity Definition
MassSpawner Mass Spawnerはグループ毎に1つをレベル上に配置 City Sample の場合は複数のSpawnerを利用
群衆 交通車両 駐車車両 Crowd Traffic vehicles Parked vehicles Zone Graph上に 密度ベース分布 Zone Graph上に 密度ベース分布 Density based distribution on the ZoneGraph Density based distribution on the ZoneGraph 点群分布 Point cloud distribution
Cmd: MassTraffic.DebugViewerLOD 1
StateTree
StateTree とは ● AIの動作を定義できる、拡張性のある階層型ステートマシン ● 軽量の評価システム、メモリに厳重に格納 ● BehaviorTreeのSelector, StateMachineの State, Transition を組み合わせた ようなもの
StateTree の概要
StateTree を利用したAgentの動作
StateTree を利用したAgentの動作 状態 state 徘徊 Wander 到達 SO利用 徘徊 Reach UseSO Wander パス準拠 前方 パス準拠 LookAlongPath (Glance:一瞬見る) LookAlongPath (Constant:注視) LookAlongPath (Glance:一瞬見る) アニメーション 歩行 ベンチ 歩行 Animation Walk BenchEnter Walk 視線 LookAt ※SO:SmartObjects
StateTree の概要 Conditions Root Evaluators State Task Transition
StateTree を利用したAgentの動作
StateTree Idling:アイドル → Wander:徘徊
StateTree Wander:徘徊 → インタラクション対象を見つける
StateTree Wander:徘徊 → Reach:到達 対象のオブジェクトに到達
StateTree Smart Object(ベンチ)で待機
● 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
StateTree の使い方 - StateTree Content Browserで右クリック-> Artificial Intelligence -> State Tree 必要なTaskや状態遷移を追加
StateTree の使い方 - MassEntityConfig MassEntityConfig の Traitsに ”StateTree”を選択して、利用した いStateTree アセットを設定 ⇒ Agentは自動的にここでセットさ れたStateTreeを利用して動作
StateTree BehaviorTree
StateTree vs BehaviorTree StateTree ● ● ● 状態ベースの行動定義 Mass Frameworkで利用可能 MassEntityConfigへ登録 共通 ● Agentの動作を定義する BehaviorTree ● ● ● ノードベースの行動定義 一般的なAIで利用可能 BehaviorTreeComponentへ登録
SmartObjects
SmartObjects とは ● インタラクション可能な配置されたオブジェクト ● ● AIが条件を満たした時にシナリオに応じたインタラクションをする アニメーションを連動して再生し動作に信憑性を持たせる https://docs.unrealengine.com/5.0/ja/smart-objects-in-unreal-engine---overview/ 【使用例】 ● ベンチ ● 信号機 ● 自動販売機
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
SmartObjects を利用したインタラクション
SmartObjects へのアプローチ 状態 state 徘徊 Wander 到達 SO利用 徘徊 Reach UseSO Wander パス準拠 前方 パス準拠 LookAlongPath (Glance:一瞬見る) LookAlongPath (Constant:注視) LookAlongPath (Glance:一瞬見る) アニメーション 歩行 ベンチ 歩行 Animation Walk BenchEnter Walk 視線 LookAt ※SO:SmartObjects
SmartObjects の使い方 - SmartObjectComp 追加
SmartObjects の使い方 - SmartObjectComp SmartObject Componentの追加 SmartObject Definitionの設定
SmartObjects の使い方 - SmartObjectDefinition SmartObject Definition作成 SmartObject Definitionの設定
SmartObjects の使い方 - SmartObjectDefinition プレビュー スロット インタラクション情報 ビヘイビア インタラクション定義
ContextualAnimation ● 静的および動的なワールド要素や他のキャラクターと相互作用するキャラク ターをサポートするためのツールとランタイムロジック ● アニメーションパック (UContextualAnimSceneAsset) を設定
ContextualAnimation Editor
ContextualAnimation Editor ● ● トラックのドアオープンと、キャラクターのドアオープンの複数AnimMotageを連動させる キャラクターの移動はMotionWarpingを使用
SmartObjects の使い方 - MassEntityConfig SmartObject User の追加
ZoneGraph
ZoneGraph とは ● ● ● ● 軽量なナビゲーションシステム デザイン主導の流れを表現 セグメントで接続された回廊構造 実用的なAnnotation情報を持つ ○ ○ ○ 危険, 遮断 Smart Objects 稼働率, 密度 【使用例】 ● 歩道、交差点、車道
ZoneGraph のユースケース
ZoneGraph のユースケース ZoneGraphDisturbanceArea を使用した進行の遮断例
ZoneGraph の使い方 1. Zone Shape Actorをレベルに配置 ● 形状も手動で調整 2. Lane の設定 ● Lane Profile, Tags等の設定 3. Zone Graphのビルド実行 ● [Build]->[Build ZoneGraph]を選択
ZoneGraph の使い方 ZoneShapeComponent ZoneShapeを構成する、レーン情報を持つ コンポーネント ● Tags レーンの属性 ● Lane Profile レーンの属性、方向、幅などのプリセット
ZoneGraph の使い方 - Project Settings
ZoneGraph Debug Display: [P]key NavigationMesh
ZoneGraph vs NavigationMesh ZoneGraph ● ● ● ● Mass Frameworkと連動 Mass Agentを生成する範囲や、Agentが 移動することが可能な領域を定義 PointToPointによるパス検索と移動 動的なレーンの変更は現在不可 共通 ● ● ● ● レベル上に配置、編集が可能 配置した後にビルドが必要 レベル上に専用のData Actorが作成される show navigationでデバッグ表示可能 NavigationMesh ● ● ● ● Navigation Systemと連動 AIControllerを持つPawnの行動・制御範 囲を定義 WayPointによるパス検索と移動 動的なメッシュの変更が可能
MassFramework
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
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
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
MassFramework Plugins MassEntity Engine Plugins MassGameplay MassAI City Sample Plugins MassCrowd MassTraffic ● Crowd and traffic behaviors
OOP (オブジェクト指向プログラミング) UE ActorComponent モデル Update vs DOD (データ指向設計) UE MassFramework モデル コンポーネント アクター フラグメント エンティティ Component Actor Fragment Entity Update Memory Update Memory
DOD - データ構成 (Fragment) 計算で使用する最小のデータ、処理ロジックは持たない 【意】断片、破片、かけら 【例】Transform、Velocity、LOD index、など FMassVelocityFragment FMassSimulationLODFragment float FMassVelocity Fragment FVector FMassSimulation LODFragment TEnumAsByte TEnumAsByte
DOD - データ構成 (Trait) 特性を示す、Fragmentによって構築される 【意】特性、特徴 【例】移動する、注視される、等 UMassMovementTrait UMassMovement Trait UMassLookAtTargetTrait FMassVelocity Fragment FMassForce Fragment FMassLookAt TargetTag UMassLookAt Target Trait FTransform Fragment
DOD - データ構成 (Entity) Fragmentのコレクション、処理ロジックは持たない 【意】本体、実在物、実体 【例】MassAgent (人、車) など Entity Trait Fragment Entity Trait Chunk Fragment Fragment Trait Fragment Fragment Trait Shared Fragment Tag
DOD - データ構成 ID:10 ID:10 速度 歩行 Entity Walk Trait Velocity 力 Force Fragment Fragment Trait Fragment 回避係数 回避 Avoidand Scale Avoid 時間 Duration Entity Trait Fragment
DOD - データ構成 (Archetype) ● Fragmentの構成が同じEntityはArchetypeに纏められる ● Entityの構成はランタイム時に発展しArchetypeの移行が定期的に発生 ● メモリはArchetype毎に固定サイズのかたまり(chunk)で割り当てられる ID:10 Archetype Entity Frament Trait Frament Trait Frament Entityはデータの一元管 理のためにFragmentを Archetypeに登録 Chunk Chunk Chunk
DOD - 処理ロジック Archetype 処理ロジックはすべてのデータ構成から分離 ● ● ● Processor ○ Fragmentsの追加/削除 ○ 構成の変更はフレーム終了時に書き込み Subsystem ○ Processorの処理サポート EntityQuery ○ データの一部を素早くマッチングさせる Chunk Chunk EntityQuery Processor Subsystem Chunk
DOD - まとめ ID:10 Entity Archetype ① Entityはデータの一元 管理のためにFragmentを Archetypeに登録 Frament Trait Frament Trait Frament ② Processorの毎フレーム の処理のリクエスト Chunk EntityQuery Processor Subsystem Chunk Chunk ③ EntityQueryを介しての Fragment設定や更新処理
その他
パフォーマンス ● 負荷(処理)は基本的にGameThreadで発生します ● ● Agent, Trait の数が多いほど負荷が高くなる ● ● ● 当然ですがGameThreadでのボトルネックになりやすくなります 純粋にStateTreeやProcessorの評価コストが増加することによります MassFrameworkは群衆AIの制御に特化した機能 ● AnimationやCharacterMovementの移動に掛かるコストそのものを抑止するものではない ● 一括での設定や制御のしやすさを特徴、メモリやキャッシュミスへの配慮 最適化ポイント ● LODを効果的に活用 ● 非同期処理の活用
パフォーマンス CitySampleの1シーン (22.6ms) 1.8ms 0.2ms 3.4ms (約15% = 3.4/22.6ms) 1.4ms
パフォーマンス 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
デバッグ ● VisualLogger ● GameplayDebugger ● MassDebugger ● ConsoleCommand
デバッグ - GameplayDebugger Cmd: EnableGDT
デバッグ - VisualLogger Cmd: VisLog
デバッグ - MassDebugger Cmd: mass.Debug
デバッグ - 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のイベント名を出力
デバッグ - ConsoleCommand CitySample.DisplayEntities 1
まとめ ● Mass FrameworkはUE 5.0でExperimental ● ● ● ● ● 基本的な機能は動作しており高いパフォーマンスを発揮 現在の機能セットはまだ Unreal Actor に及ばない プロジェクトでの拡張にはC++での追加が必要 セットアップやデバッグが大変 今後も継続したアップデートを提供 ● ● ● ● MassEntity, StateTree, SmartObject, MassGemeplay等の正式サポート MassGemeplayのReplicationサポート Processorのマルチスレッド実行 (“mass.FullyParallel 1”) Spawning フロー、UI/UX、デバッグ機能の改善
参考 [ドキュメント] 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