Unreal Engine 5 - Chaos Destruction 入門【CEDEC 2022】

178.9K Views

August 24, 22

スライド概要

講演動画:https://youtu.be/XPnjleasU6Y

UE5からデフォルトの物理エンジンとしてChaosが利用できるようになりました。
Chaosの一つの機能として、エディターにインポートしたメッシュをお手軽に破砕してそれをアプリケーション内で自由に動かすことができるDestructionという仕組みがあります。今回はこのDestructionについて入門編となる情報をお届けしたいと思います。
https://cedec.cesa.or.jp/2022/session/detail/226

profile-image

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

シェア

またはPlayer版

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

関連スライド

各ページのテキスト
1.

Chaos Destruction 入門 Epic Games Japan Senior Software Engineer, Developer Relations 鈴木孝司

2.

はじめに ● UE5デフォルト物理エンジンChaos ● ● ● ● 物理シミュレーション RBAN クロスシミュレーション 破砕シミュレーション

3.

はじめに ● UE5デフォルト物理エンジンChaos ● ● ● ● ● 物理シミュレーション RBAN クロスシミュレーション 破砕シミュレーション アンリアルエンジン専用の組み込み機能 ○ エディタ内で完結したワークフロー ○ 透過的なソースコードアクセス

4.

はじめに

5.

はじめに

6.

目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム

7.

目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム (壊すものを) 準備する 破壊する 設定・調整する 使う 演出する 拡張する

8.

目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションコンポーネント ● フィールドシステム

9.

ジオメトリコレクション作成 ソースとなるメッシュ フラクチャモード > Newボタン 出力先を選んで ジオメトリコレクション メッシュをフラクチャーモードを通じてジオメトリコレクション(GC)に変換する

10.

ジオメトリコレクション ● 破砕したメッシュ情報を含むアセット ● 大雑把に言って破砕したスタティックメッシュ ● フラクチャーモードで破砕編集 ● マテリアルなどの設定パラメータ ● GeometryCollectionComponentを使って利用する ● ソースとなるメッシュ ● スタティックメッシュ ● 複数のスタティックメッシュ ● ジオメトリコレクション

11.

DCCツールによる事前破砕メッシュから作成 予め破片に分割したメッシュをエディタにインポートしてGCを作成 DCCツールで破砕して それぞれの破片を オブジェクトとして出力した FBX インポート て 択し 全選 に配置 ル レベ 破片を 全て選択したまま GC作成

12.

破壊レディメッシュが手元にある場合 豚×京都 ~UE4でなろう破壊神~ 【UE4 VFX Art Dive 2020】 https://www.docswell.com/s/EpicGamesJapan/ZRQ8R5-UE4_VFXAD20_PigAndKyoto

13.

エディタ内でStaticMeshを分解 モデリングモードのSplitツール ● エディタ内でパーツ分割 ● 破壊レディなメッシュであること ● 分解したメッシュをそのままGCへ

14.

モデリングモード ● モデリングツールで適切なメッシュに予め加工 ● ● ● ● ● ● 単純化 メッシュの干渉を修正 メッシュのマージ 頂点数の削減 内部構造の削除 不要な構造を削除 パーツ分解 リメッシュ 内部ポリゴン の削除 メッシュのマー ジ

15.

GCからGCを作成 ● 作業途中のGCから新しいGCを作る ● 中間状態の保存 作業途中の状態をソースとして新 しいGCを作る 作業途中のGC

16.

ジオメトリコレクションを作る時のルール

17.

ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと

18.

ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと ● メッシュが相互に浸食していないこと

19.

ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと ● メッシュが相互に浸食していないこと ● (大規模な破砕を行うなら特に)出来るだけモジュラー化する

20.

ジオメトリコレクションを作る時のルール ● メッシュ間に隙間が無いこと ● メッシュが相互に浸食していないこと ● (大規模な破砕を行うなら特に)出来るだけモジュラー化する ● 「閉じた」メッシュであること

21.

目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションコンポーネント ● フィールドシステム

22.

フラクチャーモードのチュートリアル Chaos Destruction - Fracture and Clustering https://dev.epicgames.com/community/learning/tutorials/k84m/chaos-destruction-fracture-and-clustering

