[Maya] FluidでFluidを動かして簡易アップレゾなど

MayaのFluidはパーティクルを動かすためのフィールドに出来ます。
また、フィールドはFluidに適用出来ます。

ということは?

Fluidをフィールドとして使って、別のFluidを動かすことが出来るのでは? です。

それが出来たらローレゾFluidでハイレゾFluidを動かせるはず!
となればローレゾでサクサク作業して最後に一発ハイレゾ計算という簡易アップレゾフローが取れる!

というわけでやってみました。


実際Dynamic relationship editorで、FluidにEmitterやらFieldやらを関連付ける際、FieldのところでFluidが出てきます。そこで選んでやれば適用可能です。
ですが実際に使ってみたことはありませんでした。気になってはいましたが。

そんな中、このところFluidで苦戦していたので、
むしゃくしゃしてちょろっとやってみました。

どうでしょうか。

ローレゾのFluidで大まかな動きをシミュレーションし、それをキャッシュした後にハイレゾのFluidにフィールドとして適用し、シミュレーションをかけています。
ローとハイの動き、結構近くないですかね?

ハイレゾの方のコンテナの解像度は確かXYZ各解像度がローレゾの2倍か3倍になっているぐらいの感じだったと思いますが詳しくは覚えてません。

先程Twitterでつぶやいてみたところ、なかなか好評だったので、備忘録も兼ねて簡単に手順を説明してみようと思います。

  1. ローレゾのFluidを作成する。
  2. 各種パラメータを設定し、普通にFluidシミュレーションをし、キャッシュをとる。
  3. ハイレゾのFluidを作成。今回はローレゾと比べて解像度が違うだけのものを作成しました。解像度以外は完全に一緒にします。
  4. ※必ずしもこれが必要というわけではありませんが、今回はそうしました。

  5. ハイレゾFluidにローレゾFluidをフィールドとして適用する。同様に、ローレゾの方で使用していたエミッタを、ハイレゾにも適用する。
  6. ハイレゾFluidのアトリビュートで、速度に関するところを全て0にする。

  7. ※Buoyancy、Swirl、Turbulenceなど。

  8. Dampを1にする。

  9. ※これにより、ハイレゾのFluidはほぼ完全にローレゾのFluidからの力のみで動かされます。

  10. ハイレゾのFluidのキャッシュを取ります。

今回やった手順は、前後あるにしても大体こんな感じです。

ポイントは、Fluidでパーティクルを動かすときにパーティクルのConserveを0にしてFluidの動きに完全に追従させるのと同様、ハイレゾFluidの動きを完全にローレゾFluidが制御出来るように、dampを1にし、Velocityに寄与するパラメータを全てOFFにする点です。

もちろん狙いがあるならSwirlやBuoyancyなどを入れるのもアリだと思いますが、今回は再現性がどれほどのものかを見てみたくて、こういうやり方にしてみました。

また、上の動画だとDensityのみしかEmitしていないので、Temperatureなどが入ったらどうなるか、という点ですが、扱いとしてはDensityとほぼ同じなのでおそらく問題無いと思います。たぶん。
 

これを見つけたのは1週間前ぐらいとかになるのですが、即使えそうだったので、現在ぼちぼち実戦投入しています。
ローレゾでの結果がそこそこハイレゾに反映されるので、トライ&エラーが結構スピーディになったような気がしなくもない・・・ような・・・?w
 
みなさまも是非試していただいて、こういうやり方のほうが良いよとか、ここ間違ってるよとかあれば、是非ご指摘ください。

 
簡単ですが、ご紹介まで(・・)ノシ

———————————————————— 追記
dissipation(消失)の値にはご注意。
多分dissipationは値が他のボクセルに移動する時に評価される値なので、
グリッド数が違ってくると一気に薄い煙が出来ちゃったりするようです。
なのでここは同じ値ではなく、レゾあげたらdissipation下げてあげるなどする必要があるかもしれません。
ただし倍レゾにしたら値半分にすれば良いのか、と言われると自信ありません。
ここは未検証ということで、そのうちテストするとかしないとか・・・?
今忙しいのでまたそのうちやれるようにがんばってみます・・・。
多分微妙な値になるような気はするなぁ・・・。

取り急ぎメモまで。

「[Maya] FluidでFluidを動かして簡易アップレゾなど」への6件のフィードバック

  1. はじめまして、Fluidで検索していたら行き着きました。

    とても興味深い内容だったので試してみたのですが、どうもエミッタはハイレゾのほうに適用できるようですが、FluidがFieldとして適応されていないようで、Emitされたままの状態でそこに残っています(Dumpが1のため)
    Dynamic Relationship editor上ではばっちりFieldとしてつながっているのですが。。。
    dissipationは0にしてあります。
    突然のコメントで大変恐縮ではございますが、何か原因がわかりましたらご教示いただけますと幸いです。

    よろしくお願いいたします。

    ちなみに当方環境は
    win7 Maya2011 です。

  2. >PS13-RPS13さん
    コメントありがとうございます。
     
    実は友人からも同じような事を言われました。
    彼が言うには、Dampが強すぎると動かないことがある、ということでした。
    なので一度Dampの値を調整されてはいかがかと思います。
    半分、そのまた半分、、、と言った感じで調整をして最適な数値を見つけるしかないかと思います。

    こんな回答ですみません。。
    根気よくどうぞ!

    他に何か解決策わかったら逆に教えてください:D
    よろしくおねがいしまーす。

  3. 早々のご返答ありがとうございます。

    週末忙しくお礼が遅れまして申し訳ありません。
    Dampを0.5で設定したところいい感じに動作いたしました!
    この方法は実に画期的でいいですね!
    通常fluidの動きを煮詰めた後Resolutionをあげるとまったく違った結果になってしまうのに対し、tai様のやり方ですとかなり近い結果が得られるので段違いにいいです。
    突然のコメントに対して丁寧なご回答を頂き、ありがとうございました。

  4. >PS13-RPS13さん
    わざわざご報告ありがとうございます:D
    Fluidのレゾ上げで形状が変わってしまう問題には、個人的にもかなり悩まされていました。
    どうにか出来ないかなーと思っていた矢先の発見だったので、個人的にもこれはかなり興奮しましたwww
    こういうものは僕が抱えてても仕方ないですし、むしろ積極的に共有したいなと思い、ブログに載せた次第です。もう半分は単純に手順のメモですw
    喜んで頂けて大変嬉しく思います:D

  5. 同じく検索していたらここに行き着いた者です。
    もういまさら遅いかもしれませんが、とても参考になりました。
    ありがとうございました!

  6. >yasougekkaさん
    はじめまして。
    まだちゃんとまとめきれてませんが、
    お役に立てたのならば幸いです:)
    今後ともよろしくお願いします。

コメントを残す

メールアドレスが公開されることはありません。