はじめに
新年あけましておめでとうございます。情熱開発部 プログラム2課今井です。
あっという間に2023年になりましたね。皆さんは充実した2022年を過ごせましたでしょうか。
きっとあれを勉強しようとしていたのに逃してしまったなんてこともあるかもしれません。その中でも今回はUE5で正式実装されたChaos Destructionについて改めてまとめてみたいと思います。
今回のブログで使用するパソコンのスペック、UE5のバージョンは下記環境にて行いました。
UE5 バージョン 5.0.3
Intel(R) Core(TM) i7-10875H
NVIDIA GeForce RTX 2060
Chaos Destructionとは
Chaos DestructionとはUE5のデフォルトの物理エンジンであるChaosの機能の1つです。名前の通りメッシュを破壊(Destruction)して動かすことのできる仕組みになります。まず、簡単に機能を実装した映像をご覧ください。
SphereがCubeに落ちてCubeが破壊されました。
工夫するとこのような歩いた部分を破壊していく表現もできるようになります。
超手っ取り早くChaos Destructionを実装して破壊を確認してみる
まずChaos Destructionを触ったことがない方でも最短で結果が確認できるように実装してみようと思います。今回はUE5のテンプレートプロジェクト「サードパーソン」から作成していきます。
まずはレベルにCubeを配置します。
配置したCubeを確認の際に高い位置から落としたいため座標を高い位置に設定します。
選択モードから「フラクチャ」モードに変更します。このフラクチャモードで実際に Chaos Destructionに関わるメッシュの分割などを行います。
先ほどのCubeを選択した状態で「Generate」から「New」を選択します。そうするとジオメトリコレクションが生成できますので適当なパスに保存します。Chaos Destructionで扱うにはこのジオメトリコレクションの状態でなくてはなりません。
次に「Fracture」から粉砕する形状を選択します。左上の「一様化」を選択して青く表示されている「フラクチャ」をクリックします。今回は最短手順で実装するため触っていませんが分割の細かい設定を「フラクチャ」ボタンの上のパラメーターから設定することができます。
再度「 フラクチャ 」を選択するとより細かく分割できます。この分割はレベルで表記されツリー構造になるので分割のし過ぎには注意が必要です。
これで最低限の準備は整いました。では実際にプレイしてみましょう!
Cubeが落ちてきて粉砕されました。
歩くと崩れ落ちる床を実装する
軽く触ってみたところで、次は最初に紹介しました歩くと崩れ落ちる床を実装してみましょう。引き続き 「サードパーソン」 のプロジェクトをベースに作成していきます。
レベルの画像の場所に平たいCubeを配置します。今回は「クラスタ」を選択し3回フラクチャを行いました。
一旦この状態で実行してましょう!すると…。
重力で地面に落下してしまいました…。
このような問題を解決するためField Systemを活用していきます。
Field Systemについて
Field Systemを使用することによって、特定の空間内の力などの制御を行えるようになります。 すでにエンジンに扱いやすいものとして以下のField Systemが存在します。
- FS_AnchorField_Generic…範囲内の力の影響を受けないようにします
- FS_MasterField … 範囲内に力を発生させます
- FS_SleepDisableGeneric … 物理的な挙動を行わないようにします
(以前は名前がFSではなくBPとなっていたようです)
エンジンのコンテンツを表示させるにはコンテンツドロワーの設定から「エンジンのコンテンツを表示」にチェックを入れます。
先ほど落下してしまったCubeを固定するにはFS_AnchorField_Genericを使用すればよさそうですね。早速配置していきましょう。
配置したCubeのジオメトリコレクションの詳細にあるInitialzation Fieldsに配置したFS_AnchorField_Genericを追加します。
これで先ほどのCubeが落下せず、乗れるようになりました!
しかし、最初の映像のように歩いた床の箇所が壊れてきません。無理やりプレイヤーを重くして壊そうとするとプレイヤーが動かなくなってしまいます。この問題もField Systemを使用して解決していきます。
画像のようにプレイヤーの足元に縮小したFS_MasterFieldを配置します。これで足元付近に力を発生させ破壊していきます。
足元に配置したFS_MasterFieldの「Activation Type」をデフォルトの「遅延」から「OnTick」に変更し、更に細かい調整としてStrain Magnitudeを「50000000」、Strain Falloff Typeを「Inverse」に設定しました。この辺の値はさせたい破壊によってそれぞれ変化すると思います。
では再度実行してみましょう。
ようやく崩れ落ちるようになりました!
これでも崩れ落ちるようになりましたが、より処理を軽くするために最後に仕上げを行います。
配置したジオメトリコレクションの下にFS_SleepDisableGenericを配置します。これで落下した破片の計算処理の負荷を抑えます。
色合いについても現在欠片のメッシュごとに色分けされたままなので見やすくなるように変更します。ジオメトリコレクションの詳細から「Show Bone colors」のチェックを外します。またマテリアルについては最初動画では以下のように設定しています。
最後に
今回はChaos Destructionを触れてみましたが、0からこのような処理を作成するととても時間がかかるところを手軽に試してみることができ、とても便利ですよね。実際に今回はブループリントでも特に組んだりせずここまでできるのも強みだと感じました。工夫次第でさまざまな要素に取り入れることができゲーム表現をより豊かにできそうな気がします。
参考文献
UE5 最速Chaos使い方入門!※サンプルプロジェクト配布あり
[UE5] Chaos Destructionで壁を壊そう
Chaos Destruction
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。