23.

フラクチャーモードのショットカット ● Shift+B ● ● Shift+W / Shift+S ● ● 爆発量の変更 Escape ● ● フラクチャーレベルの変更 Shift+Q / Shift+E ● ● ボーンカラー表示のトグル ツール選択の解除 Alt + S ● シミュレートの開始

24.

クラスタリング 段階的な破片の分割 ● 剛体数を削減してパフォーマンスを維持する ● 壊れ方のコントロール Level 0 / Root Level 1 Level 2

25.

クラスタリング 段階的な破片の分割 ● 剛体数を削減してパフォーマンスを維持する ● 壊れ方のコントロール Level 0 / Root Level 1 Level 2

26.

クラスタリング : 複数回フラクチャを行う ● パラメータを調整しながら徐々に分割されるように破砕を繰り返す ● 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

27.

クラスタリング : オートクラスター ● はじめに細かい破片を作る ● オートクラスターツールでクラスタ数を指定してクラスタを作成 ● クラスター形状は自動になるが破片数などをコントロールしやすい ● 破片をドラッグ&ドロップで別のクラスタに移動可能 Level 0 / Root Level 1 破砕 Uniform fracture Volnoi site : 500 New Level 1 オートクラスター D&Dで クラスターを移動

28.

マテリアル ● ● 偶数番目は内部マテリアル デフォルトでタイリング用UVが 自動で割り当てられる 偶数番目が追加された 内部メッシュ用のマテリアルスロット

29.

AutoUVツール ● 内部のポリゴンに対してUVを設定 ● ● 箱型UV投影 外郭までの距離をベイク

30.

AutoUVツール ● 内部のポリゴンに対してUVを設定 ● ● 箱型UV投影 外郭までの距離をベイク

31.

AutoUVツール ● 内部のポリゴンに対してUVを設定 ● ● 箱型UV投影 外郭までの距離をベイク

32.

ヒストグラム表示 フラクチャ階層ビューのヒストグラムを展開する ● InspectedAttribute ● ● ● ● ● Show Clusters ● ● 子を持っているクラスターを表示するかどうか Show Rigids ● ● Volume : 体積 Level : 階層 InitialDynamicState : 初期ステート RelativeSize : 相対的な大きさ 末端のリーフノードを表示するかどうか Show Embedded Geometry ● 組み込みジオメトリを表示するか ツールチップで 体積を確認可能 (cm^3)

33.

GeoMergeツール 細かな破片の掃除用 ● Merge Selected : Off ● ● Merge Selected : On ● ● Relative Volume スライダーを使って どの程度の大きさの破片を対象にする かを選択する 選択した破片をマージする マージ先について ● ● UE5.0 : 自動選択のみ ● 隣接した最大の破片 ● 重心が近い破片 UE5.1~ : 選択した破片同士を マージできるように

34.

破片の組み込みメッシュ化 フラクチャ階層ビューで破片を ドラッグアンドドロップして 組み込みメッシュ化できる ● 組み込みメッシュはコリジョンを失う 緑色で表示されているのは組み 込みメッシュ

35.

Stateツール 破片の初期ステートを設定する ● 特定の破片をStatic化 ● アンカーフィールドによる固定と同じ効果

36.

目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム

37.

ジオメトリコレクションのレンダリング ● ● ● ● 1 GC = 1 Draw Call / Material はじめから破砕された状態 LOD無し Nanite対応

38.

Nanite NaniteメッシュをそのままGC化することはできない フラクチャー化作業が終わったらEnable Naniteにチェックを入れる

39.

ダメージスレッショルド クラスターレベル毎の破砕の閾値 ● GCコンポーネント ● ● クラスターレベル毎の設定 GCアセット ● こちらは参照されない

40.

ダメージスレッショルド(サイズ指定) ● GCコンポーネント ● ● bUseSizeSpecificDamageThreshold : true GCアセット ● Size Specific Data ● MaxSize (cm^3) ● Damage Threshold

41.

重量設定 ● GCアセット ● ● ● Mass Mass as density (kg/m^3 ) GCコンポーネント ● Mass(kg) は考慮されません

