目次
はじめに
こんにちは、情熱開発部プログラム1課の山崎です!
気づけば冬も明け、春の暖かさを感じる日も多くなってきました。
今年はUEを触る機会が多く改めてゲームエンジンの便利さを実感していたのですが、そんなUEの便利さを実感できる機能の1つとして、メッシュの切断が行えるProcedural Meshというものがあるので今回はそちらをご紹介致します!
使用するバージョン
UE5 5.1.0
ProceduralMesh を使うと何ができるのか
Static Meshと違いProcedural Meshは動的に生成されたメッシュなので、ゲーム中の動的な変形や生成をする場合に用いられます。
今回はゲーム中にメッシュ切断のような変形が行われるので使用します。
メッシュ切断までの工程
プロジェクトの作成
では早速プロジェクトの作成を行います。
今回はファーストパーソンのサンプルプロジェクトを使用しますので、ファーストパーソンのブループリントで作成します。

ここまでで、とりあえずUE5のファーストパーソンサンプルプロジェクトが開いたかと思います。
すでにレベル上に配置されている青いCubeは邪魔なので消してしまいましょう。

切断されるオブジェクトを用意
切断されるオブジェクトを制御するためにActorクラスを指定したブループリントを作成します。

作成したブループリントを開きProceduralMeshとCubeを追加します。
UE5の場合は左上の追加から検索できるので、そちらを活用して追加してみてください。
※日本語設定の場合は「キューブ」で検索できます

Cubeコンポーネントの設定
CubeコンポーネントのスタティックメッシュをSM_Cubeに変更し、マテリアルはそのままでも大丈夫ですが、自分がわかりやすい色に設定しておきましょう。

ブループリントの設定が完了したら、スタティックメッシュで設定したSM_Cubeの設定を行います。
AllowCPUAccess にチェックを入れてCPUからでもメッシュ情報にアクセスできるようにします。

当たり判定の設定も必要なので、コリジョンからオートベックスコリジョンを選択して、凸型分解のメニューから適用を押してコリジョンの設定を完了させます。

Procedural Meshコンポーネントの設定
Procedural Meshコンポーネントの Use Complex as Simple Collisionのチェックを外して、Simulate Physicsにチェックを入れます。

Static MeshをProcedural Meshにコピー
今の状態でレベルに配置してもStatic Meshのままなので、Procedural Meshに変換する必要があります。
Construction Scriptで書いたノードは、プレイイン状態でなくてもアクターの生成や移動などで実行されるので、今回はこちらに変換する処理を実装します。

弾の設定
飛ばした弾にあたった時に切断されるようにしたいので、弾の設定も行います。
FirstPerson/Blueprints/BP_FirstPersonProjectileを開きCollision ComponentのコリジョンプリセットをBlockAllに変更します。

すでにイベントHit時の実装があるのでそちらを削除します。
代わりにイベントからOnComponent Hitを追加して、Hitピンを分割します。


上記のイベントで当たったときの判定が取れるので、ここでメッシュ切断の処理を追加します。
処理自体は簡単で「Slice Procedural Mesh」ノードを呼べばできるので、当たった時にその命令を呼び出して切断できるようにします。

Slice Procedural Meshの入力ピンはこのようになっています。
- In Proc Mesh : 切断するProceduralMeshを指定
- PlanePosition : 切断される座標
- Plane Normal : 切断される方向の法線
- Create Other Half : 破片を作成するかどうか
- Cap Option : 切断面の表示の設定
- 表示しない、新しい切断面の生成、マテリアルで切断面の生成
- Cap Material : 切断面のマテリアル
ここで一旦レベル上に、作成したCubeのActorを配置して切断できるか確認してみます。
まったく動く気配がないですね・・・
実は今の状態だと、切断した破片などに物理シミュレーションが適用されていないので、切断処理後に実装する必要があります。
Slice Procedural Meshの後に物理シミュレーションの設定を行います。

この状態でもう一度切断できるか試してみましょう!
今度はちゃんとメッシュ切断ができました!
最後に
一からメッシュ切断の実装を行おうと思うと頂点計算や法線の計算なども行わないといけないですが、エンジンの機能を使うと簡単に実装することができます。
UE5から追加されたChaos destructionという似た機能もありますが、そちらと比べてProcedural Meshは切断する座標や法線なども調整ができるので、任意の箇所の切断は 「Procedural Mesh」派手に破壊したい場合は 「Chaos destruction」と使い分けると良いかもしれません。
Chaos destructionに関しても弊社のブログがあるので、ぜひご覧ください!
最後までご覧いただきありがとうございました!
【UE5】UE5のChaos Destructionを改めて触ってみた
参考サイト
【UE4】ProceduralMeshを使いメッシュを切る。
【UE4】ProceduralMeshについて再確認
【免責事項】
本サイトでの情報を利用することによる損害等に対し、
株式会社ロジカルビートは一切の責任を負いません。