181.1K Views
August 24, 22
スライド概要
講演動画:https://youtu.be/XPnjleasU6Y
UE5からデフォルトの物理エンジンとしてChaosが利用できるようになりました。
Chaosの一つの機能として、エディターにインポートしたメッシュをお手軽に破砕してそれをアプリケーション内で自由に動かすことができるDestructionという仕組みがあります。今回はこのDestructionについて入門編となる情報をお届けしたいと思います。
https://cedec.cesa.or.jp/2022/session/detail/226
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Chaos Destruction 入門 Epic Games Japan Senior Software Engineer, Developer Relations 鈴木孝司
はじめに ● UE5デフォルト物理エンジンChaos ● ● ● ● 物理シミュレーション RBAN クロスシミュレーション 破砕シミュレーション
はじめに ● UE5デフォルト物理エンジンChaos ● ● ● ● ● 物理シミュレーション RBAN クロスシミュレーション 破砕シミュレーション アンリアルエンジン専用の組み込み機能 ○ エディタ内で完結したワークフロー ○ 透過的なソースコードアクセス
はじめに
はじめに
目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム
目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム (壊すものを) 準備する 破壊する 設定・調整する 使う 演出する 拡張する
目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションコンポーネント ● フィールドシステム
ジオメトリコレクション作成 ソースとなるメッシュ フラクチャモード > Newボタン 出力先を選んで ジオメトリコレクション メッシュをフラクチャーモードを通じてジオメトリコレクション(GC)に変換する
ジオメトリコレクション ● 破砕したメッシュ情報を含むアセット ● 大雑把に言って破砕したスタティックメッシュ ● フラクチャーモードで破砕編集 ● マテリアルなどの設定パラメータ ● GeometryCollectionComponentを使って利用する ● ソースとなるメッシュ ● スタティックメッシュ ● 複数のスタティックメッシュ ● ジオメトリコレクション
DCCツールによる事前破砕メッシュから作成 予め破片に分割したメッシュをエディタにインポートしてGCを作成 DCCツールで破砕して それぞれの破片を オブジェクトとして出力した FBX インポート て 択し 全選 に配置 ル レベ 破片を 全て選択したまま GC作成
破壊レディメッシュが手元にある場合 豚×京都 ~UE4でなろう破壊神~ 【UE4 VFX Art Dive 2020】 https://www.docswell.com/s/EpicGamesJapan/ZRQ8R5-UE4_VFXAD20_PigAndKyoto
エディタ内でStaticMeshを分解 モデリングモードのSplitツール ● エディタ内でパーツ分割 ● 破壊レディなメッシュであること ● 分解したメッシュをそのままGCへ
モデリングモード ● モデリングツールで適切なメッシュに予め加工 ● ● ● ● ● ● 単純化 メッシュの干渉を修正 メッシュのマージ 頂点数の削減 内部構造の削除 不要な構造を削除 パーツ分解 リメッシュ 内部ポリゴン の削除 メッシュのマー ジ
GCからGCを作成 ● 作業途中のGCから新しいGCを作る ● 中間状態の保存 作業途中の状態をソースとして新 しいGCを作る 作業途中のGC
ジオメトリコレクションを作る時のルール
ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと
ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと ● メッシュが相互に浸食していないこと
ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと ● メッシュが相互に浸食していないこと ● (大規模な破砕を行うなら特に)出来るだけモジュラー化する
ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと ● メッシュが相互に浸食していないこと ● (大規模な破砕を行うなら特に)出来るだけモジュラー化する ● 「閉じた」メッシュであること
目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションコンポーネント ● フィールドシステム
フラクチャーモードのチュートリアル Chaos Destruction - Fracture and Clustering https://dev.epicgames.com/community/learning/tutorials/k84m/chaos-destruction-fracture-and-clustering
フラクチャーモードのショットカット ● Shift+B ● ● Shift+W / Shift+S ● ● 爆発量の変更 Escape ● ● フラクチャーレベルの変更 Shift+Q / Shift+E ● ● ボーンカラー表示のトグル ツール選択の解除 Alt + S ● シミュレートの開始
クラスタリング 段階的な破片の分割 ● 剛体数を削減してパフォーマンスを維持する ● 壊れ方のコントロール Level 0 / Root Level 1 Level 2
クラスタリング 段階的な破片の分割 ● 剛体数を削減してパフォーマンスを維持する ● 壊れ方のコントロール Level 0 / Root Level 1 Level 2
クラスタリング : 複数回フラクチャを行う ● パラメータを調整しながら徐々に分割されるように破砕を繰り返す ● Level 1 の形状を調整しやすい ● 破砕のたびにGCから新たなGCを作っておくと巻き戻しを減らせる Level 1 Level 0 / Root Level 2 破砕 破砕 Uniform fracture Volnoi site : 24 Level1を全選択 Uniform fracture Volnoi site : 400 Group Fracturee : On
クラスタリング : オートクラスター ● はじめに細かい破片を作る ● オートクラスターツールでクラスタ数を指定してクラスタを作成 ● クラスター形状は自動になるが破片数などをコントロールしやすい ● 破片をドラッグ&ドロップで別のクラスタに移動可能 Level 0 / Root Level 1 破砕 Uniform fracture Volnoi site : 500 New Level 1 オートクラスター D&Dで クラスターを移動
マテリアル ● ● 偶数番目は内部マテリアル デフォルトでタイリング用UVが 自動で割り当てられる 偶数番目が追加された 内部メッシュ用のマテリアルスロット
AutoUVツール ● 内部のポリゴンに対してUVを設定 ● ● 箱型UV投影 外郭までの距離をベイク
AutoUVツール ● 内部のポリゴンに対してUVを設定 ● ● 箱型UV投影 外郭までの距離をベイク
AutoUVツール ● 内部のポリゴンに対してUVを設定 ● ● 箱型UV投影 外郭までの距離をベイク
ヒストグラム表示 フラクチャ階層ビューのヒストグラムを展開する ● InspectedAttribute ● ● ● ● ● Show Clusters ● ● 子を持っているクラスターを表示するかどうか Show Rigids ● ● Volume : 体積 Level : 階層 InitialDynamicState : 初期ステート RelativeSize : 相対的な大きさ 末端のリーフノードを表示するかどうか Show Embedded Geometry ● 組み込みジオメトリを表示するか ツールチップで 体積を確認可能 (cm^3)
GeoMergeツール 細かな破片の掃除用 ● Merge Selected : Off ● ● Merge Selected : On ● ● Relative Volume スライダーを使って どの程度の大きさの破片を対象にする かを選択する 選択した破片をマージする マージ先について ● ● UE5.0 : 自動選択のみ ● 隣接した最大の破片 ● 重心が近い破片 UE5.1~ : 選択した破片同士を マージできるように
破片の組み込みメッシュ化 フラクチャ階層ビューで破片を ドラッグアンドドロップして 組み込みメッシュ化できる ● 組み込みメッシュはコリジョンを失う 緑色で表示されているのは組み 込みメッシュ
Stateツール 破片の初期ステートを設定する ● 特定の破片をStatic化 ● アンカーフィールドによる固定と同じ効果
目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム
ジオメトリコレクションのレンダリング ● ● ● ● 1 GC = 1 Draw Call / Material はじめから破砕された状態 LOD無し Nanite対応
Nanite NaniteメッシュをそのままGC化することはできない フラクチャー化作業が終わったらEnable Naniteにチェックを入れる
ダメージスレッショルド クラスターレベル毎の破砕の閾値 ● GCコンポーネント ● ● クラスターレベル毎の設定 GCアセット ● こちらは参照されない
ダメージスレッショルド(サイズ指定) ● GCコンポーネント ● ● bUseSizeSpecificDamageThreshold : true GCアセット ● Size Specific Data ● MaxSize (cm^3) ● Damage Threshold
重量設定 ● GCアセット ● ● ● Mass Mass as density (kg/m^3 ) GCコンポーネント ● Mass(kg) は考慮されません
物理マテリアルパラメータ ● 幾つかの物理パラメータはGCから参照される ● ● Friction - 摩擦係数 Restitution - 弾性係数
コリジョン設定 ● Implicit-implicit ● ● ● 解析的コリジョン 低負荷でデータ量が少ない 低精度 ● Particle-implicit ● ● ● ● Level-Set限定 Signed distance field ボクセル ● + 質点群 高負荷でデータ量が大きい 高精度
目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム
モジュール式のGC -Cluster Group Index複数のGCで一つの構造を構築 ● モジュール式のアセット ● メモリ・ストレージの節約 ● 同じClusterGroupIndexをもつGCが 一つの構造として扱われる
キャッシュ ● シミュレーション結果を記録し再生する仕組み ● 大規模なシミュレーションをスムーズに表示するために有効
キャッシュ無し
キャッシュ有り
キャッシュ - プラグインを有効化 ● Chaos Caching プラグインを有効化
キャッシュ - セットアップ 1. Chaos Cache Manager アクターをレベルに追加 2. Chaos Cache Collection を 新規作成しアサイン 3. 対象のGCの数だけ Observed Components を追加 4. キャッシュ名を設定する 5. 対象のコンポーネントを選択 6. コンポーネント対象分 繰り返し
キャッシュ - レコーディング ● 手順 ● ● ● ● ChaosCacheManagerのCacheModeをRECORDに エディタでシミュレート開始 キャプチャが終わったらPIEセッションを終了 CacheModeをPlayまたはStaticPoseに設定する レコーディング前にRECORD 終わったらPlayかStaticPoseに 設定したキャッシュ名 ● ChaosCacheCollectionアセット ● ● ● ● キャッシュ名 NumRecoredFrames 破片数 x フレーム数 = アセットサイズ 不要なデータが残っている場合は手動で削除 時間とフレーム数
キャッシュ - Cache Mode : Play ● Cache Mode : Play ● Timed ● ● BeginPlayで開始 Trigger ● TriggerAll ● TriggerComponent / TriggerComponentByCache
キャッシュ - StaticPose ● Cache Mode : Static Pose ● 主にシーケンサー用 ● StartTimeをトラックに
キャッシュ - リファレンス Chaos Destruction - Case Studies https://dev.epicgames.com/community/learning/tutorials/4Vxq/chaos-destructi on-case-studies Chaos Destruction For Linear Content https://dev.epicgames.com/community/learning/tutorials/qzpl/unreal-engine-ch aos-destruction-for-linear-content
Niagara連携 Chaosのソルバーによるシミュレーションで生成されたイベントを NiagaraDataInterfaceChaosDestructionを介してNiagaraで利用する NiagaraSystem DataInterafceChaosDestruction Chaos シミュレーション イベントデータ NiagaraSystem GC GC GC DataInterafceChaosDestruction
Niagara連携 - プロジェクト設定 プロジェクト設定 ● Physics ● Chaos Physics ● Generate Collision Data ● Generate Break Data ● Generate Trailing Data ● Generate Contact Graph
Niagara連携 どのイベントに反応するか イベントの 空間分割による分散の制御 生成数など 物理マテリアルによる フィルタ パラメータによるフィルタ 速度の加工など 位置によるフィルタ
Niagara連携 - リファレンス Chaos Destruction - Niagara https://dev.epicgames.com/community/learning/tutorials/wrdj/chaos-destruction-niagara
複数のソルバー 複数の物理界(ソルバー)を同時に扱う ● AChaosSolverActor を継承したBPを新規作成しワールドに置く ● 各GCのChaosSolverパラメータに上記BPを設定
複数のソルバー ● 追加の物理界にはGCだけが存在している ● 通常のスタティックメッシュやプレイヤーは存在しない ● 専用の床用GCを配置する必要がある ● 複数のソルバーは並行して動作 デフォルトソルバーの処理 追加ソルバーの処理
目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの利用 ● フィールドシステム
FieldSystem 剛体、GC、クロス、Niagara、Materialなどに干渉することができる 矩形の内部の剛体を思い通りに制御するブループリントアクター Chaos Destruction - Fields https://dev.epicgames.com/community/learning/tutorials/xdYp/chaos-destruction-fields
主なFieldSystem アンカーフィールド GCに初期ステートを設定する
主なFieldSystem アンカーフィールド マスターフィールド GCに初期ステートを設定する 物体にひずみを与えたり 運動を加える
主なFieldSystem アンカーフィールド マスターフィールド スリープ/ディスエーブル フィールド GCに初期ステートを設定する 物体にひずみを与えたり 運動を加える パフォーマンス制御のために 運動を止めたりする
組み込みのFieldSystem ● ● コンテンツブラウザ > Settings > ShowEngineContent にチェック Engine/Content/EditorResources/FieldNodes/FS_*
アンカーフィールド ● GCがワールドに追加された時、範囲内の破片を固定するフィールド ● ● ● 範囲内の剛体のDynamicStateをStaticに GCのInititalization Fieldに予め設定しておく必要がある ● AddConstructionField ● 置いただけではダメ GC中で固定する剛体が決まっているなら、 前述のStateツールで設定しても良い
マスターフィールド ● ● 歪み(ダメージ)の適用 ● External strain ● Internal strain 運動量の操作
External Strain と Internal Strain ● External strain ● 指定した数値以下のダメージスレッショルドを持つクラスターを1段階破砕する ● ● ● 2段階以上一気に割りたい場合は Num Strain Hits を上げる 値は蓄積しない Internal strain ● 数値分ダメージスレッショルドを減算する (脆くなっていく) ● 脆くなった部分をExternal Strainで割る
External Strain と Internal Strain
Sleep / Disable Field ● 主にパフォーマンス制御用に範囲内の剛体を静止させるフィールド ● Sleep : スリープに入るための閾値を剛体に対して設定 ● Disable : 剛体を削除(コリジョンを削除)する閾値を剛体に対して設定 ● Kill : 閾値無しで即座に剛体を削除
フィールドシステムはブループリント ● 自由にカスタマイズ可能 ● デフォルトの実装をコピーしてタイトル毎にカスタマイズして利用
Add Field フィールドコンポーネントをワールドに追加します ● AddTransietField : 1回だけ適用 ● AddPersistentField : 有効化されている間毎Tick適用 ● AddConstructionField : アンカーフィールド用
Physics Type 剛体中のどの変数を制御するかのタイプ名
Physics Type 剛体中のどの変数を制御するかのタイプ名 タイプ毎に入力できる型が決まっている ● 例 ● ● ● DynamicState : int LinearForce : vector ExternalStrain : scalar Physics Field の参照ガイド https://docs.unrealengine.com/5.0/ja/reference -guide-for-physics-field-in-unreal-engine/
Physics Type
Physics Type
Field Node 引数 フィールドの範囲やパラメータの入力 ● ツリー状の構造 ● ● 構造内のそれぞれの要素はコンポーネントとして定義されている必要がある ほとんどの場合UCullingFieldが根本に置かれる
Field Node 引数
Field Node 引数
Field Node 引数 UFieldSystemComponent Add FieldのFieldNode入力
Field Node 引数 UCullingField コンポーネント 対象となる範囲 : Culling Field 適用する値 : Input Field
Field Node 引数 U*****Falloff コンポーネント 範囲内であれば0を超える値を 範囲外であれば0を返す 一般的にはボリュームの ワールドトランスフォームが入力される
Field Node 引数 Operator Fieldノードは LeftノードとRightノードに対して 演算をおこなう
Meta Data 引数 フィールドに対してマスク情報などの追加情報を与える
Meta Data 引数 特定のステートのフィルタ 例 : Sleepのみ 特定のオブジェクトをフィルタ 例 : Clothのみ 選択対象 例 : Disabledを含むかどうかなど
フィールドシステムまとめ ● 基本的なフィールドはエンジンに組み込まれている ● フィールドはブループリントで実装されており自由にカスタマイズできる ● カスタイマイズする際はマスターフィールドから目的に近い部分を切り出し て始めてみる
今後のChaos UE5 が搭載する Chaos シーン クエリと剛体エンジン https://www.unrealengine.com/ja/tech-blog/chaos-scene-queries-and-rigid-body-engine-in-ue5
ご清聴ありがとうございました