Houdini KineFX Spider リグ

Houdini 18.5のKineFXを使って蜘蛛のアニメーションを作ってみた。

今回、蜘蛛の脚の動きにはサイクロイド曲線を使用し
Rig Attribute Wrangleノード内のVEXで制御した。
(サイクロイドとは円が回転するときの円上の点が描く軌跡のこと)
蜘蛛のジョイント階層のルートジョイントの毎フレームの移動量から
サイクロイド曲線上の各脚先の動きを割り出している。

【テスト1】
蜘蛛を動かしながら衝突判定を行った。
蜘蛛の脚先からintersect関数を使って特定方向にレイを打ち、衝突検知を行っている。
衝突した際の姿勢の制御もVEXで行った。

【テスト2】
壁を上るテスト。
平地からのスムーズなトランジションを実現。

以下、サイクロイド曲線を可視化したもの

今回感じたKineFXの強み
・ローカル座標系<–>ワールド座標系の使い分けが簡単にできる
・フルボディIKをプロシージャルに使用できる
・モーションのブレンドをプロシージャルに行える
・どこでどのようなモーション編集を行っているかが一目でわかる
・必要なタイミングでFK・IKを組み込める
・CHOPを簡単に組み込める(蜘蛛の頭の振動を抑えるためにFilter CHOPを使用)

 

Houdini KineFX

Houdini18.5 のKineFXを使って、以前Houdiniでモデリングしたロボットを
動かしてみた。

モーションはmixamo.comからダウンロードしたもの。
ロボットの体型に合わせてモーションの調整を行い、
Vellumで腕のインナーチューブのシミュレーションを行った。

足の接地にはStabilizeJointノード、関節の曲がり角度制限にはFullBodyIKConfFgureJointsノード、重心制御にはIKChainノード、腕のモーション修正にはRigPoseノードを使用した。
今回mixamoのジョイント階層とロボットの階層構造がかなり異なるため、
モーションを移し替えた際にロボットの膝の振動が発生してしまった。
そのためにRigAttributeWrangleでIKのTwist位置を調整するVEXを書いた。
さらにAttachControlGeometryノードを使用し、Vellumシミュレーションのベースとなる
チューブの初期位置を確定した。

KineFXを触ってみた所感だが、SOP内で階層構造を扱うための行列計算が格段にやり易くなった。
数年前に書籍「Houdini SOP&VEX編」を書いているときは、SOP内で階層構造を実現するための
行列計算が大変だった記憶がある。
また、KineFXとVellumの親和性はかなり高そうだ。

そういえば、SideFXのHouidni18.5のデモ動画にも
このタイプのロボットが出ていたな~。流行ってるのかな?

テレワーク中のエル3

自宅のPCは水冷マシンだが、天井がメッシュ構造になっていて
ここからCPUファンの熱が排熱される。

レンダリングを回すとCPUからかなりの熱が出てくるが、
寒い日はエルがここに座って暖をとるようになってしまった。

RenderMan for Houdini その3

今回RenderManのボリュームシェーダと屈折系シェーダのテストを行うために
以下のような海中を泳ぐクラゲのシーンを作成した。

海の中を表現するために大きなコンテナに対してボリュームシェーダを設定。
その上部にエリアライトを置き、ライトとコンテナの間にライトをブロックするための
複数のグリッドを配置した。それをVEXで小刻みに動かして水中に差し込む光を表現した。

Houdini Jellyfish test from Shuichi Sakuma on Vimeo.

クラゲの頭の動きはH18から新しくなったBendノードとsin関数を組み合わせて制御。
クラゲの触手はVellumを使って動かした。

シーンに大量の屈折体やボリュームシェーダが割り当てられたスケールの大きいオブジェクトが
ある場合でも、RenderManは極端にレンダリングスピードが落ちることがない。
このあたりが標準レンダラーのmantraとは違う点。

今回少しだけRenderManカスタムシェーダを書いたが、SeExprは必要な関数が
一通り揃ってるため使いやすかった。
(以前ブログにも書いたがSeExprはWalt Disney Animation Studiosが策定した
エクスプレッション言語)
http://wdas.github.io/SeExpr/doxygen/userdoc.html

