セルフコリジョン設定

セルフコリジョンと相互衝突


ここではセルフコリジョンと相互衝突の2つの衝突判定機能について説明します。
この2つは似ていますが用途が異なります。

セルフコリジョンとは?

セルフコリジョンはクロスが自分自身と衝突する機能です。
この機能を利用することで布自身が重なっても貫通しなくなります。

相互衝突とは?

相互衝突はクロスが他のクロスと衝突する機能です。
この機能を利用することで別々に設定したクロス同士を衝突させることが可能です。

 

使用上の注意


この2つの衝突機能は強力ですが使用に関して注意点があります。
これらの問題については今後も調査と改善を続けていきます。

ベータ版

現在セルフコリジョン機能はベータ版となります。
そのため将来的に機能が変更される可能性が十分あります。

処理負荷

セルフコリジョンは大変負荷の高い処理です。
そのため、デスクトップPCもしくはハイエンドコンソール機での利用が推奨されます。
この負荷はプロキシメッシュの頂点数に完全に比例します。
そのため、もしモバイル端末で利用する場合はプロキシメッシュの頂点数を極力削減してください。

精度問題

現在のセルフコリジョンは精度がそれほど高くありません。
そのため高速に移動すると布が絡まる可能性があります。
しかし内部ではその絡まりを検知して解す仕組みも組み込まれています。

振動問題

現在セルフコリジョンには振動が発生しやすい問題が確認されています。
これはプロキシメッシュの構造によるところが大きいです。
そのためメッシュの形状によっては適用が難しい場合もあります。

 

セルフコリジョン設定


セルフコリジョンは[Self Collision]パネルから設定します。
これまでの制約と比べて設定は至ってシンプルです。

セルフコリジョンで利用するのはSelf ModeとSurface Thicknessの2つのプロパティだけです。

Self Mode

現在設定できるのはFull Meshのみです。
Full Meshは自身のPoint-TriangleとEdge-Edgeの組み合わせについて衝突判定を行います。
Triangleが存在しない場合はEdge-Edgeのみ実行されます。

モードは今後拡張される可能性があります。

Surface Thickness

衝突の厚みです。
基本単位は(m)です。
セルフコリジョンではコライダー衝突判定で利用される頂点半径は使用しません。
セルフコリジョンはこの厚みのみで解決されます。

厚みは衝突の組み合わせの双方の値が加算されることに注意してください。
つまり厚みが0.005(m)の場合でも実際に引き離される厚みは0.01(m)となります。
この厚みは相互衝突と共有である点にも注意してください。

厚みは大きい方が衝突判定が堅牢になります。
しかし大きすぎると頂点に振動が発生する場合があります。

 

相互衝突設定


相互衝突も同じく[Self Collision]パネルから設定します。
相互衝突は設定が少し複雑です。

相互衝突ではSync ModeとSurface ThicknessとCloth Massが利用されます。

Sync Mode

ここはセルフコリジョンと同じく現在はFull Meshのみ設定できます。
Full Meshは相手に対してPoint-TriangleとEdge-Edgeの衝突判定を行います。

モードをFull Meshに変更するとSync Partnerとして衝突相手のクロスコンポーネントを1つ設定できるようになります。
このパートナーについて説明します。

まず次のように白と緑の2つのクロスがあるとします。
この2つはそれぞれがクロスコンポーネントとして独立しています。

相互衝突ではこの2つの内、どちらか片側だけに相互衝突の設定を行ってください。
両方に対して設定する必要はありません。

ここでは緑のクロスに対して白のクロスに相互衝突するように設定しました。
緑のクロスの設定は次のようになります。

白のクロスについてはSyncModeとSyncPartnerを設定する必要はありません。

このように1つのクロスに設定できる相互衝突は1つだけです。
そのため1つのクロスに対して複数の相互衝突を行いたい場合は、どちら側に設定を持たせるかをよく考えて組み合わせてください。

Surface Thickness

衝突の厚みです。
基本単位は(m)です。
この設定はセルフコリジョンと共有となります。
詳細はセルフコリジョンの解説を見てください。

重要なのは双方の値が加算されて計算されることです。
そのため厚みは双方のクロスで正しく設定する必要があります。

Cloth Mass

相互衝突に利用されるクロス自身の重量です。
この値が大きいほど重くなります。

重量が重いクロスと軽いクロスが相互衝突した場合、重量が軽いクロスが大きく動き重いクロスはあまり動きません。

例えばアクセサリーとスカートが相互衝突する場合に、スカート側を重くすることでアクセサリーが不要にスカートを押し下げてしまう問題を回避できます。
そのため一般的にレイヤーの内側のクロスをより重くする方が動きが安定します。