はじめに
この記事はUnreal Engine 4 (UE4) その3 Advent Calendar 2020
25日目ラストの記事になります。
私の方からはChaosのフィールドシステムについて書いていきます。
※UE4.26のgithubからの接続してエンジンビルドしたものを使用しています。
※新しく追加されたUE4.26Chaosではビルドしなくても同様のことが行えます。
※長々と説明していますが間違いやミスなどがあるかもしれないのでご注意ください。
- ■目次
- ・Fieldシステムとは
- ・プラグイン設定とGeometryCollectionの準備
- ・AnchorとClusterStrainについて
- ・Fourceについて
- ・Sleep・Disable・Killについて
- ・参考にしたサイトなどの紹介
Fieldシステムとは
FieldシステムとはGeometryCollection(Chaosの破砕表現を行うもの)に対して、
力を加えて破砕したり、剛体の制御のONとOFFなどの設定を行います。
Fieldシステムのプロジェクトは公式でサンプルも紹介されています。
主に設定するFieldシステムや応用方法などを紹介していきます。
プラグイン設定とGeometryCollectionの準備
Fieldシステムの設定については、
プラグインからFieldSystemをONにします。
プラグインを設定したら破砕させるための、
GeometryCollectionを作成していきます。
※UE4.26のChaosプレビューでの設定方法になります。
破砕させたいモデルを選択して、モードのフラクチャを選択します。
選択すると様々なタブを選択できるようになるので、
Generateで新しいGeometryCollectionを作成します。
Fractureタブを選択してモデルデータをどう分割するか選択します。
今回は一様化を選択します。
※以前までChaosと表示が実は変更されていて、
左端上段のビュー設定と呼ばれる個所に変更されています。
実際にShow Bone Colorという左上のチェックを入れると実際に、
どのように分割されているかがわかります。
これで破砕するデータの作成は完了です。
AnchorFieldやClusterStrainについて
まずよく使うAnchorFieldやClusterStrainについて紹介します。
AnchorFieldはGeometryCollectionを固定するために使用します。
ブループリントの作成から、FieldSystemActorを選択して作成します。
作成したらFieldとなる領域やどこに配置しているか
分かりやすいようにキューブも配置します。
※わかりやすくするために半透明のマテリアルを指定してます。
それからFieldシステムを使用する際は必要なコンポーネントの、
CullingField・BoxFalloff・UniformIntegerを使用します。
CullingField → Field情報やCullingをFieldのコンポーネント
BoxFalloff → 力場の形状や減衰方法の指定
UniformInteger → Field内での影響状態を指定
それではそれぞれの設定についてそれぞれ説明していきます。
BoxFalloffではboxの形状や減衰方法や強さなどを指定します。
力場も種類があり主にBox・Plane・Sphereの種類があります。
BoxFalloff・PlaneFalloff・SphereFalloff3種類です。
それから先ほど指定したSetBoxFallOFF内の状態を指定します。
Magnitudeの数値に合わせていきます。
0がSleep状態でそれ以外の場合は動作します。
1:kinematick 2:Static 3:Dynamic 4:UserDefinedになります。
今回はstaticを指定しています。
あとはCullingFieldコンポーネントに各情報を設定していきます。
CullingにBoxFalloffの設定を接続して、
FieldのところにUniformIntegerを指定します。
※OperationでInsideとOutsideを指定できます。
内側と外側にそれぞれ指定できます。
先ほどのCullingFieldの情報をFieldに追加してあげれば完了です。
※Enable:その設定を適応するかどうか
※Target(青色の方):FieldSystemComponentを指定します。
※Target(緑色のピンの方):どういった動きを行うかを指定します。
今回はUniformalIntegerで指定したStaticを指定しているため、
DynamicStateを指定してその状態を使用しています。
全体のBPは下のような画像になります。
実際にアンカー用のフィールドを配置するとこのような形になります。
一番左の半透明の黄色いフィールドがアンカー用のフィールドです。
アンカーフィールドで固定されている左端の物体は落下しません。
固定する場合もあれば一部を破壊したい場合や、
力を加えたい場合もあります。
その場合は先ほどのAddFieldCommandのTargetを
「ExternalClusterStrain」を選択してあげます。
実際に動かしてみると上の箇所の一部が崩れ落ちるような形で、
破砕されていくのがわかるかと思います。
AnchorとClusterStrainについては以上になります。
Fourceについて
先ほどExternalClusterStrainについて説明したかと思いますが、
方向や領域の設定をFieldに付与することで放射上に、
GeometryCollectionに対して力を加えることが可能だったりします。
※細かい物理演算を行う場合などには
制御を付与して実装していく仕組みかと思います。
まずひずみを与える球状の力場を指定します。
続いて球状に内側から放射上に力を加えるための演算を設定します。
RadialVectorで方向を指定して、
位置をSetRadiaFalloffで球体の情報を指定します。
全体的なBPはこのような形になります。
実際に動かしてみると爆発するように吹き飛んでいきます。
※青い球体のところから外側に向けて力が発生していきます。
Forceの説明は以上になります。
Sleep・Disable・killについて
先ほどまではAnchorなど動作を行うFieldでしたが、
SleepingやDisableでシミュレーションを停止できたりもします。
Blueprintとしての変更は「AddphysicsField」のTargetを、
「SleepingThreshold」または「DisableThreshold」に変更するだけです。
SleepingThresholdについてはその領域内で敷地を超えた場合に、
活性化してそのあともシミュレーションが行えます。
DisableThresholdはSleepingと同様のBPでTargetを変更しただけです。
実際に動かしてみるとSleepingの方では落ちた後にも
シミュレーションを行っていましたがDisableは行わなくなります。
※音が出ますご注意ください!!!
killもsleepingやDisableと同じように設定できます。
killの場合はシミュレーションをしないので、物体が通り抜けていきます。
これでSleepやDisable・Killなどのフィールドの説明は以上になります。
参考にしたサイトなどの紹介
最後に参考にしたサイトを紹介します。
公式のドキュメントにはジオメトリコレクションについても、
細かく書かれているので参考にさせていただきました。
Chaos Destruction の概要 | Unreal Engine Documentation
あと海外の方でいろいろ動画を出している方もいますのでおすすめです。
※英語が苦手な方はyoutubeの自動翻訳もおすすめです。