42.

物理マテリアルパラメータ ● 幾つかの物理パラメータはGCから参照される ● ● Friction - 摩擦係数 Restitution - 弾性係数

43.

コリジョン設定 ● Implicit-implicit ● ● ● 解析的コリジョン 低負荷でデータ量が少ない 低精度 ● Particle-implicit ● ● ● ● Level-Set限定 Signed distance field ボクセル ● + 質点群 高負荷でデータ量が大きい 高精度

44.

目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの使い方 ● フィールドシステム

45.

モジュール式のGC -Cluster Group Index複数のGCで一つの構造を構築 ● モジュール式のアセット ● メモリ・ストレージの節約 ● 同じClusterGroupIndexをもつGCが 一つの構造として扱われる

46.

キャッシュ ● シミュレーション結果を記録し再生する仕組み ● 大規模なシミュレーションをスムーズに表示するために有効

47.

キャッシュ無し

48.

キャッシュ有り

49.

キャッシュ - プラグインを有効化 ● Chaos Caching プラグインを有効化

50.

キャッシュ - セットアップ 1. Chaos Cache Manager アクターをレベルに追加 2. Chaos Cache Collection を 新規作成しアサイン 3. 対象のGCの数だけ Observed Components を追加 4. キャッシュ名を設定する 5. 対象のコンポーネントを選択 6. コンポーネント対象分 繰り返し

51.

キャッシュ - レコーディング ● 手順 ● ● ● ● ChaosCacheManagerのCacheModeをRECORDに エディタでシミュレート開始 キャプチャが終わったらPIEセッションを終了 CacheModeをPlayまたはStaticPoseに設定する レコーディング前にRECORD 終わったらPlayかStaticPoseに 設定したキャッシュ名 ● ChaosCacheCollectionアセット ● ● ● ● キャッシュ名 NumRecoredFrames 破片数 x フレーム数 = アセットサイズ 不要なデータが残っている場合は手動で削除 時間とフレーム数

52.

キャッシュ - Cache Mode : Play ● Cache Mode : Play ● Timed ● ● BeginPlayで開始 Trigger ● TriggerAll ● TriggerComponent / TriggerComponentByCache

53.

キャッシュ - StaticPose ● Cache Mode : Static Pose ● 主にシーケンサー用 ● StartTimeをトラックに

54.

キャッシュ - リファレンス 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

55.

Niagara連携 Chaosのソルバーによるシミュレーションで生成されたイベントを NiagaraDataInterfaceChaosDestructionを介してNiagaraで利用する NiagaraSystem DataInterafceChaosDestruction Chaos シミュレーション イベントデータ NiagaraSystem GC GC GC DataInterafceChaosDestruction

56.

Niagara連携 - プロジェクト設定 プロジェクト設定 ● Physics ● Chaos Physics ● Generate Collision Data ● Generate Break Data ● Generate Trailing Data ● Generate Contact Graph

57.

Niagara連携 どのイベントに反応するか イベントの 空間分割による分散の制御 生成数など 物理マテリアルによる フィルタ パラメータによるフィルタ 速度の加工など 位置によるフィルタ

58.

Niagara連携 - リファレンス Chaos Destruction - Niagara https://dev.epicgames.com/community/learning/tutorials/wrdj/chaos-destruction-niagara

59.

複数のソルバー 複数の物理界(ソルバー)を同時に扱う ● AChaosSolverActor を継承したBPを新規作成しワールドに置く ● 各GCのChaosSolverパラメータに上記BPを設定

60.

複数のソルバー ● 追加の物理界にはGCだけが存在している ● 通常のスタティックメッシュやプレイヤーは存在しない ● 専用の床用GCを配置する必要がある ● 複数のソルバーは並行して動作 デフォルトソルバーの処理 追加ソルバーの処理

61.

目次 ● ジオメトリコレクション作成 ● フラクチャ編集 ● ジオメトリコレクションのパラメータ ● ジオメトリコレクションの利用 ● フィールドシステム

62.

