本記事はUnreal Engine (UE) Advent Calendar 2021(カレンダー3)の18日目の記事です。
さて、UE5のEA版が利用可能となり、かなり経ちましたね。更にUE5のマトリックスデモも少し前に滅茶苦茶話題になりました。
映像の凄さはもちろんですが、他にも多くの息を呑むような演出が沢山あります。個人的には特に凄いと思ったのが物理演算で使われている新システムであるChaos(ケイオス or カオス)です。とにかく破壊表現が綺麗!うっとりとしてしまいます。
しかしChaosはほとんど情報もなく、使い方についてやサンプルも少ないです。サクっとChaosの使い方がわかるようなサンプルってないの~?ってずっと個人的に思っていました。
だから自分で作ってみました!
このプロジェクトはUE5 EA版で動作します。UE4.27以前では動作しませんのでご注意ください。今回はこのサンプルプロジェクトを使って、Chaosの使い方を最速で理解できるように説明していきたいと思います!!
今回紹介するのはあくまでもChaos Destruction(破壊表現)のみです。Cloth(布)やVehicles(車体)について解説しませんので予めご了承ください。
Chaosの重要要素
まずChaosを理解するために最低限必要な知識を持っておく必要があります。それは以下の要素です。
- Geometry Collection
- Field System
あれ?意外と少ない?まぁ少ないのはいいことですね。これらについて軽く説明します。
まずGeometry CollectionはChaos Destructionを扱うために、スタティックメッシュから変換される破壊用の専用メッシュのことです。Geometry Collectionには様々な破壊用のパラメーターを設定し、複雑な破壊表現を可能とします。
次にField Systemですが、この仕組みは空間内の指定領域内の物理演算に様々効果を及ぼします。例えばモノを破壊する力を加えたり、逆に壊せないように無効化したり、物理演算を強制停止させることも可能となります。
この2つの仕組みを上手く利用することで、Chaosは様々な制御が可能となります。それでは早速使い方を見ていきましょう!
Field Systemを使えるようにする
最初にChaosを利用可能な状態にしておきましょう。UE5 EAでは最初からChaosは有効化されていますので、特殊なことをしなくても利用可能です。ただし、Field Systemは標準ではオンになっていませんので、プラグイン一覧から有効化して再起動しておきましょう。
これで再起動後にField Systemが使えるようになっているはずです。
メッシュのフラクチャー化を行う
まずはメッシュのフラクチャー化を行います。フラクチャーとは壊すや破砕などの意味を持ちます。UE5には作成ボタンから簡単にプリミティブなメッシュなどを配置することが可能です。そしてキューブなど何でもいいので、メッシュを配置して上部ツールバーにあるフラクチャー編集モードをオンにしましょう。
あとはフラクチャー編集モードのパネルが開きますので、新規ボタンからGeometry Collectionに名前をつけて保存します。保存したメッシュは自動的にGeometry Collectionのアクターとして配置されますので、そのまま利用可能となります。あとはパネル左側にある一様化ボタンを押して、更にフラクチャータブにある、フラクチャボタンを押すことで、メッシュを破砕可能な状態にできます。
フラクチャー化にはレベルが存在しており、より高レベルなフラクチャーはメッシュ内側に生成されていることになります。フラクチャー化は何度でも可能ですが、やりすぎると簡単に重くなってしまいますので、よほどこだわりがなければ2回程度フラクチャーを行えば十分です。
フラクチャー化したメッシュは色がカラフルな状態となったままで、プレイしてもそのままとなっていますがこれを修正する場合には、GeometryCollectionActorの詳細から、"Show Bone Colors"のチェックを外すことで色がつかなくなりますので、必要に応じて修正してください。
GeometryCollectionの修正
GeometryCollectionがアセットとして作成された後にそのまま使うと、間違いなく物理挙動や破壊挙動がおかしいままとなります。デフォルトのままではいい感じにはなりませんので、修正しましょう。作成されたGeometryCollectionアセットを開いて修正を行います。
必ず修正したいのは、"Collision Type"と"Implicit Type"の2つです。まずCollision Typeは、"Particle-Implicit"へと修正します。ここで個々のコリジョン判定がChaos Particleと呼ばれる当たり判定を使うことでより細かい判定を行うことができます。また後述のLevel Setを使うためにもこの設定が必要です。Implicit Typeは"Level Set"に設定します。これにより破壊時の挙動が非常にリアルになるためこの設定がほぼ必須ですが、デメリットとしてメモリーの使用量が通常よりも高くなってしまうという点では注意が必要です。
他に設定しておくべき部分は"Mass as Density"と"Mass"の設定です。これは物体の質量を設定する部分で壊れやすさや物理時の挙動に大きく影響します。適切な質量を設定しておくことでよりリアルな破壊挙動になると思いますので、色々と試してみましょう。
設定としてもう1つ重要なのは、"Damage Threshold"の設定です。これは配列で設定可能ですが、GeometryCollectionのフラクチャー作成時に作ったレベルの数がそのまま反映されます。※レベル0がインデックス0
特にインデックス0は最初の破壊に影響する部分なのでかなり大きめの値を設定しておく必要があります。画像では100万という極端に大きい値を設定していますが、この値でないと配置された瞬間に破壊が発生してしまいます。GeometryCollectionアセット側でも設定できますが、配置時に細かく値を調整したいことが多いので、ベース値をアセットに入れておいて、アクターとして配置後に適時値を調整するのが良いと思います。
Field Systemについて
もうひとつ重要なのがこの"Field System"です。Field Systemは名前の通りフィールド上に何らかの力や効果を発揮させるシステムです。フィールドには様々なコンポーネントが用意されており、1つだけを使ったり、組み合わせて使うことが可能です。基本的な使い方としてはBPを作成する際に"FieldSystemActor"を継承させることで利用します。
今回用意しているサンプルでは大きく3種類のField Systemを用意しています。
- BP_AnchorField
- BP_ForceField
- BP_DisableField
これらのフィールドを実際に利用する場合には、配置済みGeometry Collectionアクターに対して"Initialization Fields"配列に設定しておく必要があります。この配列に追加しておかないとフィールドの効果が発揮されないので注意してください。
それぞれのフィールドについてを解説します。
"BP_AnchorField"はアンカーと呼ばれる特別なフィールドを展開し、フィールド内にあるGeometry Collectionをその位置に固定します。またそのアンカー内では力の影響を受けませんので、Force Fieldなどで力を発生させたとしてもアンカー内を破壊することはできません。
"BP_ForceField"は名前の通りフィールド内にフォース(力)を発生させます。スフィアのサイズで放射状に出る"External Strain"とスフィアの中心から発生する"Linear Force"の2つの力が発生し、Geometry Collectionがあれば破壊し、物理オブジェクトがあれば吹き飛ばすことが可能です。
"BP_DisableField"はフィールド内に入ってきたGeometry Collectionの物理挙動を完全に停止させます。停止させることによりジッターなどの荒ぶりを抑制したり、CPU負荷による処理落ちを抑えたりなどが可能です。その範囲内で発生したフォースも無効化してしまいます。
この他にも様々なフィールドが用意されていますが、最初はこの3つのフィールドを理解しておけば十分です。サンプルの中にもこれらの3つのフィールドをわかりやすく配置しているのでぜひBPの中身も含めて確認してみてください。
サンプルでの破壊の仕組み
今回作ったサンプルでは銃から撃った球でキューブを破壊しています。
これは直接フォースを発生させて破壊しているわけではなく、発射している球自体がGeometryCollectionになっています。
この球はフラクチャー化は行っていませんが、非常に重たい質量を持たせることで他のGeometryCollectionにぶつけるとそれだけで破壊を発生させることができます。※画像では質量1000万kg
ただし、通常の方法ではGeometryCollectionを飛ばすことはできません。今回作成したこの球はFirstPersonテンプレートに入っている、"FirstPersonProjectile"のブループリントを改造し、発生直後に"Linear Velocity"による物理演算での射出を行っています。
元々ついていた"ProjectileMovement"は削除し、Operator Fieldと呼ばれる2つのフィールドをかけ合わせて使う特殊なフィールドを使って球を飛ばすことが可能です。球の速さも"Force Magnitude"を上げることで更に速い速度で飛ばすことができます。これによって複雑なフィールドが存在しなくても簡単にGeometryCollectionの破壊を楽しむことができるようになります。
Chaosは楽しい
というわけで非常に簡単なChaosでの破壊機能についてを解説してみました。使うだけならChaosは難しくありません。ただしいかに気持ちよく壊せるか、リアルに破壊するかとなれば非常に難易度の高い課題です。また何も考えずに破壊を行うとあっという間に重くなってしまいCPU負荷も大変なものとなってしまいます。
ただしやっぱりChaosはちゃんと使えるようになると楽しいです!ぜひ今回作ってみたサンプルを解析して、自由にChaosを使えるようになってみてください。