シェーダ内でSeExpr関数を使う際には以下の本が役に立った。
REYESが終わってもこの本はまだまだ活躍できる。

 

RenderMan for Houdini

RenderMan for Houdini その2

Houdini18 RBD その1

H18のRBD(RigidBody)ワークフローに慣れるために
高架橋の破壊エフェクトを作ってみた。

H18から、RBDはSOP内でセッティングを行うことができ
ノードネットワークもかなりわかりやすくなっている。
今まで散在していたRBD関連のノードを
うまくアセットにまとめている感じだ。

シミュレーションはキャッシュを取りながらRBD->Pyro->パーティクルの順番で行った。
RBDのシミュレーション結果の速度ベクトルを
パーティクル、Ryroシミュレーションで再利用している。

動きの細かい部分に関してはVEXで制御した。

H18 RBD test v.01 from Shuichi Sakuma on Vimeo.

H18 RBD test v.01 flipbook from Shuichi Sakuma on Vimeo.

テレワーク中のエル

エルは北欧ノルウェー原産の猫なので
寒さには強いはずだが、エアコンの涼しい風は嫌いらしい。

日中はいつもエアコンの風が当たらない場所を見つけて寝ている。

RenderMan for Houdini その2

Houdini内でRenderManのヘアーシェーダとスキンシェーダのテストを行った。

RenderManのヘアーシェーダのパラメーター設定は
「フィジカルモード」と「アーティストモード」で切り替えて使用ができるが
今回はフィジカルモードを使用。

フィジカルモードではメラニン色素をベースにして髪の色が決定される。
今回はブロンドの設定のため、メラニンは低めに設定し
ディフューズ反射を上げた設定にしてみた。

スペキュラー計算はマルシュナーモデル(Marshener)というものがベースとなっており、
以下の三種類のスペキュラーが設定できるようになっている。

  1. 光が髪の表面に当たって反射する一次スペキュラ
  2. 光が髪の表面を透過した後、毛髪繊維のボリュームを通過して髪の背面で反射し、再び毛髪繊維のボリュームを追加した後髪の前面から反射する二次スペキュラ
  3. 光が髪の表面を透過した後、毛髪繊維のボリュームを通過してそのまま髪の背面へ反射する三次スペキュラ

スペキュラー強度はコーン角度で設定できるようになっているためわかりやすい。
また毛髪の断面形状までもシェーダで設定できるようになっている。

さらに、フィジカルモードで髪を染める染料を設定すると、単に色素を入れ替えるのではなく、ベースのメラニンに対して染料の色素がコーティングされたような自然な見え方になるようレンダリングしてくれる。以下のレンダリング画像はブロンドヘアーに青の染料を追加したもの。

また、アーティストモードで使用すれば非現実的なアニメ調のキャラクターの毛髪にも対応可能になり、あらゆる毛髪タイプに対応可能なシェーダになっている。

以下シェーダの接続。pxrHairColorをpxrMarshenerHairに接続。
pxrHairColorで毛髪一本ごとのディフューズとスペキュラー決定し、
pxrMarshenerHair(マルシュナーヘアー)でシェーディング計算を行う。

スキンシェーダは、サブスタンスペインターで肌のテクスチャーを作成し、
Pixar Shaderの表面下散乱(SSS)モデルを使用した。
表面下散乱の計算アルゴリズムは6種類から選ぶことが可能で
今回は表面下散乱の計算にはレイトレースは使用せず、
ディフュージョン(diffusion)方程式をシンプルな関数で近似する
Jensenのダイポールモデルを使用した。

表面下散乱の計算をフルレイトレースで行うアルゴリズムも用意されており、
MPCは「ブレードランナー2049」ではレイチェルの皮膚の表面下散乱計算に
フルレイトレースのアルゴリズムを使ったらしい。

毛髪のスタイリングにはVellumを使用。計算が安定しているため大量の毛髪でも
問題なくハンドリングできた。前方から一定時間だけ強風を吹かせて形を整えた。