バーチャル3Dクリエイター神部まゆみです(*^_^*)
この記事はObiFluidのコリジョンマテリアルを調整したので、それについての記事です。
前回までの記事はこちら。
動作環境はunity6000.0.32のURPプロジェクトです。
やりたいこと:液体が当たったらゆっくり垂れる感じに調整したい
現状だと見た目はまぁまぁ良い感じにできたけど、挙動をもう少し調整したいですね。
Solidfy On Contactサンプルを流用すると液体が固定化して動かせないっぽい
サンプルのSolidfy On ContactサンプルのSolverをプレハブ化して改変していたのだけど、これはスクリプト名の通り「接触すると固まる」スクリプトみたいで、付着させるには最適だけど垂れさせることはできない。


サンプルの一覧は↓こちらで解説してます。
ChatGPTにコードを見てもらったけどそんな感じっぽいので、接触後垂れさせたい場合はオフにしたほうが良いみたい。


Colision Materialを設定すると接触後の挙動をいじれる
これを設定すると接触した後にどんな挙動をするかを調整できます。
詳しくはこちら。

当然ですがSolidfy On Contactを付けているとこびりついて固定する動作が優先されてしまうのでオフにしておく必要があります。
コリジョンマテリアルを設定するところ
Emitter


あと受け手側にコライダーとObi Colision Materialを設定するけど、ここでも設定する。


コリジョンマテリアルを作る
ObiFluidアセットがインポートされていれば、プロジェクトウィンドウで右クリック、作成→Obi→コリジョンマテリアルがあるのでこれで。


コリジョンマテリアルのパラメーター説明


動摩擦
衝突で除去される相対接線速度のパーセンテージ (静摩擦のしきい値を超え、パーティクルがサーフェスに対して相対的に移動した場合)。0 は氷でできているかのように物が滑り、1 は接線速度が完全に失われることを意味します。
0だと摩擦がなく滑り、1だと摩擦で速度が完全に抑えられる感じ?
試しに全部0からやってみます。


これだと弾かれちゃいますね…摩擦が0だからかな?
動的摩擦を1にしてみたらこれ。弾かれるけど動的摩擦で運動量が抑えられて付着してますね。
静止摩擦
衝突で除去された相対接線速度のパーセンテージ。0 は氷でできているかのように物が滑り、1 は接線速度が完全に失われることを意味します。
動的摩擦は接触時の摩擦で、静止摩擦はその後の摩擦ってことかな?
動的摩擦1、静的摩擦1でこれ。んー飛び散っちゃうのは良くないかな…
動的摩擦と静止摩擦だけではダメっぽいかな…。他のパラメーターと組み合わせる必要がありそう。
Stickiness
衝突時にオブジェクト間に適用される内側の法線フォースの量。0 は力が加えられないことを意味し、1 はオブジェクトが衝突したときに分離するのを防ぎます。
この数値を増やすと分離するのを防ぐ感じ?
1,1,1,0でこれ。んー少しくっつく感じになったかな…?
Stick Distance
スティッキーフォースが適用されるオブジェクト間の最大距離。接触はスティック距離内の物体間で生成されるため、生成される接触の量を減らすために、できるだけ小さく保つ必要があります。
いじってみたけどこれ結構重要っぽい?
1,1,1,1にしてみたらこれ。これで良い感じにくっついたからここから調整すると良さげかな?
衝突時の摩擦処理モード
衝突に関与する2つのオブジェクトの係数が異なる場合、摩擦係数はどのように計算されますか。両方のオブジェクトに異なる摩擦結合モードがある場合は、列挙インデックスが最も低いモードが使用されます。
これ何が違うのかわからなかった。設定しなくても良いくらいかな?(^_^;)
Stickiness Combine
衝突に関与する2つのオブジェクトの係数が異なる場合、粘着係数はどのように計算されますか。両方のオブジェクトのスティッキネス結合モードが異なる場合は、列挙インデックスが最も小さいモードが使用されます。
上に書いたけどこれいじっても変わらなかったな…。
Rolling Contacts
これを有効にすると、角速度を含む完全な接触分解能が実行されます。通常の接触(パーティクル-パーティクルとパーティクル-コライダーの両方)は、パーティクルを空間内の単純な位置として扱うため、パーティクルが回転することはありません。この簡素化により、次のことが可能になります。 線速度のみが考慮されるため、非常に安価な衝突応答。ただし、接触材料のローリング接触を有効にすることで、角速度と粒子の向きを考慮して完全な接触解像度を実行することを選択できます。
これ有効にしたら液体が垂れてきたからオンにしたほうが良いかな?
Rolling Friction
転がり摩擦:転がり接触中、適用される転がり抵抗の量。0 から 0.1 の間の値が最も便利です。
ここはあまり増やしても変な感じになったので、解説通り0~0.1あたりが良いかな?
これで良い感じになったかも
0.5、1、0.5、1あたりがちょうどいいかな?
あとはぶっかけ表現としてはこれ単体で使うより、他のサンプルのやつも併用してみると良い感じになる気がする。
もうちょい小さめに、Lifespanを少なめにして連射しやすくしたらこんな感じ。
まぁこのあたりで完成かなあ。
この時点でのパラメーターなどを載せておく
再現しやすいようにパラメーターを載せておきます。
SolidfyOnContactサンプルのSolverをプレハブ化して改変して使っています。


〇Solver
Solidfy On Contactはオフにしてあります。液体の大きさはSolverのスケールをいじってコントロールしてます。
〇MainCamera
ここは有効視野と位置調整したくらいかな。
〇Emitter
〇Obi Collision Material
数値はだいたいこれに近ければ似たような挙動になると思う。


〇ポイントライト
あとポイントライトを近くに配置して、カリングマスクでレイヤー指定してObiFluidだけを照らすようにしてある。真っ白にしたかったので光量はかなり強く。
ライトで見栄えをコントロールする方法の記事はこちら。
おわりに
結構良い感じにできて良かった。
発射する方式のやつはこれでほぼ完成かなあ。
あとはこれを元に複数パターン作って制御するか、サンプルいじって改変して良い感じにブッカケとして使うのが良さそうw
まぁ簡単なぶっかけ表現なら別にテクスチャやオブジェクトを仕込んでおくだけでも良いけど、結局どこまでこだわるかって話になってきますね(;^_^A
また何かあれば追記します(*^_^*)