COOK BOOK

houdini delicious recipes

September 2010

Fire Ball



前回軽く触れた、シミュレーションをパーティクルに流しこむ方法を、少し詳しめに解説します。

この方法は、最近の僕の流行りで、これでもかって言うほど使ってます。
バカの一つ覚えってやつです。

普通にパーティクルを放出するのに少し飽きてしまったっていうのもありますし、フルイドを使ってみたいって言うのもあります。
僕的には非常にナイスなハイブリッド手法と言えるわけです。

とりあえず、何かしらの動画がないと始まらないと思ったので、簡単なものを作ってみました。

全然わからないです・・・すみません。
下手にカメラ動かしたので、余計に分かりづらいですね。
さらには、カメラワークのヘタさを露呈してしまっているという二重苦です。
そこはそっとしておいてくださいw

サイドから見ると少しはフルイドシミュレーションの面影があるんですが・・・。
まぁなにはともあれ、こんな感じで、演算結果を転送できますよってことです。

ポイントは、シミュレーション時に、Velocityを抽出するということです。
今回はSmoke Solverを使用しています。
その時に、Smoke Object > Guides > VisualizationからVelocityにチェックします。

V_vis


そうすることで、Velocityを同時に表示することが出来ます。
その時に大切な点は、Velocityタブの"Use Barbs on Vectors"と"Use Streamers"チェックを外すことです。

V_set


これによって、計算されるVelocityのベクトルは2点構成になって、のちのち変換する時に使用できます。
実際、この時点ではVelocityを可視化しているに過ぎず、アトリビュートとしてVelocityを持っていません。このただのラインをその2点を利用してベクトルをVelocityに変換してあげます。
そもそもUse Barbs on Vectors"って一体…それは、先っちょにカエシを付けますよ〜ってことです。
それによって、方向を明らかにするためです。


V_barbs


"Use Streamers"にいたっては、利用出来る気がしませんね。いわゆる流れを可視化していて、風洞実験的な雰囲気を醸し出したい時に使えます。これは断面になっていて、オフセットもかけられます。
画は面白いので、抽象的なアートとして再利用できそうですねw

抽出したVisualizationをDOP ImportでSOPに引っ張ってきます。
Visualizationにチェックをすることで、Geometry Data Pathでインポート出来ます。

dopimport


インポートしたデータを始点と終点に切り分けます。
Delete SOP のDelete by Rangeなどを利用すればすぐですね。幸い、ポイント番号はきっちり並んでいます。
万が一(ないけど)並んでない場合は、Sort SOPでBy vertex orderで並び替えてあげればOKなハズです。
イレギュラーな方法では、Carve SOPも使えます。
とまぁ、こんな感じで切り分けたら、終点から始点の座標を引き算してあげます。
これは簡単なベクトルの計算です。そうすることで、Visualizationしたライン上にベクトルを計算してあげることが出来ます。それをVelocityに流しこんであげればいいわけです。

vop


これでVelocityの変換は完了です。

次は流し込みの作業に入ります。
と言っても、とても簡単で、AttribTransfer POPを使用すれば一発です。
一個だけ気をつけなくてはいけないのが、Distance Thresholdの値です。
これは、影響範囲をどうするかという項目ですが、この範囲を間違えるとせっかくのシミュレーションの意味がありません。

では、どのような値を流し込むか説明します。
Smoke Objectのコンテナのサイズとレゾリューションを利用します。
これによって、Visualizationした時のVelocityのグリッドの最小距離を導き出せます。
今回はサイズの最大が20で分割が80ですので、
20 / 80 = 0.25
ということで、Distance Threshold = 0.25ということになります。

さて、これでほぼ解説は終了です。
この方法はいろいろな場面で利用出来ると思います。
もちろん、もっと最適な方法もあると思います。発見次第報告したいと思います。



このレシピのデータです。

download_icon



今後もこんな感じでデータを配布していければと思うんですが、さすがにシミュレーションのキャッシュまでは無理なので、そこは各々でやっていただければと思います。

