51.メッシュにコリジョンを追加してみよう
😺今回はコリジョンをメッシュに追加する方法について解説していきます。
https://scrapbox.io/files/65c6979743254c0025212155.png
スターターコンテンツやテンプレートプロジェクト,マーケットプレイスから購入したメッシュにはコリジョンが既存でついていますが、基本的に外部からインポートしたメッシュには自身でコリジョンを追加してゲーム内で使用します。そこで今回はメッシュにコリジョンを付ける所から始めていきます。
コリジョンを追加する方法とは?
コリジョンをメッシュに追加する方法は三つの方法があります。
①メッシュ自体にコリジョンを付ける方法
②アクタのコンポーネントとしてコリジョンを追加する方法
③物理アセットと呼ばれるメッシュの形状に合わせて作成するコリジョン
今回は基本的である①の方法について紹介していきます。②のコンポーネントとして追加する方法についてはコリジョンの章後編で紹介します。③については使用目的が限定的なので一旦省きます。
メッシュにコリジョンを追加してみよう
今回はスターターコンテンツを含んだサードパーソンプロジェクトを使用します。
スタータコンテンツのSM_Chairをダブルクリックして開きます。
https://scrapbox.io/files/65c69de03cbf9f0024968a46.jpg
スタティックメッシュエディタが開きます。
https://scrapbox.io/files/65c69df7a771d5002596046a.jpg
スタティックメッシュエディタとは?
ここはスタティックメッシュを編集する場所になり、コリジョンを設定したりする事ができます。
🐱ではまずはコリジョンを可視化していきましょう。
表示 > 単純なコリジョンを選択する事で既に設定されているコリジョンを可視化する事ができます。
https://scrapbox.io/files/65c69e30cae119002551172a.jpg
これがこの椅子のメッシュに設定したるコリジョンという事になります。
もう少し見やすくするためにウィンドウ > プレビューシーン設定を開きます。
https://scrapbox.io/files/65c69e4da2016c00259e25c1.jpg
環境 > ShowEnvironmentとShoFloorのチェックを外して、EnvironmentColorを黒にします。
https://scrapbox.io/files/65c69e9c669a98002504626e.jpg
これで背景は真っ暗になってコリジョンの線が見やすくなりました。
https://scrapbox.io/files/65c69eb1d44c0900245f9128.jpg
この緑色の線で囲まれたブロックが椅子の衝突判定を行うものになります。
コリジョンの設定場所
上のタブの「コリジョン」をクリックするとコリジョンの設定項目が表示されます。ここでコリジョンの追加や削除を行っていきます。
https://scrapbox.io/files/65c69ee70f44140024d686ca.jpg
🐱ではコリジョンを一旦削除→コリジョンを追加していきましょう。
コリジョン > コリジョンを取り除くをクリックしてコリジョンを削除します。
https://scrapbox.io/files/65c69f0173a5a20025f09281.jpg
これでこの椅子のコリジョンは無くなりました。
https://scrapbox.io/files/65c69f14fe0b780024b0166e.jpg
では次にコリジョンを追加してみましょう。同じようにコリジョンをクリックすると、「~を追加」という項目が並んでいるのですがこれらで様々なパターンのコリジョンを追加するか選ぶ事ができます。今回は10DOP-Yボックス単純化コリジョンを選択します。
https://scrapbox.io/files/65c69f36cae1190025511973.jpg
するとコリジョンが作成されてメッシュに追加されました↓
https://scrapbox.io/files/65c69f50fe0b780024b016e7.jpg
コリジョンはクリックで選択,編集する事ができ、Wキー,EキーやRキーで切り替えて拡大や移動をしたり詳細からコリジョンの設定などを変更する事ができます。なおコリジョンは一つのメッシュに対して何個も付ける事ができます。
https://scrapbox.io/files/65c69f7ffe0b780024b01726.gif
😺これでコリジョンをメッシュに追加する事ができました。では追加するコリジョンにはどのようなパターンがあるのか見ていきましょう。
追加するコリジョンはどれがいい?様々なパターンを確認しよう
https://scrapbox.io/files/65c69fbaa116370026cf2978.jpg
椅子を例にどんなコリジョンが追加されていくのか紹介していきます。またコリジョンは複雑になればなるほどパフォーマンスの負荷が大きくかかるのでシンプルで良いものはシンプルなコリジョンをできるだけ使用しましょう。
①シンプルなコリジョン
シンプルなコリジョンは三種類あり、パフォーマンスが最も良いです。コリジョン追加で迷った時にはこのシンプルなコリジョンにしておきましょう。
https://scrapbox.io/files/65c6a0361ed23b0024534017.jpg
球体単純化コリジョン
https://scrapbox.io/files/65c6a054fecfb20025213bdd.jpg
カプセル単純化コリジョン
https://scrapbox.io/files/65c6a06401274300259014b6.jpg
ボックス単純化コリジョン
https://scrapbox.io/files/65c6a3f93244aa0024769c0c.jpg
例えば椅子の場合だとボックス単純化コリジョン(立方体)が形状的には良いでしょう。なおシンプルなコリジョンの中でも最もパフォーマンスが良いのはボックス単純化コリジョンになります(といってもそこまでパフォーマンスが変わる訳では無いので最初は気にする必要は全くありません)。
🐱コリジョンがメッシュの見た目通り正確ではなくても良い場合はこのシンプルなコリジョンを追加しましょう!
②DOPのコリジョン
https://scrapbox.io/files/65c6a63b3244aa002476a4c2.jpg
次に上で示したDOPの項目ですが、DOPとはdiscrete(分離され) oriented(方向づけられた) polytope(多面体)の略で、XYZ軸にそれぞれに合わせた面を作成して「面取り*」を行い、10DOPであれば合計10面になるようにコリジョンを作成するというものです。
面取りとは?
面取りとは、以下のようにメッシュの角を取る事です。
https://scrapbox.io/files/65c6a6d801bcc00026858ed0.jpg
DOP系のコリジョンとはシンプルに言うと、いい感じにメッシュの形状に合わせてシンプルなコリジョンを作成してくれるものになります。実際に見てみましょう↓
10DOP-X : X軸から投影された面を作成して、合計10面となるコリジョンを形成します。
https://scrapbox.io/files/65c6a7435fcbba0024d8c7bb.jpg
10DOP-Y : Y軸から投影された面を作成して、合計10面となるコリジョンを形成します。
https://scrapbox.io/files/65c6a74c01bcc00026858f62.jpg
10DOP-Z : Z軸から投影された面を作成して、合計10面となるコリジョンを形成します。
https://scrapbox.io/files/65c6a7571e56570025e193e1.jpg
18DOP:すべてのエッジが面取りされたボックス形状のコリジョンが作成されます。
https://scrapbox.io/files/65c6a75f779c760025b0c942.jpg
26DOP : すべてのエッジと角で面取りされたボックス形状のコリジョンが作成されます。
https://scrapbox.io/files/65c6a7678fdc16002e077b7d.jpg
このようにDOP系のコリジョンはシンプルなコリジョンよりもう少し、メッシュの形状に合わせたコリジョンを作成する項目になります。
③オートコンベックスコリジョン
最後にオートコンベックスコリジョンについて解説します。オートコンベックスコリジョンはメッシュに合わせて正確,精密な形のコリジョンを作成できます。
https://scrapbox.io/files/65c6a79e779c760025b0c983.jpg
では手順を確認していきましょう。
コリジョン > オートコンベックスコリジョンを選択します。
https://scrapbox.io/files/65c6a7b861f5d500250d0a6e.jpg
詳細に「凸型分解」の項目が表示されます。適用からコリジョンが作成できます。下で設定項目について解説します。
https://scrapbox.io/files/65c6a7d91d64320024a866e0.jpg
この凸型分解の設定項目ですが、簡単に言うとそれぞれの値を増やすほどコリジョンの精度がよくなります。なので以下のような変化が表れます。
デフォルト
https://scrapbox.io/files/65c6a7fefecfb20025214aaf.jpg
全て設定項目をMAXにした場合
https://scrapbox.io/files/65c6a822e0b46500257b2893.jpg
基本的にオートコンベックスコリジョンを使う場合はデフォルトの設定のままで適用を押して頂ければよいでしょう。
😺メッシュにコリジョンを付ける時には基本的には球体やボックスなどシンプルなコリジョンを追加しましょう。それよりも精度が必要になったらまずは10DOPコリジョン、もっとさらに精度が必要になったらオートコンベックスを使用しましょう。ただしコリジョンの精度が良くなるほどパフォーマンスには負荷がかかってくるので注意です。
100%正確なコリジョンにする方法は?確かめてみよう
UnrealEngineでは何もしてなくても100%正確なコリジョンが自動的にメッシュに追加されてます。しかしそのコリジョンはデフォルトでは無効化されています。設定しなければ使用する事はできせんし、基本的にこの「100%正確なコリジョン」を使用するという事はパフォーマンスの観点からもほとんど行いません。一応設定方法については解説しておきます。
一旦コリジョンを削除しておきます。コリジョンを取り除くを選択します。
https://scrapbox.io/files/65c6a89d24a71e00240f115a.jpg
表示から複雑なコリジョンを選択します。メッシュと全く同じ形のコリジョンが表示されます。このコリジョンはメッシュ情報を元に作成されるコリジョンなので、全く同じ形状となります。
https://scrapbox.io/files/65c6a8b14532f80025db1d51.jpg
詳細のコリジョンの項目からCollisionComplexity > Use Complex Collision As Simpleを選択します。
https://scrapbox.io/files/65c6a8eef551110025e4b407.jpg
これにより上画像のような100%正確なコリジョンを使用する事ができます。
これで試しにレベルにSM_Chairを追加してみましょう。
https://scrapbox.io/files/65c6a90da116370026cf446f.jpg
すると椅子の形状に合わせたコリジョンが作成されている事が確認できます↓例えば椅子の座面の部分まで正確にコリジョンが作成されているため、プレイヤーの足が隙間まで入ります。
https://scrapbox.io/files/65c6a9529c700d0025be4ecf.gif
🐱このようにして100%正確なコリジョンをメッシュに追加する事ができます。しかしながらパフォーマンス的には大きな負荷がかかってしまうため、基本的にはシンプルなコリジョンをつけて、必ず正確なコリジョンが必要な状況の場合にのみこの100%正確なコリジョンをつける事を行いましょう。
また先ほど設定したCollisionComplexityですが、一応他の項目についても紹介しておきます。
https://scrapbox.io/files/65c6a98da9c40200254ec3dd.jpg
table:CollisionComplexityの項目
ProjectDefault プロジェクトの設定を使用します。
Simple And Complex シンプルなコリジョンと複雑なコリジョン両方を使用します。
Use Simple Collision As Complex 複雑なコリジョンではなくシンプルなコリジョンを使用します。
Use Complex Collision As Simple シンプルなコリジョンではなく複雑なコリジョンを使用します。
なお「Use Complex Collision As Simple」を使用した場合、ボックスコリジョンをさらに追加して以下の様に作ったとしても複雑なコリジョンの方が優先されて使用されます。
https://scrapbox.io/files/65c6aa76be969b0025eea8d5.jpg
なので複雑なコリジョン以外は無視されるので注意です。
これでメッシュにコリジョンを付ける方法は以上になります。迷ったらボックスなどシンプルなコリジョンをメッシュに付けていきましょう!