BLOGブログ

2018.10.25UE4/Mesh

[UE4]コリジョンの作成方法のまとめ

執筆バージョン: Unreal Engine 4.20

今回はコリジョンを作成した事が無い方向けにコリジョンの作成方法をまとめました

UE4でコリジョンを確認する方法ですが、
スタティックメッシュエディターでは、ビューモードをPlayerCollisionにする事でシェーディングされた状態で確認できます。

またはメニューのColisionからSimpleCollisionにチェックを入れることでワイヤーフレームで確認できます。

基本的にはFBX Importの際にOptionで、MeshのAuto GenerateCollisionにチェックを入れるとコリジョンが作成されます。
上の画像の椅子のコリジョンはインポート時に生成されたものになりますが、大まかに全体を囲った形になり、メッシュの凹んでいるところは考慮されません。

K-DOPでシンプルなコリジョンを作成。

スタティックメッシュエディターのCollisionメニューから

Add Sphere Simplified Collision 球形状のコリジョンが作成されます。
Add Cupsle Simplified Collision カプセル形状のコリジョンが作成されます。
Add Box Simplified Collision ボックス形状のコリジョンが作成されます。
Add 10DOP-XSimplified Collision X軸から投影した4 つのエッジが面取りされたボックス形状のコリジョンが作成されます。
Add 10DOP-YSimplified Collision Y軸から投影した4 つのエッジが面取りされたボックス形状のコリジョンが作成されます。
Add 10DOP-ZSimplified Collision Z軸から投影した4 つのエッジが面取りされたボックス形状のコリジョンが作成されます。
Add 18DOP Simplified Collision すべてのエッジが面取りされたボックス形状のコリジョンが作成されます。
初めに紹介したAuto GenerateCollisionにチェック入れてできた形と同じようです。
Add 26DOP Simplified Collision すべてのエッジと角で面取りされたボックス形状のコリジョンが作成されます。

※~DOPは全部元はボックスで、どこをどんだけ面取りするかの違いになります。
上に紹介したものは全てレンダリングメッシュの凹みをコリジョンでは再現できていませんが、
Add~で作成するとコリジョンをどんどん追加できるので、複製して移動、スケール、回転でも
単純な形であれば組み合わせで凹形状に対応することも可能です。

シンプルなボックスコリジョンを3つ追加してスケールと移動で作成した例

AutoConvexCollisionで凹形状に対応したコリジョンを生成。

スタティックメッシュエディターのCollisionからAutoConvexCollisionを押下します。

DetailsのConvexDecomposのApplyでコリジョンが自動生成されます。

複数の凸型形状のコリジョンが生成されるのでパラメーターをいじれば椅子の凹みにも対応できます。
ですが、正確な形の生成は難しいようです。
暫定的なものとしては使用できそうです。(プロジェクトによりますが)

Use Complex Collision As Simpleでスタティックメッシュをコリジョンとして設定。

DetailsタブのCollisionのCollision Complexityから、Use Complex Collision As Simpleを選びます。
検索すると絞り込めるので早くておすすめです。

メッシュがそのままコリジョンになっているので当然ですがとてもきれいです。
※注意点としましては負荷が高い、物理シミュレーションに対応していないなどがあるようですが、
詳しくは公式サイトをご確認ください!

DCCツールで作成したメッシュをコリジョンとして読み込む。

自由に意図した形のコリジョンを作りたい場合はDCCツールで作成したものを読み込むことが可能です。
DCCツール(maya)でコリジョンを作成する際のルールは以下になります。
レンダリング メッシュと同名にしてプレフィックスにUCX_を付ける。
複数の場合サフィックスに_01を付ける。_02 _03と続きます。
UCX_は凸型形状のコリジョンを定義する為の命名規則で他にもいくつか種類がありますが、今回は割愛します。

凸型形状にする。
画像は複数の凸形状の組み合わせで椅子のコリジョンを作成した例です。
椅子のメッシュを覆うように大まかに作成した後、凸型形状になる形にフェースを分割して、最後にできた穴をふさいで作成しています。
全てを凸型形状だけで構成する為にオブジェクトを分解すると結構な数になります。

凸型形状とは凹んでいるところが無い形、または穴などが開いていない3D形状の事です。
※以前は凹んでいたりすると自動で補完されるメッシュが生成されたり、
ポリゴンに穴が開いていると読み込まれなかったと思いますが、(個人的な記憶なので間違っていたらすみません)
最近のバージョンでは自動で凸型形状に形が変換されるので、ポリゴンに穴が開いていても読みこめたり、
窪んでるところは自動的に平らになるようです。

コリジョンメッシュのピボットの位置をメッシュのピボットと同位置にしてトランスフォームをフリーズする
試してみたところ、最新版ではフリーズしなくても読みこめたりしましたが、
念のためフリーズはしておいたほうが良いでしょう。

最後にレンダリング メッシュとコリジョンメッシュを一緒にエクスポートし、UEにインポートします。

まとめ
今回は椅子のコリジョンを簡単に作りましたが、プレイヤーが歩いたりする建物などの大きなアセットや岩などの自然物は
足との接地を考えるとかなり正確さが求められます。
アーティストが使用するのはUse Complex Collision As SimpleかDCCツールで作成する事がほとんどではないでしょうか。
DCCツールで複雑かつ正確なコリジョンを作るのはとてもしんどいので、
個人的にはAutoConvexCollisionがさらに進化して全自動になってくれればと願う今日この頃です。

 

最後におまけとしてプロパティーマトリクスで一度に複数のコリジョンの設定を変更する方法をご紹介します。
コンテンツブラウザーで複数のアセットを選択して右クリックAssetActionsのBuik Edit via Property Matrixを選択


collisionを検索して、CollisionComplesityからUse Complex Collision As Simpleを選びます。
これで全部メッシュがコリジョンになります!めっちゃ楽ちんですね!

他にも色々できるのでお試しあれ!

参考リンク
http://api.unrealengine.com/JPN/Engine/Content/Types/StaticMeshes/HowTo/SettingCollision/
http://api.unrealengine.com/JPN/Engine/Physics/Collision/HowTo/AddDOP/
http://api.unrealengine.com/JPN/Engine/Content/FBX/StaticMeshes/
http://api.unrealengine.com/JPN/Engine/Physics/SimpleVsComplex/
http://api.unrealengine.com/JPN/Engine/UI/PropertyMatrix/