また、これは非常に重要ですが、僕のやり方でJOBという変数を使ってプロジェクト管理をしています。方法は幾つもありますが、僕はこの方法を使っています。

JOBという環境変数を設定します。
メニューのEdit > Aliases and Variables > Variablesから、
JOBのValueをプロジェクトが置いてある場所のパスを指定してあげます。
現状だと、僕の環境がそのまま入っています。

これで、絶対パスを常に入力する必要がなくなり、相対パスで管理できます。
$HIPなどを使えば、勝手にhipがある場所を持ってこれますが、僕はhipのディレクトリが別に欲しいので、$JOBで管理しています。データの中身は、ディレクトリ構造を保ったままのからディレクトリが存在しますが、そのままで勝手に吐出されるようになっています。

もちろん、各自好きな方法に設定しなおしてもらって結構です。

おまけで、簡単なブレイクダウンです。


何か不明な点があればコメントください!

Smoke To Bubble



先月から始まったCGWorldの連載ですが、2回目でようやく本当の意味での連載となりました。
何かを継続してやるってことは大変なことですね。
自分の場合、ケツに火がつかないとやれないタイプのため、こういう機会を与えてもらったことは非常にありがたく、定期的に勉強と作品作りが出来る絶好の場所なわけです。

その知識を可能な限りHoudiniに興味を持っている人へのカンフル剤にすべく、頑張って試行錯誤していきます。

今回の映像は、タイトル通り、煙のフルイドシミュレーションを泡に変換しようというものです。
イレギュラーな手法で、絶対的なものではないです。

やってみた結果から書いていきたいと思います。

まず、なぜそういう手法をとったかというと、まともに泡をシミュレーションするためには、設定や演算が非常に高コストであることと、ぶっちゃけた話、やったことないし想像もつかないよってところから始まりました。
煙なら何度かやってるから、これを変換できたら楽だなと思い、明らかに時間が読めたのでその手法を選びました。
こう書くと、なんだかずるい感じに見えると思いますが、実際作業する場合、大きくはこちら側の方が明朗会計で安心です。
やはり実作業にはスケジュールとバジェットを天秤に掛けることも非常に大切で、はじめの一歩を間違えると、とんでもないことになりかねません・・・。コワイ。

ですから、今回は低コストと思われる手法を用いました。

ただ単に泡を出すだけなら、パーティクル(POP)で一発です。
むしろその方がコストも低いし、トライアンドエラーの回数も増えると思います。
場合によっては自分もこちらを選びます。

今回の場合、ソースとなるジオメトリと泡に絡みが欲しかったので、シミュレーションを選んだわけです。結果論ですが、そんなに絡んでないですねw
最初のイメージでは、うねりとかがもっと出ていて、水の中って感じでした。

いざやってみると、泡が登っていかない・・・。Oops

これじゃ、ローションですよ。泡の動きは非常に自然で、ある意味絡みです。捨てがたいです。
でも、もう少し粘性を抑えたかったので、無理やりシミュレーションに手を加えさせてもらいました。
やっぱり、シミュレーションも良し悪しで、最後には力技がモノを言います。
でも大事なことだとは思ってます。物理的に正しいものがよく見えるわけではなく、目に入ったものがよければ、それは正しいわけです。

今回の映像も、少し粘性があって、泡が残ってますが、あえてです。

ほんとにあえてです。

泡がなくなってしまうと寂しいので残したわけです。登らせるシミュレーションがうまくいかなかったとか、そういうわけではないんです。


また、非常に苦労した点は、泡のめり込みです。
元が煙で、放出時はただのポイントですので、体積を持つとどうしてもソースにめり込みます。
回避方法はいくつかあると思いますが、いろいろ難しく断念しました。悔しい・・・

いつか回避してみせます。



また、別の機会で、シミュレーションの結果をPOPにもって行くための細かい解説をしたいと思っています。

現段階でCGWorld.jpに掲載されていません。まだ開設したばかりで、色々と準備があるようです。
新設されるまで、もうしばらくお待ちください!!
Profile
  • ライブドアブログ