Houdini FLIP その8

引き続きHoudini FLIPのR&D。

前回、ロボットが上昇しながら海面に出てくるFLIPシミュレーションを行ったが
今回はサメのジャンプモーションで作ってみた。

サメのモーションはRBDとBendデフォーマーのハイブリッド手法で作成。
まずサメの凸状態のメッシュをプロキシとして作成し、RBDで放物運動を作成。
その際、VEXを使ってY<0領域では急激にRBDにかかる空気抵抗を上げることで
海中のゆっくりとした動きを表現してみた。

そして、RBDの位置・姿勢情報をサメのジオメトリにコピー。
その後、VEXを使って放物運動の最高地点でベンド量が最大になるように調整した。

レンダリングはFull HDサイズで行いThreadripper3970xのマシンで
ほぼ1日かかった(240フレーム)。

Houdini FLIP その7

Houdini FLIP R&D その7

今回は海中からロボットを上昇させ、泡を作りながら海面に現れるシーンを作ってみた。
ホワイトウォーターは標準のものを使用。(ロボットは以前Houdiniでモデリングしたもの)

シェルフからホワイトウォーターを作成すると初期設定ではホワイトウォーターパーティクルの
数が膨大になるため、レンダリングが途中で中断した。
そのため、レンダリングが回るまでテストを繰り返し、最適な個数になるよう調整した。

Oceanと合成するためにはParticle Fluid Maskノードで波のスペクトルマスクを作る必要がある。
今回はFLIPシミュレーションの速度と高さの基準でマスクを作りMaximumモードで合成してみた。
結果、今回のFLIPシミュレーションではこのブレンドの手法が一番うまくいった。

Houdini FLIP その6

Houdini FLIP その6

引き続きHoudini FLIPの研究。

今回の製作期間はR&Dを含めて3ヶ月くらい。
ホワイトウォーターは自前で実装したものを使用。

Houdini FLIP R&D from Shuichi Sakuma on Vimeo.

シェーダに関しては映画「ナルニア国物語2」の水のキャラクターを参考に調整した。
ボリュームシェーダをメインに使用し、水のスペキュラーハイライトを出すために
一部サーフェイスシェーダを使用した。

レンダリングにはKarmaを使用。
最適化を行い、レンダリング時間はFull HDサイズで
Threadripper3970X(メモリ128GB)で1フレーム30分以内に収めた。

今回は水のデータ量が膨大になったので、複数のFLIPソルバに分けて対応した。

また、体の部位に応じて水の動きをコントロールするためのそれぞれのベクトルフィールドを作成した。特に顔に関してはカーブを使用し、顔のトポロジーの流れに沿って水が流れるようにコントロールしてみた。

水の飛沫を表現するために、DOP内で@ballisticと@ageアトリビュートを使用した。
これにより、FLIPパーティクルはキャラクターの皮膚から発生した直後の数フレーム間は
FLIPの速度ベクトルフィールドから影響を受けずに自由に動き回れるようにしている。

キャラクターのアニメーションはKineFXを使ってHoudini内でキーフレームで作成した。
コンポジットはNuke。

今回の制作を通して、超ヘビーなシーンに対応するためのKarmaの使用法に関する
様々な知見が得られた。

 

Houdini FLIP その5

Houdini whitewater

Houdini FLIPのR&D

ホワイトウォーターと飛沫パーティクルは自前のものを実装してみた。
今回、水中のホワイトウォーターにはなるべく粒子感が出ないように気をつけた。
ある程度はうまくいったので、今度は規模の大きなシーンでテストしてみたい。

冬の風物詩

「猫はこたつで丸くなる」という歌があるが、
家にはこたつがないので、エルは床暖房の上で丸くなる。
毎年このクッションでエルが丸くとなると
本格的に冬が到来したことを感じる。

Houdini19 Crowdシミュレーション

Houdini19でクラウドシミュレーションを行ってみた。

Houdini18.5から追加されたAgent Pose From Rigノードを使用すると
KineFX側(SOP内リグ)からクラウドエージェントのモーションを制御することができる。
これを使って、クラウドを構成するロボットの40%に対して右手を上げるポース、
同じく40%に対して左手を上げるポーズを追加し、それぞれに赤と黄色の花を持たせてみた。
(残りの20%は両腕を下げた通常の歩きモーションとなっている)

今回Solaris内でKarmaでレンダリングしたが、クラウドのマテリアル設定と
モーションブラー設定で躓いたので、その解決方法を書いておく。
まず、SceneImportノードでは以下の設定をしておく。

これによって、Assign Materialノードでクラウドを構成するロボットの各パーツに対して
個別のマテリアル設定ができるようになった。

クラウドに限ってはObjectレベルでGeometryノードにVelocityBlurの設定を入れておいても
Karmaではモーションブラーがレンダリングされないため、Cacheノードを作って
LOPネットワークに挿入することで解決した。この方法は以下のスレッドを参考にした。
https://www.sidefx.com/forum/topic/71305/

また、レンダリングではLOP内でHoudini19から追加されたBackground Plateノードを使って
COP内で実写テンプレートと影を合成した。
https://www.sidefx.com/docs/houdini/nodes/lop/backgroundplate.html

Karmaによってビューポート内でモーションブラーや影つきで結果が確認できるようになったが、
快適に作業するためにはそれなりのCPUパワーが必要だと感じた。

Photoshop ニューラルフィルター

Photoshop(v23)のニューラルフィルターが凄い。
今回簡単なテストを行ってみた。

1.OpenStreetMapで新宿の1ブロックをosmマップとして出力

2.osmマップをHoudiniに読み込んで建物を生成(Labs OSM ImportとLabs OSM Buildingsノードを使用)

3.AOモードでMantraでレンダリング(深度情報なし)

4.Photoshopに読み込みニューラルフィルターを適用(風景ミキサー1回、深度ぼかし1回)

5.完成

今回、Houdiniからレンダリングした画像は深度情報がない画像だったが
PhotoshopのニューラルフィルタのAIが深度情報を自動生成し、
ニューラルフィルターのぼかし、かすみ、ノイズなどをポスト処理として追加することができた。
ニューラルフィルタはレイヤー情報として保存される。

元画像をどのように作ればベストなのかがわからなかっため、
今回はAO(アンビエントオクルージョン)で出してみた。
今後、ユーザー側でもある程度ニューラルフィルタのコントロールができるようになれば
静止画ではかなり使っていける機能になりそうだ。

Houdini Vellum + VEX

引続きHoudini VellumのR&D。

今回はVellumシミュレーションにコンストレイントによる回転アニメーションを加えてみた。
コンストレイントには通常のキーフレームが入るので、ドラゴンに対するコンストレイントを
通した手打ちの動きをVellumシミュレーションに反映させることが出来る。

槍の動きはVEXで全て制御し、ドラゴンの動きに合わせてタイミング調整した。
VEX制御だと動きの調整が簡単になるため、素早いトライ&エラーが可能になる。

Houdini Vellum 簡易版FEM

簡易版FEMとしてVellumを使ったサンプルを作ってみた。
このやり方はFEMと比較すると処理が早いため、1台のPCでも処理が十分回る。

今回はTet Conformノードを使ってドラゴンを四面体で構成しておき
それにVellumコンストレイント(Tetrahedral Stretch)を適用した。

さらに胴体部分に対してNULLに対するコンストレイントを作り、NULLを動かすことで
Vellum Solverでボディ全体の振動を発生させた。

以下はコンストレイントの強さによるボディ振動の違い。

Vellumにはいろいろな可能性がありそうだ。