PaperSloth’s diary

主にゲーム開発関連についての記事を書きます。

UE4 新しい物理破壊システムChaos Destructionを使ってみよう

環境

UE4.26.0 Preview1
エンジンビルドなしでようやくChaosが使えるようになりました。
とはいえ、Preview環境ですのでまだまだ不安定な部分はあるかもしれません。

概要

Chaos自体はUE4.23以降でもエンジンビルドをすることで利用は可能です。
エンジンビルドとはいってもTarget.csを少しいじる程度ですので、複雑なことはありません。
詳細は以下のdocをご覧ください。
Chaos Destruction Overview | Unreal Engine Documentation

さて、そんなChaosですがUE4.26からは本格的に利用できるようになりそうです。
Unreal Engine 4.26 Preview 1 がリリースされました - Unreal Engine

UE4.26.0 Preview 1の概要は以下から。
Unreal Engine 4.26 Preview - Unreal Engine Forums

Chaos関連だけでもいくつかの記述がありますね。
・Chaos Ragdoll/Physical Animation (Beta).
・Chaos RBAN(Chaos Rigid Body Animation Nodes).
・Chaos Cloth.
・Chaos Vehicle (Experimental).
従来のPhysXからChaosがエンジンのデフォルト機能となることや
機能の更新されたRagdollやClothシュミレーションに加えて、新しく追加されたChaos Vehicleなど。
ワークフローに大きな変更を与えずに使用できるというのも大変嬉しい限りですね。

それでは早速Chaosを使ってみましょう。

Chaosで破壊可能なオブジェクトを用意する

まずはChaos関連のPluginが有効になっていることを確認します。
f:id:PaperSloth:20200926150852p:plain

このうち、Chaos CachingとChaosVehicleはデフォルトでは無効ですが今回は使用しないためそのままで問題ないです。

まずは破壊するためのStatic MeshをLevel上に配置します。
今回は「Starter Content」に含まれている「SM_Chiar」を使用します。
f:id:PaperSloth:20200926155744p:plain

次に「Modes」を「Fracture」に切り替えます。
Shift + 6でも可能です。
f:id:PaperSloth:20200926151533p:plain

Fracture Modeが有効になった状態でLevel上の「SM_Chair」を選択して
Fractureの「New」を押下します。
f:id:PaperSloth:20200926151644p:plain

するとGeometry Collectionの保存ダイアログが開きますので適当な場所に保存します。
名前は「GC_Chair」としました。
f:id:PaperSloth:20200926155844p:plain

ここまでの作業を行うとLevel上のStaticMeshがGeometryCollectionActorに置換されます。
f:id:PaperSloth:20200926155917p:plain
また、今回は単一のStaticMeshからGeometryCollectionを作成しましたが
Level上の複数のStaticMeshを選択してから作成することで
複数のStaticMeshが登録された1つのGeometryCollectionを作成することも可能です。

続いてVoronoi Fractureの作成を行います。
いくつか種類がありますが、今回は「Uniform Voronoi Fracture」を使用します。
f:id:PaperSloth:20200926152438p:plain

Uniformを選択した状態だと「Fracture」Mode Panelの表示が以下のようになりますので
Level上の「GC_Chair」を選択した状態で「Fracture」を押下することで適用が可能です。
また「Uniform Voronoi」のmin/maxの値で分割数を変更することが出来ます。
f:id:PaperSloth:20200926154549p:plain

するとFractureのOutlinerのGC_Chair.Geometry.../SM_Chairだったところに
SM_Chair_0, 1...19が追加されます。
f:id:PaperSloth:20200926160024p:plain

分割度合いの確認のために「GC_Chiar」を選択した状態で
「Explode」の値をスライドして確認してみましょう。
f:id:PaperSloth:20200926160106g:plain
また、「Colors」を有効化している場合は以下のような見た目になります。
f:id:PaperSloth:20200926160132g:plain


実際にPlayしてみると破壊されることが確認できました。
f:id:PaperSloth:20200926161117g:plain

また、GeometryCollectionのMaterialかLevel上のGeometryCollectionActorのMarerialで
断面部分のMaterialを変更することが可能です。
f:id:PaperSloth:20200926161736p:plain
f:id:PaperSloth:20200926161749p:plain

以上で作成完了です!

追記 Implicit Typeについて (2020/09/07)

Geometry Collection内のImplicit Typeについて
GC_Chair」を開くとChaos Physicsについての設定項目がいくつかあります。
その中でもコリジョン構造を初期化するための種類として「Implicit Type」があります。
f:id:PaperSloth:20200927083706p:plain
大きく分けて2種類あり、Analytic Collision VolumesとLevel Set Volumesの2種類に分けることができます。
Analytic Collision VolumesはBox, Sphere, Capsuleの3種類あり
BoxはBounding Boxと同様の方法で剛体をラップされており
Sphere, Capsuleは剛体に収まるように配置されるようです。
CapsuleUE4.26.0 Preview 1段階でも非サポートでエディターがクラッシュします。
Boxの挙動
f:id:PaperSloth:20200927084021g:plain
Sphereの挙動
f:id:PaperSloth:20200927084121g:plain

最後にLevel Set VolumeですがこちらはAnalytic Collision Volumesより正確で
Min/Max Level Set Volumeからパフォーマンス調整が可能なようです。
また、Level Setを使用する場合は「Collision Type」を「Particle-Implicit」に設定する必要があります
f:id:PaperSloth:20200927084730p:plain
以下Level Set Volumeの説明をドキュメントより引用

Voxel化されたGridを使用して剛体をサンプリングし、Geometryの符号付きDistance Fieldを生成します。

Level Setの挙動
f:id:PaperSloth:20200927084524g:plain