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

Houdini Fur


Houdiniを使って動物のファーを作成してみた。
使用バージョンは16.5。


16.5から体の部位ごとにガイドカーブを別々にグルーミングして
その後マージすることが可能になった。
(「グルーミング」とは毛の流れを整える作業)
マージ後、各部位の境界付近のガイドカーブは
CVの数も含めて綺麗に補間される。

今回、全長2メートルの熊に対して生成されたファーは約70万本。
ファーのベースとなるガイドカーブは約1万本使用した。

このようなファーに対しても、Houdiniのプロシージャルシステムのおかげで
かなり効率的に作業を進められたが
グルーミング作業時には挙動が若干もっさりしている印象を受けた。
(H17では、ヘルプを見ると4倍から10倍のスピードになっているらしいが…)

やはりというか、動物のファーを本物らしく見せるのはかなり難しい。

シーグラフアジア

シーグラフアジアへ参加。

朝一でWetaの講演を聞くために
Houdini Hiveの会場へ。

内容はWetaのスーパーバイザーMatt Aitken氏による
映画「アベンジャーズ」におけるHoudiniの活用例について。
時間は30分強くらいだったが、内容はかなり濃く
Matt Aitken氏が以下のサイトで解説されているものに近かったと思います。

「How Weta’s VFX Team Brought the Most Epic Moments of Avengers: Infinity War to Life」
https://io9.gizmodo.com/how-wetas-vfx-team-brought-the-most-epic-moments-of-ave-1828264355

Wetaのエフェクトアーティストは30人。
エフェクトを作るにあたって自社のエフェクトライブラリの再利用はあまりないそう。
(完成までのプロセスが大事みたいな話)
エフェクトに関しては自社開発のFluid Solver(シナプス)と共に
HoudiniのSolverの利用が徐々に増えているとの話もあった。
R&DはMantraで行い、最終レンダリングは
自社開発のレンダラーManukaを使用とのこと。

クローズアップでも本人にしか見えない
Wetaのデジタルダブルの完成度が凄かった…

HoudiniのTシャツもらいました。
夏場はこれ着て職場に行くか。

Houdini影だけのレンダリング

備忘録:Houdiniで影だけをレンダリングし背景画像と合成するシンプルなやり方。
(他にもやり方はあると思いますが、とりあえず今回試したやり方)

 

/out内で以下の3つのROPを作成。

1.キャラクターのみをレンダリングするROP
2.影が落ちる地面のみをレンダリングするROP(影を落とすキャラクターはファントム(幽霊)設定。direct_shadowとindirect_shadowのプレーンを追加)
3.背景のみをレンダリングするROP

3つのROPは以下に示すようにMergeで結合。
Mergeノードにはrenderボタンがあり、それを押すことで
Mergeに接続されているROPノードが左から右へ順番にレンダリングされる。
その結果、それぞれのレンダリング結果がEXRファイルに保存されていく。

以下、それぞれのROPの設定とそのレンダリング結果。

1.キャラクターのみをレンダリングするROP設定



2.影が落ちる地面のみをレンダリングするROP設定




3.背景のみをレンダリングするROP設定

COP2 Networkを作成し、レンダリングされたキャラクター、影つき地面、背景の各EXRファイルを読み込んで以下のネットワークを作成。これによりdirect_shadowとindirect_shadowチャンネルが
アルファチャンネルにマージされる。

1のChannelCopyノードの設定

2のChannelCopyノードの設定

3のChannelCopyノードの設定

最後に背景の上に影を重ね、さらにその上にキャラクターを重ねて完成。
(影には適度にブラーを適用)

Houdini16.5における書籍p382(手順30)の車輪回転アニメーションに関しまして

拙著「Houdini SOP&VEX編」のp382の手順30において
キャタピラと車輪をパックして1ポイント扱いにしていますが、
Houdini16.5ではAlembicパックジオメトリ(車輪)と
標準パックジオメトリ(キャタピラ)が混在した状態でパックすると
Alembicパックジオメトリ(車輪)に設定していた回転行列が機能しなくなるようです。
その結果、キャタピラが回っていても車輪は停止する状態になります。
(なお、Houdini16ではこの現象は発生しません)