FieldSystem 剛体、GC、クロス、Niagara、Materialなどに干渉することができる 矩形の内部の剛体を思い通りに制御するブループリントアクター Chaos Destruction - Fields https://dev.epicgames.com/community/learning/tutorials/xdYp/chaos-destruction-fields

63.

主なFieldSystem アンカーフィールド GCに初期ステートを設定する

64.

主なFieldSystem アンカーフィールド マスターフィールド GCに初期ステートを設定する 物体にひずみを与えたり 運動を加える

65.

主なFieldSystem アンカーフィールド マスターフィールド スリープ/ディスエーブル フィールド GCに初期ステートを設定する 物体にひずみを与えたり 運動を加える パフォーマンス制御のために 運動を止めたりする

66.

組み込みのFieldSystem ● ● コンテンツブラウザ > Settings > ShowEngineContent にチェック Engine/Content/EditorResources/FieldNodes/FS_*

67.

アンカーフィールド ● GCがワールドに追加された時、範囲内の破片を固定するフィールド ● ● ● 範囲内の剛体のDynamicStateをStaticに GCのInititalization Fieldに予め設定しておく必要がある ● AddConstructionField ● 置いただけではダメ GC中で固定する剛体が決まっているなら、 前述のStateツールで設定しても良い

68.

マスターフィールド ● ● 歪み(ダメージ)の適用 ● External strain ● Internal strain 運動量の操作

69.

External Strain と Internal Strain ● External strain ● 指定した数値以下のダメージスレッショルドを持つクラスターを1段階破砕する ● ● ● 2段階以上一気に割りたい場合は Num Strain Hits を上げる 値は蓄積しない Internal strain ● 数値分ダメージスレッショルドを減算する (脆くなっていく) ● 脆くなった部分をExternal Strainで割る

70.

External Strain と Internal Strain

71.

Sleep / Disable Field ● 主にパフォーマンス制御用に範囲内の剛体を静止させるフィールド ● Sleep : スリープに入るための閾値を剛体に対して設定 ● Disable : 剛体を削除(コリジョンを削除)する閾値を剛体に対して設定 ● Kill : 閾値無しで即座に剛体を削除

72.

フィールドシステムはブループリント ● 自由にカスタマイズ可能 ● デフォルトの実装をコピーしてタイトル毎にカスタマイズして利用

73.

Add Field フィールドコンポーネントをワールドに追加します ● AddTransietField : 1回だけ適用 ● AddPersistentField : 有効化されている間毎Tick適用 ● AddConstructionField : アンカーフィールド用

74.

Physics Type 剛体中のどの変数を制御するかのタイプ名

75.

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/

76.

Physics Type

77.

Physics Type

78.

Field Node 引数 フィールドの範囲やパラメータの入力 ● ツリー状の構造 ● ● 構造内のそれぞれの要素はコンポーネントとして定義されている必要がある ほとんどの場合UCullingFieldが根本に置かれる

79.

Field Node 引数

80.

Field Node 引数

81.

Field Node 引数 UFieldSystemComponent Add FieldのFieldNode入力

82.

Field Node 引数 UCullingField コンポーネント 対象となる範囲 : Culling Field 適用する値 : Input Field

83.

Field Node 引数 U*****Falloff コンポーネント 範囲内であれば0を超える値を 範囲外であれば0を返す 一般的にはボリュームの ワールドトランスフォームが入力される

84.

Field Node 引数 Operator Fieldノードは LeftノードとRightノードに対して 演算をおこなう

85.

Meta Data 引数 フィールドに対してマスク情報などの追加情報を与える

86.

Meta Data 引数 特定のステートのフィルタ 例 : Sleepのみ 特定のオブジェクトをフィルタ 例 : Clothのみ 選択対象 例 : Disabledを含むかどうかなど

87.

フィールドシステムまとめ ● 基本的なフィールドはエンジンに組み込まれている ● フィールドはブループリントで実装されており自由にカスタマイズできる ● カスタイマイズする際はマスターフィールドから目的に近い部分を切り出し て始めてみる

88.

今後のChaos UE5 が搭載する Chaos シーン クエリと剛体エンジン https://www.unrealengine.com/ja/tech-blog/chaos-scene-queries-and-rigid-body-engine-in-ue5

89.

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