Unreal Engineのクロスに触れてみる

こんにちは。プログラマのテッピーです。
近頃、私は布のシミュレートに興味津々です。

そんな折に、個人的に使い方や機能をお勉強している最中のUnreal Engine で
『クロス(Cloth)シミュレート』が出来ることに気が付きました。

今回の私の技術ブログでは、事前の知識と準備がない状態から
Unreal Engine のクロスシミュレートを使ってみた際の過程を書いてみます。

Unreal Engine のクロス導入

現在、会社で使っているパソコンには Unreal Engine をインストールしていなかったので
Epic Games 様の公式サイトから必要なファイルをダウンロード・・・あたりは省略。

まずは Unreal Engine のクロスシミュレートに関して
ドキュメントやサンプルのプロジェクトを検索しました。

・『クロスのコンテンツ サンプル』
・『クロスツール』
これらを中心的に参考にしました。

Unreal Engine 4.9 の時点では、DCC ツールにプラグインを追加したり、
APEX SDK にあるツールを使用して『APEX Cloth アセット』という
クロスシミュレートするためのアセットを作成する必要があったのですね。

都合が良いことに、Unreal Engine 4.17 の時点では、Unreal Engine のエディタ内で
クロスシミュレートするためのアセットを作成して調整することが出来ました。
それが『クロスツール』です。

アセットの用意からインポートまで

Unreal Engine で作業を始める前に、手元に適当なスケルタルメッシュがなかったので
『Blender』というオープンソースの DCC ツールで初歩的なモデリングのやり方を覚えて
『フラッグ(旗)』のメッシュモデルを作りました。

このフラッグは、円柱と平面を統合して1つのオブジェクト化してあり、
ディフューズ色を、私が好きな紫色にしたマテリアルを適用してあります。
フラッグのクロスになる平面部分は 32 x 32 x 2 の三角ポリゴンに分割されています。

さっそく Blender から エクスポートした FBX を
Unreal Engine に スケルタルメッシュとしてインポートして
デフォルトのレベルに配置してみます。

今回の目標は、単体でクロスをシミュレートしてみるだけなので、
コリジョンなしのアクターにスケルタルメッシュコンポーネントを追加して、
フラッグのスケルタルメッシュを使用するようにしました。

フラッグにクロスアセットを適用する

クロスツールでは、スケルタルメッシュの既存のメッシュのマテリアルに対して
新規にクロスアセットを作成して適用後、クロスとしてのマテリアルのパラメータを
頂点選択や、ブラシによるペイント(塗る)で設定することによって、
クロスをシミュレートするためのアセットを作ることが出来ます。

アクターのスケルタルメッシュをエディターで開いて、
クロスアセットの追加、適用。

クロスツールを開いて対象のクロスアセットを選択。
メッシュのポリゴンが緑色の輪郭でピンク色に表示されている部分が、
まだクロスとして動作することが出来ない部分です。
(円柱のメッシュが無駄に密になっていて、緑色に見えますね)

クロスとして動作してほしい部分を、ブラシで塗り塗り。
今回は、『元の位置から移動できる距離』のパラメータを
フラッグのクロス部分のほぼ全体に塗りました。

今回、フラッグのクロス部分のサイズは Unreal Engine 上で 200 x 200 になっていたので
『元の位置から移動できる距離』は余裕をもって 400 にしました。

塗り終わって設定を決定したものがこちらです。
クロスツールを閉じると、クロスとして動作するようになった部分が
重力に従って垂れさがって右のようになりました。

クロスシミュレートを実行してみる

エディターを閉じてレベルのビューポート画面に戻りますが
このままレベルをプレイしてクロスシミュレートを開始しても
クロスは重力に従って垂れさがってしまうだけです。

フラッグに動きをつけるために、なにかをするとすれば、
誰かに振り回してもらうか、風に吹いてもらうかですね。

今回は風に吹いてもらいました。桶屋が儲かっちゃいます。

『Wind Directional Source』というアクターを追加して
風の強さやスピード、風の方向を設定します。

レベルをプレイして、クロスシミュレートを開始します。

ひとまずフラッグが風になびいてくれました。目標達成!

今回はここまで

今回はUnreal Engine でクロスシミュレートを実行できれば満足でしたので
モデルのスケールと布の重み、マテリアルのパラメータを細かく考慮していません。

Wind Directional Source に関しても、少し調べただけでは
各パラメータの役割をしっかりとは把握できなかったので、
フラッグのクロス部分が持ち上がる程度の強風を吹かせているだけです。

もし次回に続くようでしたら、より『らしい』状況を設定して
クロスのシミュレートをしてみたいと思います。

それでは、今回のテッピーのブログはここまでとさせていただきます。
ご覧くださった皆々様、ありがとうございました。