カテゴリー別アーカイブ: houdini

Houdini Spider リグ

Houdiniで蜘蛛のリグを作ってみた。

ベースは2年前に作ったものをカスタマイズ。
KineFXをベースにして、蜘蛛の足の運びを作るためにサイクロイド曲線をVEXで実装して使用した。
また、リグに対する外装パーツ装着のためにジョイントのベクトルを操作する必要があったため
そこでもVEXを使用した。

以下は作業画面。
手動で動かすのは頭頂部分だけで、残りのパーツは全て連動して動くようになっている。
キャラクターのリグが複雑になればなるほど、Houdiniのプロシージャルな制作手法のメリットが
享受できる。

以下は2年前に作成したもの。

サブスタンスペインター 自作アルファの追加

ここ最近はHoudiniを使ってRBD(Rigid Body Dynamics)のシーンを作っている。

今回は転がる球体のテクスチャーをサブスタンスペインターで作成したので、その備忘録。

サブスタンスペインターのアルファには日本語フォントが1種類用意されているが、
あまり格好の良いフォントではないので、今回は漢字のアルファ画像をPhotoshopで作成した。
アルファ画像にするファイルは白黒画像をpngファイルで保存すればOK。

以下のように作成した画像ファイルをサブスタンスペインターのアルファセクションへ
ドラッグ&ドロップで追加して、読み込み設定を行う。

読み込みモードには以下の3種類がある。

  1. 現在のセッション : 今回の作業のみで使用
  2. プロジェクト 「ファイル名」 : プロジェクトファイル内だけで使用
  3. ライブラリ 「your_asset」 : ライブラリに登録して毎回使用

以下のようにブラシに読み込んだアルファ画像を設定し、
ジオメトリをクリックして漢字ペイントを行った。

 

Houdini FLIP その9

Houdiniを使った流体シミュレーションその9。
今回はタコ型のクリーチャーを作ってみた。


タコのモデリング、アニメーション、シミュレーション、レンダリングは全てHoudiniで行った。
テクスチャーはSubstance Painterを使用。コンポジットはNuke。

今回作成したタコのサイズはかなり大きいため、FLIPシミュレーションのプールサイズは
100m x 40m x 100mの巨大サイズになった。


流体のパーティクル数はFLIPが約2500万、ホワイトウォーターが約2000万。
さらにタコの触手から放出される自前で実装したホワイトウォーターに3500万程度を使用した。

作業PCのメモリは128GBだが、この規模のシミュレーションでは全然足りなかったため
様々な最適化を行って計算が回るように調整した。

また、FLIPシミュレーションのプール周辺付近におけるサーフェイスの連続性をキープするために
VEXで補正プログラムを書いた。

Pixarのリギングシステム

シーグラフ2022で発表されたジョイントを使用しないPixarのリギングシステム。
面倒なウェイト付けが全く必要ないらしい。

これをHoudini 20の目玉機能として実装して欲しい。
これがHoudiniに実装されたらHoudiniでキャラクターアニメーションをつくる人が
一気に増えるだろうな。

論文:https://graphics.pixar.com/library/ProfileMover/paper.pdf

Houdini KineFX リギング

今回、HoudiniにKineFXが実装される以前に作成したロボットのリグを
KineFXにコンバートしてみた。

以前のHoudiniでは、リグはObjectレベルでBoneノードをベースに実装していた。
仕組みとしてはBoneノードの階層に対してCHOP内でIKチェーンを設定して
別階層のNullノードからIKチェーンのゴールをコントロールするやり方をとっていた。
この場合、ロボットのパーツはそれぞれBoneノードにペアレントする必要があった。

それに対し、KineFXが実装された今ではSOP内でそれらを全て実装できるようになった。
つまり、骨に相当するジョイント階層の作成や、IKチェーンの作成、リギング、
ジョイントに対するパーツのペアレント化などは全てSOP内で行うことができる。
また、KineFXはプロシージャルに階層内の親子関係の組み換えも可能なので、
いわゆる足の「リバースフット」の実装も比較的簡単に行うことができた。

KineFX作業動画

もう今後Boneノードを使用することはないだろうな~
(Houdini19ではObjectレベルでTabキーを押して”bone”と入力するとまだ作成できます)

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

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