>   >  Houdini Cook Book:Vol.108 POP Rain System
Vol.108 POP Rain System

Vol.108 POP Rain System

POPを使った雨のシステムを構築します。

TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
日本でも指折りのHoudini アーティスト。
手がけてきた作品は数々の賞を受賞している。
代表作に、HIDETAKE TAKAYAMA『Express feat. Silla(mum)』など。
www.transistorstudio.co.jp
blog.junichiakimoto.com


EDIT_小村仁美 / Hitomi Komura(CGWORLD)

●CGWORLD Online Tutorialsにて特別無料配信中!
【無料】Houdini COOKBOOK +ACADEMY 特別編 ~コロナをやっつけよう!~

中近景に降る雨を簡易的に表現

今回は、POPを使った雨のシステムの構築方法を検証していきたいと思います。エフェクトにおける雨の表現は非常に多岐にわたり、シチュエーションによって様々です。遠景に降る降雨の表現、中景に降る雨の衝突、近景ではコリジョンに伝う雨水の表現など、それぞれで異なります。

今回は中近景に使用することを前提とした、降雨と衝突して伝う雨水を表現するためのしくみを考えていきます。特に、衝突後の表面を這う雨水の表現は、きちんとシミュレーションしようとすると、かなり難易度の高いものになります。ただ、今回は何となくの見た目がそのようになるレベルまで落とし込み、Fluidなど利用せず、POPでのフローでなるべく簡易的に組んでいきたいと思います。また、SOPによるディテールの調整やウェットマップなども含めて、トータルでの検証を行なっていきます。

今回のHoudiniプロジェクトデータはこちら

01 Source Setup

ソースのセットアップを解説します。


まず、ソースとなるジオメトリをインポートまたは作成します【A】。このジオメトリはコリジョンのベースとなるものなので最終的にはSDFに変換しますが、あまり重いと調整に支障が出ます。そのためなるべく最小限に留めておくのが良いでしょう。ただ、最終的なレンダリングにはハイモデルがあった方が良いです【1】


インポートしたジオメトリをVDB from Polygons SOP【B】でSDFに変換します。これは、コリジョン用のVolumeとして使用します【2】


またソースになるエリアについては、Grid【C】を使って範囲を指定します。これはどのような形でも構いません。これは、どこから雨が降り出すのか指定できていれば問題ないものですが、今回は範囲を最小限にしています【3】


02 POP Flow

シミュレーションのセットアップを解説します。


まずは、POPによる大きな流れを解説していきます。大きくは、雨の発生からストリームを分けて、雨が弾くところ、雨が滴るところと切り分けて考えます。最初にコリジョンを読み込みます【A】。ジオメトリは表示用で、コリジョンはVolume Sampleを使ってSDFでセッティングします【1】。POP Object DOPはSolverと合わせて通常のセットアップをします。


次に降雨のセッティングです【B】【2】。ここは、SOPのソースエリアから降水するParticleを作成します。POP Collision Behavior DOPで衝突判定のGroupを作成しておきます。必要に応じてSolverのAdd Hit AttributeをONにします。


続いて、衝突した雨が弾くParticleを作成します【C】【3】。このParticleはPOP Replicate DOPで新たに発生させます。こちらも同じくPOP Collision Behavior DOPを使って衝突のGroupを作成します。上の画像にみられるDependencyのLink【D】のように、Groupを使って次のStreamの発生をコントロールしています。POPを利用するため質量の保存は行わず、発生で動きをコントロールします。


その後、弾いた雨粒がさらに衝突した際のGroupを作成します【E】。これを基に、表面を伝っていく雨水の先端Particleを作成します【F】【4】。このParticleは表面を伝わせるために、POP Collision Behavior DOPはSlideにして、さらにPOP Property DOPのClingを設定し、回り込む雨水を再現します。また、POP Interact DOPを使ってParticle同士が相互に影響しあう力を加えるなどして動きにディテールをもたせ、POP Drag DOPで摩擦による減速を再現するなど、少々動きを細かく制御します。


このParticleを基にして、伝う雨水の軌跡を作成します【G】【5】。これは元の動きから置いていかれるように作成します。これで、発生のコントロールは完了です。


このままでは、伝う雨水が表面から離れる際にその軌跡も作られてしまいます。そのエラーを消すためにSOP Solver DOP【H】を使用して余計なParticleを削除します。あらかじめ軌跡を発生させない方がコストは低いですが、少々Groupの設定が面倒なので、SOPベースで削除します。POP Force DOP【I】で重力を設定し、POP Wind DOP【J】で降水に風の影響を追加します。最後に、POP Kill DOP【K】で地面より下に向かう雨水を削除します。これで大きな設定は完了です【6】


サーフェスから離れたParticleを削除するしくみを解説します。これはイレギュラーなやり方で、本来は発生させない方法を模索すべきですが、削除する方が今回は簡単だったためこのようなアプローチになっています。SOP Solver DOP【H】内では、Split SOP【L】でTrailのGroupを切り分け、さらにObject Merge SOP【M】でコリジョン用に作成したSDFを読み込みます。続いてVOP【N】を使ってVolume Sample VOP【O】でSDFを読み込み、Pointとの距離を測ります。その距離に基づいて、離れているParticleを削除します。

次ページ:
03 Sim Flow

その他の連載