これを避けるために、Houdini 16.5では手順28(p382)において
Solver(solver2)とMerge(merge2)の間にPrimitiveWrangleとPackを挿入し、
以下に示すようにパラメータ設定を行ってください。
これは事前にPackノードによって、車輪の4つのAlembicパックジオメトリを
標準パックジオメトリに変換しておく処理に相当します。


◆PrimitiveWrangleの設定
@name = “piece”+itoa(@primnum);

◆Packの設定


以上、お手数をおかけしますが
よろしくお願いいたします。

Houdiniでポリゴンモデリング part2

先日、ラピュタのロボットをHoudiniでモデリングしてみたが、
(http://www.serenelight3d.com/blog55/?p=3583)
今回は球体を使って様々な野菜やフルーツを作ってみた。

表面の模様や凹凸のディテールは、HoudiniのCOP内で
プロシージャルテクスチャを作成し、
ディスプレイスメントマッピングにより表現した。
今回、手作業によるペイントは行っていない。


今回、一番時間がかかったのはメロンの表面。

HoudiniのCOPは合成機能だけではなく、テクスチャーも作り出すことができるので
いろいろと研究の余地はあると思います。

Houdiniでポリゴンモデリング

今回、Houdiniでキャラクターモデリングを行ってみた。

一昔前だとHoudiniではキャラクターなどのポリゴンモデリングは厳しかったが
現在のHoudiniは必要なツールが一通り揃っているので、ある程度は問題なく行える。
(と、言っても、Houdiniでゼロからキャラクターをモデリングしている人は
そんなにいないとは思いますが…)

ポリゴンモデリングは主にラジアルメニュー(Cキーで表示)を使用して行った。
その場合、ほとんどのオペレーションはシーンビュー内で行うことになり、
ノードは自動的に作成され、自動的に接続されていく。

例えば、ポリゴンの押し出しやスプリットを使ってボックスから手の形を作成していくと
オペレーションのたびに対応するノードが自動的に作成され、
ネットワークに直列に接続されていく。

ロボットのゴーグルの穴はブーリアンを使用せずにモデリングで穴をあけた。
これはブーリアンを使用するとサブディビジョンの際に問題が出るため。

胸の紋章のモデリングは画像ベースで、VEXを使ったポイント移動によって行った。

今回、ラピュタのロボットをモデリングするために作られたノードは以下の通り。

そしてモデリング終了後にUV展開を行って、サブスタンスペインターでテクスチャーを作成した。
以下に示すように、HoudiniのUV圧縮を行うUV Layoutノードは非常に性能がいい。
今回は全てのパーツをまとめてテクスチャー作業を行ったため、テクスチャは4Kで作成した。

今回初めて本格的にサブスタンスペインターを使用したが、
Houdiniと同様に「プロシージャル」なフローでテクスチャー作成が可能になっており
とてもいいツールだと思う。
UIも最新バージョンで刷新されており、使いやすくなった印象を受けた。

最後にサブスタンスペインターからbasecolor,roughness,metal,normalマップを
エクスポートし、マントラでレンダリングを行った。

 

Houdini RBD(リジッドボディ)

新年あけましておめでとうございます。
本年もよろしくお願いいたします。

冬休みにまとまった時間が取れたので
再学習も兼ねてHoudiniのRBD(リジッドボディ)アニメーションを作ってみた。

Houdini RBD personal study 03 from shuichi sakuma on Vimeo.

今回のシーンは通常のセッティングでは重すぎて最初計算が回らなかったが、
VEXを使うことでなんとか計算を回すことができた。

VEXは窓ガラス一枚ごとの粉砕・非粉砕状態のスイッチング、
建物のコンストレイン、RBDのアクティベーション、ガラス破片の初速度設定、
デブリ発生のタイミング制御など、様々な場面で使用している。

Houdini RBD personal work 03 wire view from shuichi sakuma on Vimeo.

一般に「ダイナミクス」というと、ツール側でほとんどやってくれそうなイメージがあるが
計算をうまく回すためのお膳立ての部分は、ハンドメイドで作成していくことになる。

Houdiniはポイント制御に始まりポイント制御に終わるツールなんだということを
今回改めて実感した。

8章のチュートリアル15(p372)に関しまして

現在刊行中の「Houdini SOP&VEX編」ですが
8章チュートリアル15の手順6(p372)を実行すると
Houdiniがクラッシュするケースがあります。

この現象はHoudini16のビルド600付近のバージョンで発生するようです。
お手数ですが以下のサイトから最新のビルド671以降を
ダウンロードして実行していただくと、クラッシュを回避することができます。
https://www.sidefx.com/download/

以上、お手数おかけしますがよろしくお願いいたします。

書籍「Houdini SOP&VEX編」に関しまして

お待たせしておりました拙著「Houdini SOP&VEX編」ですが
近日中に書店に並ぶ予定になっております。

 

お手数ですが書籍を購入された方は
ボーンデジタル社のサイトから以下のデータのダウンロードをお願いいたします。
(www.borndigital.co.jp/book/)

・書籍内チュートリアルで使用するモデルファイル、テクスチャーファイル
・書籍内チュートリアルの完成版hipファイル
・書籍内チュートリアルのVEXコードが記載されたテキストファイル

 

また、本書「Houdini SOP&VEX編」はSOP内で使用するVEXにフォーカスした
内容になっておりますので、DOPに関してはカバーしておりません。
その点ご承知おきください。

 

以下に書籍の正誤表を記載させていただきます。
こちらの正誤表は上記のボーンデジタル社書籍サポートページにも記載されております。
以上、ご迷惑おかけしますが、よろしくお願いいたします。

 

<8-4-13> (8章 p234)
————————————————————————————————

(誤)


// インスタンンス番号の決定
if(vmag > 3.5) {inst = 6+int(3*rand(@ptnum))};// 移動速度が速い猫
else if(vmag > 2.75) {inst = 3+int(3*rand(@ptnum))};// 移動速度が標準の猫
else {inst = 0+int(3*rand(@ptnum))};// 移動速度が遅い猫

(正)


// インスタンンス番号の決定
if(vmag > 3.5) {inst = 6+int(3*rand(@ptnum));}// 移動速度が速い猫
else if(vmag > 2.75) {inst = 3+int(3*rand(@ptnum));}// 移動速度が標準の猫
else {inst = 0+int(3*rand(@ptnum));}// 移動速度が遅い猫

 

<8-12-2-3> (8章 p342)
————————————————————————————————
書籍内VEXの”{0,0,3}”の部分を”{0,0,0.7+0.3*rand(@ptnum)}”に修正してください。

(誤) @v = {0,0,3};
(正) @v = {0,0,0.7+0.3*rand(@ptnum)};

 

<9-3-5> (9章 p544)
————————————————————————————————
手順5を終えたら、最後に【「Apply」ボタンを押す】操作を行って下さい。

 

<9-3-31> (9章 p557)
————————————————————————————————
書籍内エクスプレッションの”OUT_GLASS_PT”の箇所を”fuse2″に修正してください。

(誤) npoints(“../OUT_GLASS_PT/”)
(正) npoints(“../fuse2/”)

 

<9-3-40> (9章 p560)
————————————————————————————————
書籍内VEXの”OUT_GLASS_PT”の箇所を”fuse2″に修正してください。

(誤) int skip = npoints(“op:../OUT_GLASS_PT/”);
(正) int skip = npoints(“op:../fuse2/”);

 

<9-3-54> (9章 p567)
————————————————————————————————
書籍内VEXのchi(“../floorNum”)の後の”-1″を削除してください。

(誤) if(i@floor == chi(“../floorNum”)-1){
(正) if(i@floor == chi(“../floorNum”)){