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

こんにちは。プログラマのテッピーです。

前回の拙文では、Blenderで作成したスケルタルメッシュモデルと、
Unreal Engine 4.17のクロス(ペイント)ツールで作成したクロスアセットを使用して、
風にたなびく旗のシミュレートを行うまでの過程をご紹介させていただきました。

今回は、『Unreal Engineのクロスに触れてみる』の続きと致しまして、
文字通りクロスに接触する機能を使用した時のことを紹介してみたい思います。

今回やろうとすることは、具体的には上図のように
『クロスと他のオブジェクトを接触させる』ことです。

これに関しまして私は、Youtubeで『UE4 Cloth Tutorial  #4』という
動画を拝見して、アセットの作成からクロスの設定までの流れを知りました。

まずはBlenderでスケルタルメッシュモデルを作成します

作成したスケルタルメッシュモデルの概要

『横棒から垂れたクロス』と、『ボール』が一体になったスケルタルメッシュモデルを作成。
横棒の長さとクロスの一辺の長さは2メートル、ボールの直径は0.5メートルとしました。

『横棒』『クロス』『ボール』の各メッシュは、分割数を調整して面をスムージング。
個別にマテリアル『Pole_Mat』『Cloth_Mat』『Ball_Mat』を追加します。

スケルトンは根元から『Pole_Bone』『Ball_Bone』の2本のボーンで構成。

横棒とクロスのメッシュの頂点グループはPole_Boneに所属。
ボールのメッシュの頂点グループはBall_Boneに所属しています。

作成したスケルタルメッシュモデルをFBX形式でエクスポート

エクスポートの設定は動画を参考に、以下のようにしました。

『ジオメトリ』タブ

『スムージング:』で『面』を選択(面のスムージング情報を書き出す)。

『アーマチュア』タブ

『リーフボーン追加』のチェックを外す(スケルトンの末端に余分な骨を追加しないため)。

お次はUnreal Engineでの作業

Unreal Engineで新規プロジェクトを作成。

ボールを押して動かすキャラクターが欲しかったので、
テンプレートには『Third Person』を選択しました。

スケルタルメッシュモデルのFBX形式ファイルをコンテンツブラウザからインポート。
特に何か設定を変更することもせずに『全てインポート』します。

マテリアルの設定

マテリアルをエディターで、ベースカラーを設定しました。
(Cloth_Matのみ『両面処理』にチェックを入れました)

前回に引き続き、クロスは私が好きな紫色です。
ボールは紫色の次に好きなオレンジ色。脇役の横棒茶色にしました。

物理アセットの設定(失敗編)

続いて、今回の肝となる、クロスと接触するオブジェクトのコリジョンの設定です。

インポートしたスケルタルメッシュモデルの物理アセットをエディターで開くと・・・。

自動的に追加されたボディのコリジョン形状が、ワイヤーフレームで表示されています。

しかし、1つのカプセルが傾いている状態の上図は、期待していた配置になっていません。
(ボーンが2つあるので、ボディも2つ追加されているはずでした)

Ball_Boneにボディを追加して、後記の物理アセットの設定と、クロスアセットの設定を
同様に行ってみましたが、結果は失敗(ボールがクロスにめり込んでしまう)でした。

設定の詳細は、後記させていただくとしまして、
失敗についてはいくつかの画像と解説だけにします。

Ball_Boneにボディを追加した状態の画像

Pole_BoneのボディとBall_Boneのボディのトランスフォームを調整してみましたが、
カプセルの径をこれ以上細くできませんでした。これが最小のスケールのようです。

物理アセットとクロスアセットの設定後に、レベルに配置した状態の画像

キャラクターで押し出して転がしたボールが、クロスにめり込んでしまいました。

クロスの動作確認のため、回転させた状態の画像

クロスの方は、それらしくヒラヒラと動いているようでした。

その後、原因の解明を図ったところ・・・

試行錯誤の結果、物理アセットで自動的にボディが追加されない原因は
Blenderでスケルタルメッシュモデルを作成したときに、
単位系の設定が正しく行われていないことでした。

単位系の設定が行われていなかった結果、
想定よりも100分の1ほどのスケールでスケルタルメッシュモデルが作られてしまい、
ボーンのスケールが小さすぎることで正しく物理アセットの設定ができなかったようです。

ボールがクロスにめり込んでしまうのも、スケールがおかしいことで
物理アセットやクロスアセットのパラメータが適切ではなくなっているのかもしれません。

今回は、ここまでとさせていただきます。

次回は、失敗の原因を解消した後の、
成功までの流れをご紹介させていただきます。

ご覧くださった皆様、ありがとうございました。