作成者別アーカイブ: admin

Houdini Fur 3

Furのウェットシミュレーションを行ってみた。
熊の頭上から水を落下させ、水と接触したFurの形状や質感を濡れた状態に変化させる。
さらに首を振った際にファーから飛沫を出すようにしてみた。

Houdini Fur splash test from Shuichi Sakuma on Vimeo.

今回のシミュレーションには以下のソルバを使用した。
ファー:Vellum Solver
液体 :Flip Solver
飛沫 :POP Solver

濡れた質感を作るためにマントラ標準のHair Shader(VOP)をカスタマイズした。
シミュレーションと同期させ、ファーのカラー・透明度・スペキュラーを変化させた。

ウェット状態のファーの形状は、SOP内のVEXによって
アトリビュートを操作することで実現している。
この際、水に接触したファーを濡れた形状に瞬時に切り替えるのではなく、
数フレームかけてアニメーションしながら徐々に切り替わるようにした。

通常状態とウェット状態の比較。

一昔前の8コアのマシン(Core i7-5960X)で作業しているが
さすがにこのレベルのシミュレーションになると処理的にキツイ…。

 

Houdini Fur 2

Houdiniで動物のFurを作成し、アニメーションに対応させてみた。

リギング、キーフレームアニメーション、ブレンドシェイプ、マッスル(ジグル)の作業は
全てHoudiniで行った。ファーのダイナミクスを確認するため、立ち上がり後に着地する
アニメーションを作成した。

顔の表情をつけるためのブレンドシェイプはCHOPを中継してリグから駆動できるようにした。
顔のリグを動かせばそれに対応する表情が駆動するようになっている。

今回、ブレンドシェイプのターゲットはEditノードで複数モデリングした。
ターゲットをBlendShapeノードにつなげてCHOPを中継することで
リグからウェイト値を制御する仕組みになっている。

キャプチャー変形、ブレンドシェイプ変形、マッスル変形を併用する場合の
設定の順番は以下の通り。(他にもいろいろな組み方があると思う)

  1. キャプチャーによるウェイト設定(Mayaのスキニング操作に相当)
  2. ブレンドシェイプによる変形
  3. ボーンによる変形(1で設定したウェイト値を参照)
  4. マッスル設定
  5. マッスルによる変形

POP Wrangle備忘録

FLIPで熔解アニメーションを作ってみたが
その際に使用したPOP Wrangleノードに関する備忘録。

Houdini Melting from Shuichi Sakuma on Vimeo.

今回はDOP内のPOP Wrangleノードで熔解を制御しているが
POP WrangleノードはSOPのPoint Wrangleノードとはいくつかの相違点がある。

まずPOP WrangleノードにはInputsタブがある。

Inputsタブ内のInput1~Input4メニューは
様々なVEX関数の最初の引数になっている入力番号(0~3)に対応する。
例えば、relbbox(0,@P)と書けばInput1に設定されているジオメトリの
バウンディングボックス内の相対座標が取得できる。

Input1~Input4メニューを”First Context Geometry“~”Forth Context Geometry“に設定すると
DopNetworkノードに刺してある4つの入力からSOPジオメトリをそれぞれ取得できる。

Myself“に設定すると、これは現在処理対象となっている
DOPオブジェクト内のデータを指し示すことになる(今回はFLIPオブジェクト)。
DOPオブジェクトには様々なデータが含まれているが、デフォルトでは
Pop Wrangleではオブジェクト内にあるGeometryデータ(幾何形状)を取得する。
(これはPOP WrangleではデータがGeometryに紐づけされているため)
DOP内で刻一刻と状態を変えるFLIPパーティクルを取得するために、今回はこの設定を使用した。
  

DOP Data“に設定すると、「オブジェクト名/データ名」でオブジェクト内の
様々なデータを取得できる。今回の場合「flipfluidobject1/Geometry」でMyselfに設定した時と
同じ結果になった。

SOP“に設定するとパスを直接指定することでSOPジオメトリを取得できる。

DOPの理解を困難にしているのは
「オブジェクト」という概念だと思うので
そちらについてはあらためてブログで取り上げてみたい。

 

Houdini Fur

Houdiniで動物頭部のファーを作ってみた。

Houdini Fur Groom Wip01 from Shuichi Sakuma on Vimeo.

シェルフからファーをセットアップすると、以下の三段階に処理が分かれる。

  1. 皮膚メッシュ(Geometryノード)
  2. ガイドカーブ(Guide Groomノード)
  3. ファー生成(Hair Generateノード)

これにより皮膚メッシュ上にガイドカーブが作成され、
ガイドカーブによってファーの流れを決定し、
レンダリング時にプロシージャルにファーを生成するフローが作られる。


以下Guide Groomノード、Hair Generateノードの中身。
(両ノードとも最初は空の状態から開始)
 

今回はブラシ、カーブ、ペイント、プロシージャルな変形、VEXをフル活用して
頭部ファーの複雑な流れを作った。以下はその概要。

ブラシによるグルーミングは局所的なファーの流れを形成したり
ファーの隙間を埋めるために使用した。

