※この記事は試行錯誤的な感じで、上手くいったわけでもないので参考になるかは微妙です。
unity 2019.4.13fで動作。
準備
FluidViscosityサンプルからSolverとEmitterを取り出してプレハブ化しておく
EmitterはSolverの子になってるので、Emitterだけ取り出せば一緒に付いてくる。
アセットフォルダにD&Dしてプレハブ化しておく。
一からコンポーネント追加して作ってもいいかもしれないけど、不具合が出たらイヤなので一応。
プレハブ化したSolverとEmitterをシーンに配置
普通にD&DすればOK。
Obi Fluidを表示させたいシーンのカメラにObi Fluid Rendererコンポーネントを設定
これをしないとObi Fluidの液体がカメラに映らない。
カメラが複数あるならすべてに設定しておく。
Particle Rendererのサイズを1にして、要素にEmitterを指定。
Emitterが複数あるならサイズを増やして追加する。
ぶっかけたい相手にコライダーと、Obi Coliderコンポーネントを設定しておく
コライダーはメッシュでもボックスでもなんでもいいっぽい。
指定したコライダーを参照してObi Coliderが設定されるみたいな感じ。
コンポーネント追加だけすれば初期設定でも大丈夫。
Distance Fieldは「なし」のままにしておかないと、環境によってはビルドエラーが出る可能性があるかも。
コライダーは小さめにして、液体が若干メッシュにめり込むくらいの位置の方が良いかも?
このくらいでもいいかも。
これでぶっかけると、ちょっとめり込んでいい感じに見えるような。
というか、こうしないと近くで見た時に液体が肌から浮いてしまう可能性が高くなる。
もっと小さめでいいくらいかもしれない。
液体の発生位置や向きを変える
SolverのTransformをいじる。
FluidViscosityサンプルだと上から下に液体が落ちる感じなので、Transformで回転させて横向きに発射できるように調整する。
特定のオブジェクトから発射する感じにしたい時は、Solverをそのオブジェクトの子にして配置し追従させるようにしておく。
色を変える
EmitterのObi Particle Rendererで色を指定
白濁液っぽいやつなら、とりあえず白でいいかも。
ただここだけ白にしても透明っぽくなるだけなので、↓で調整する必要アリ。
カメラのObi Fluid Rendererで色や透過などを細かく指定 ※一番重要?
ここが一番指定項目が多いから、ここが一番重要かも。
挙動を変える
SolverのObi Solverコンポーネントをいじる
ここ設定項目多くて複雑なんだよね( ̄▽ ̄;)
Solverはデフォルトではこんな感じ。
更に画像の一番下にConstraintsというのがあるんですが、これもまた項目が多い( ̄▽ ̄;)
続き
Constraintsは細かい設定みたいだけど、一つ一ついじってもよくわからなかった( ̄▽ ̄;)
ただ、全部チェックをオフにして density だけにしても表示はされた。ほかのだと何も表示されなかった。
ただdensityだけだとすり抜けてしまったので、colisionは付ける必要がありそう。
でもここいじるなら、ほかのパラメーターいじったほうが良いかもしれない。
重力 これ変えると浮いたり下に落ちたりカーブしたりする
落ちる感じにしたいならZ軸をプラスして行って下に向かっていく感じにする。
けど、本当に重力があるような感じの挙動?みたいで、液体が付着してゆっくり落ちていく…みたいなのは不向きかも。
Sleep Threshold これを増やすと当たった場所に止まるみたい
ぶっかけて付着!みたいな感じで使うといいかも。
初期値は0。
結構な勢いで液体が出てくるみたいなので、ここを設定しとかないと液体が飛散してしまう確率が高くなるような。
ただこれを使うと当たった場所に静止することになるので、液体がゆっくり落ちていく感じの表現ができない?
重力のパラメーターと調整してみたけど、止まるか普通に落ちるか、の二択みたいな感じにしかならなかった。
ゆっくり落ちる感じにしたいんだけど、それだとこのパラメーターだと無理そう。
まぁ割り切って液体が付着するだけ、でも良いかもしれない。
EmitterのBluePrintを変える
これ液体のテンプレートみたいなやつ?っぽい。
これを変えたら目に見えて液体の形が変わった。
最初にこれを変更して調整したほうがいいか?
ただ、液体の大きさによってまた変わってくるんだよね。
EmitterのDisk半径0.2、Blueprint「Dense 2」あたりがいい感じかな?
ただ、「ちょっと大きすぎだろう」と思ってDisk半径を0.1に下げたら、また微妙な感じになって、Simple Fluidあたりが良い感じになった。
大きさによってどれが良いか変わると思う。
EmitterのColision Materialを変える これは当たった後の形?
これも見た目が変わったかも。
当たった後形がどうなるかとかかな?
VeryStickyか、Medium Frictionあたりがいい感じかも。
でもこれもDisk半径を小さくするとまた変わってくるので、場合によっては設定しなくても特に問題ないかも。
ぶっかけられる側のモデルのRigidBodyの質量を調整する ※Rigidbodyを使う場合
あんまり関係なさそうな気がしたけど、ぶっかけたらRigidbodyでモデルが動いちゃったから、質量を増やしたら少しいい感じになった。
ただこれについては、液体が近くから飛ぶか遠くから飛ぶかによって勢いが変わってくるので、Obi Fluidを出す位置を変えたらまた動いちゃった、っていう風になった。
質量1000にしたら流石に動かなくなった。
メッシュコライダーにすると結構重いかもしれない
当たる側のコライダーが気になったのでメッシュコライダーにしてみたら、ちょっと重いかも?
その割に、他のコライダーに比べて挙動が改善したかというと微妙( ̄▽ ̄;)
主要なボーンごとに細かくスフィアやカプセルコライダーを指定するといい感じになるかも。
試行錯誤してみたけど、どうもかゆいところに手が届かないような感じかも( ̄▽ ̄;)
当たってゆっくり落ちる…っていうのは、私の技術では無理っぽいから諦めた(-_-;)
色々試行錯誤してみたけど、どうも微妙だなぁ。
液体表現って難しいんだろうけどね。
コライダーに当たるとその場で静止しちゃうのがちょっとなぁ…。
※Emitterをモデルの子にしたら追従するようになった。
一応現時点の設定。
カメラのobi fluid renderer
solver。constraintsはいじってない。
Emitter
EmitterのDisk半径を大きくして、Blueprintを変えるだけで結構いい感じにはなります。
ただあんまり大きいと、パイを顔にぶつけたみたいになっちゃうので…。
あとは小さめのSimple Fluidとかにして、Emitterを複製して飛び散る感を出すとかね。
まあこれで使ってもいいけども。
ただ、上手くゆっくり下に落ちないのと、逆に止めてもその場で静止してしまうのがなんか微妙(-_-;)
上手くやればできるのかもしれないけど、私の技術力ではこれが限界かな。
ちょっと他の方法も模索してみようかなぁ。
他の方式はあるか?
飛ぶ → べちゃっ → 肌に沿って少しゆっくり落ちる
これが理想。
まぁ完全に肌に沿うのは難しいだろうから、液体を大きめにして、めり込んでも沿ってるように見えるようにするのが現実的かな。
このくらいならblenderで液体メッシュっぽい作って、細かくシェイプキー設定したほうが楽かな?
下の方の頂点だけ、重力で下に移動するようなシェイプキーを作っておけば。
見た目はマテリアルでなんとかなるだろう。
ぶっかける位置なんてだいたい知れてるから、赤面オブジェクトでやってるみたいに事前にモデル内部に仕込んでおいて、その時が来たら前に出せばいいかもしれない。
液体が飛ぶところって早くてよく見えないから、何かスフィアっぽい白いやつを飛ばして、そのあとモデル内部に仕込んでおいた液体を表面に出せばそれっぽくなりそう。
ボーン仕込めばダイナミックボーンも使えるし、VertExmotionとかも使えるか。
どうするかはわからないけど、もう少し試行錯誤してみよう。