ペイントは顔の部位ごとにファーの長さ・縮れ量・クランプ半径・クランプ強度を
コントロールするために使用し、今回は様々なパターンを描いた。

カーブは顔面のファーの流れを定義するために使用。
カーブからvelフィールドを作成し、ファーをフィールドに沿って移流させた。

プロシージャルな変形は、ファーに対して一律に長さを調整したり
クランプや縮れを形成するために使用した。

VEXはファーの特定部分(図では頬の部分)の毛先付近だけに変形処理を追加する際に使用した。

レンダリング結果

師走

今日は曇り空で気温は10℃に届かなかったが
ロードバイクで20kmほど走った。

家に帰るとエルは暖かい部屋で熟睡中。
冬は丸いクッションの縁に顔を載せて寝るのが習慣になっている。
ちょうど収まりがいいんだろうな。

ターミネーター・ニューフェイト

「ターミネーター・ニューフェイト」を観に行く。

予備知識ゼロで見たが、なかり面白かった。
何よりパート2の正式な続編ということで、所々に2へのオマージュが見られて
少しなつかしい気持ちになった。

ターミネーター2をみたのは、高校生のとき。
当時T-1000(液体金属ターミネーター)に使用されたCG技術に驚いたのを覚えている。
結果、将来CGに関わる仕事がしたいと考えるようになり
大学の学部を情報工学に決めた経緯がある。
そういう意味では、大げさに言えば映画「ターミネーター2」は自分の人生の
ターニングポイントだった。
(しかし大学ではコンピュータサイエンスの勉強はしたが、CGに特化した授業はなかった)

映画の最初の方に、若かりし頃のリンダ・ハミルトン、シュワルツェネッガー、
エドワード・ファーロングをCGで再現したショットがあるが、
「ブレードランナー2049」のレイチェル並みの完成度だった。
ボディは実写の俳優、顔だけ置き換えているらしい。
↓レイチェルの記事。
https://gigazine.net/news/20171117-bladerunner2049-rachael/

新しいタイプのREV-9もなかなか斬新なターミネーターで、見ていて楽しかった。
グレースが攻殻機動隊(押井守版)の草薙素子に見えたのは自分だけ?

Houdini 戦車アニメーション

以前Houdiniで作成した戦車モデルにアニメーションを設定してみた。
今回、戦車自体はOBJレベルでキーフレームアニメーションで動かし、
キャタピラと車輪の動きはSOPレベルでVEXを使ってコントロールしている。

拙著「Houdini SOP&VEX編」に記載しているキャタピラを動かすためのVEXを
凹凸地形にも対応できるように今回改良した。

戦車は旋回の方向によって左右のキャタピラと車輪の回転を
逆にする必要があるが、それにも対応できるようにした。

このためにCHOPで微分(差分)計算を行った。
具体的には、OBJレベルで作成した戦車の回転アニメーションをCHOPに読み込み
Slope CHOPでチャンネルカーブに対して微分操作を行った。

これによりチャンネルカーブの傾き情報(速度)が得られるため
「傾きがプラスだったら右旋回中、マイナスだったら左旋回中」のようにVEXの中で判定し、
適切な方向にキャタピラと車輪を回転させることができるようになる。
戦車の前進・後退の判定にもSlope CHOPを使用した。
(ちなみに、微分の逆の積分操作はArea CHOP)

テクスチャーはSubstance Painterを使って作成し、
最後にPyroで土煙を加えて完成。

Houdini カメラ振動

先日作成したロボットウォークアニメーションに足の接地と同期するカメラの振動を加えてみた。

以下簡単な手順

1.ロボットの足裏の接地タイミングに合わせてCHOP内でパルス波を作成。パルス波を作成するために、足裏にポイントを一つ仕込んでおきSOP内でそのポイントが接地した最初のタイミングで赤に変わるようにしておく。そしてCHOP内のGeometryノードによってその赤情報をチャンネルに変換。

2.CHOP内のCopyノードを使って、パルス波をトリガーにして振動しながら徐々に減衰していくチャンネルをコピー。

3.Channel Wrangle内のVEXによってチャンネル形状を加工

4.カメラのtyパラメーターからchop関数を使って、チャンネルを参照


CHOPコンテキストのCopyノードはSOPのものとは使用方法が根本的に異なる。左側の入力はパルス波のようなトリガーシグナル、右側の入力はトリガーシグナルに応じてコピーされるチャンネルになっている。

今回初めてChannel Wrangleを使用したが、いつ追加されたのだろう?
WrangleによってCHOP内でもVEXが使用できるため以前よりもチャンネルの加工が
直感的にできるようなった。

Houdiniのアニメーション作業

Houdiniでシンプルなモデルを作って、リギング作業→キーフレーム作業→エフェクト作業を
通してやってみた。

一般的にHoudiniというとエフェクト分野に強いイメージがあるが
通常のキーフレームを主体とするアニメーション作業も十分やりやすい。
またHoudiniでアニメーション作業を行った場合には、シームレスに
そのあとのエフェクト作業につなげられるというメリットもある。