2020年12月11日金曜日

使ってはいけないStamp!

この記事はHoudiniアドベントカレンダー2020 11日目の記事です。

皆さん、大量なオブジェクトのアニメーションのタイミングをアトリビュートを利用してズラしたい!なんて事はありますでしょうか?
はい。自分は良くあります。
実は、様々なチュートリアルでStampとTime shift Sop使った悪手が散見されるので記事にしました。

Houdini独特の機能のStampですが、移動・回転・スケール・Alphaなどなどアトリビュートで操作できる値はアトリビュートを直接いじりましょう!というのはHoudiniをある程度触った事がある人ならば共通認識だと思いますが、見落とされがちなのがアニメーションをキーフレームで行いたい場合です。
そんな時はwrangleでch関数のとあるオプションを使いましょう。

まずは簡単な例から。ランダムにアニメーションをズラしています。

よく見るダメな例。ランダムな値が入ったshiftアトリビュートをstampで参照しtimeshiftノード内で使用。

スケールのアニメーションは以下の様にキーフレームでアニメーションつけています。(上図ではscale_Animationノード)


良い例。Wrangleノードの自作したscaleというパラメーターに、上と同じキーフレームアニメーションが付いています。

Wrangleでパラメーターを作る時に、chf , chvなど良く使うかと思いますがch関数には時間指定して値を取ってくるオプションがあります。

上の例だと chf('scale' , @Time - ここにズラしたい値を入れる) 

つまりchf('scale',@Time) だと元のアニメーションと全く同じタイミングでchf('scale')と同様の挙動です。  

この方法のほうが、パフォーマンスは段違いに速いのでstampはどうしようもない時のみ使う様にしましょう。



----------------------------------------------------------------------------
応用例です。(トップのムービー)

といっても、本題のch関数のオプションの話は済んでいるので
この様な各面の基点、サイズ、スケールアニメーションの向き、面の向きがバラバラなタイプの表現をする時に使えるテクニックの紹介です。

大まかに流れを説明すると、各ポリゴンをから基点(pivot)、upとNの向き、サイズ(scale)を
割り出し、1ポリゴンのgridを割り出した各面のpivotにcopy to points でコピーし面を再構成しなおすという感じです。
元の形状はSidefx Lab toolsのLot subidivisionというSopで作りました。
このSopお手軽ですが、以前R&D行っていたTreemapアルコリズムとは違う様で用途は限定的です。
facet sopでプリミティブをバラバラにします。Primitive wrangle(上図get_pivot_dir)で各プリミティブのエッジ上の中点を基点としたいので、
prim points関数を使って下図の様に全ての面に対してpt0とpt1を選びます。
int primPts[] = primpoints(0,@primnum);
int numPt = len(primPts);
int start = floor(fit01(rand(@primnum*1.23),0,numPt));

int pt0 = primPts[start];
int pt1 = primPts[start+1];
if (start == numPt-1) pt1 = primPts[0];
この2点が選べれば、それらのポジションの平均が中点になり、
vector P0 = point(0,'P',pt0);
vector P1 = point(0,'P',pt1);
v@pivot = avg(P0,P1); 
v@dir = P0 - P1 ;
-----------------------------------------------------------------
upとの外積を取る事でN、dirのlengthでx size、中心点からpivotまでの距離から
z size も取得できます。下図参照。

(set_pivot_N)
vector pivot = prim(1,'pivot',@ptnum);
@zsize = length(@P-pivot)*2;
@P = pivot;
vector dir = prim(1,'dir',@ptnum);
@N = cross(v@up,dir);
@xsize = length(dir);

(この図は黄土色のプリミティブのみ図解していますが、各プリミティブに同様の処理が行われます。)
scale_timeshiftノード
float timeShift = @Time - fit01(rand(@ptnum),0,2) ;
v@scale = set(@xsize, 1, chf('scale', timeShift) * @zsize ); 
先ほど同様、chvのオプションを使ってタイミングをズラします。各面が1方向にスッと動きを付けたかったのでz sizeのみアニメーションさせています。

以上です。

早いものでHoudiniアドベントカレンダーが始まってもう5年目ですね。

毎年沢山の方が記事を書いてくれています。過去のテクニックも古くなるものは殆どないので、是非みてみて下さい。


アペレンティス https://qiita.com/advent-calendar/2018/happrentice

2020年4月16日木曜日

007 トレイラー 公開


007のトレイラー公開されてました!
いつか関わりたいと思ってた作品なので参加できて凄く嬉しい。
公開はコロナの関係で未定。。 スクリーンで観れますように。

2020年2月10日月曜日

Houdiniが使われている良作第2段

今年もHoudiniが使われている良作を集めてみました。
去年のものはこちら→http://sugi-iggy.blogspot.com/2019/01/houdini_30.html

いつもながらハリウッド大作では必然的に使わているので、あまり知られていなさそうなものを集めてみました。



Motion Design Reel from Denis_Sartakov on Vimeo.


Netflix ロスト・イン・スペースの背景実例

18th VES ILP - Lost in Space - Environment from Important Looking Pirates on Vimeo.


Netflix ロスト・イン・スペースのエフェクト実例

18th VES ILP - Lost in space - FX from Important Looking Pirates on Vimeo.


毛・ファーの実例 For Sidefx

Andriy Bilichenko - Houdini grooming Demo Reel from Andriy Bilichenko on Vimeo.

珍しく背景周りの記事が出ていましたので貼っておきます。
フレームストアの記事
https://www.artofvfx.com/the-aeronauts-christian-kaestner-vfx-supervisor-framestore/

2020年1月21日火曜日

Houdiniワークショップ第4段

多くの方から、今年はいつ始まるのですか?とお問い合わせを頂きありがとうございます。
そしてすみません、まだ準備中で2月中旬あたりから始められたらと思っています。
今まさに新たな作例の追加や案内のページを作成中で(近日中に右上にWorkshop4が現れます。)しばしお待ち頂けたら幸いです。
まだ更新していきますが、2月15日から開催、正式に募集開始いたしました。
よろしくお願いいたします!!
https://sugi-iggy.blogspot.com/p/workshop4.html


以下は去年のアンケート結果です。






2019年12月3日火曜日

パリピHoudiniロゴアニメーションとPDGでムービー出力

この記事はHoudiniアドベントカレンダー2019 3日目の記事です。
https://qiita.com/advent-calendar/2019/houdini

まずは完成絵です。
この絵を見せた人から「パーティーピーポーみたいだね」と有難い感想を頂いたので
パリピHoudiniロゴアニメーションと題しました。

SoftbodyシミュレーションにはWireソルバーを使用。今やVellumeソルバーが搭載されてすっかり影の薄くなったWireソルバーですが、
こんな感じ固めでかつトゥーンチックな嘘っぽいシミュレーション(奥行方向には変形しないなど)を作ろうとするとVellumeでは上手くいきませんでした。
因みに文字同士は貫通したりしてますが気にしない事にします。


全体の流れはFont Sopで作った文字をDivideで分割して平べったい状態でシミュレーションし、最後に厚みをつけています。


まずはFontで作った文字をDivideで分割。


次に潰れた状態から3F目で元の状態になるアニメーションをつけます。Y軸スケールで0から1に。


その後Trail Sopでvelocityを作っておきます。Dop内で地面(Ground)を作るので、めり込まないように少しだけ(0.01)浮かせてあります。(Transform2)

dopnet1の中です。特別な事はせず、WireObjectで読み込みWireソルバーで計算させるだけです。

最後にPolyExturdeで厚みをつけて完成です。



PDGで連番をムービー出力。

今まではチュートリアルをWebにアップする場合は、レンダリングした連番を別ソフトでムービー(mp4)にしてYoutubeにアップする流れでしたが、Houdini17.5から付いたPDG(TOP)の機能によりHoudini以外の様々なタスクまでもプロシージャルに自動化出来るようなりました。そこでPDGの機能でムービー化してみようと思います。
(厳密にいうとPDGは単体のソフトでHoudiniにTOPとして一部の機能が付随しています。)

例えば、
モデリング -> エフェクト -> ライティング -> レンダリング  -> コンポジット -> ムービー作成 -> shotgunにアップロードまですべて自動化可能です。他にも様々なHoudini以外の機能があるので是非色々試してみてください。
(といつつもまだ新しい機能なので、私自身もSidefxのヘルプから参照できるサンプルファイルで検証を始めたところです。)

ヘルプに、OpenGL ROPで作成した連番からムービーを出力するまでのサンプルが
あったのですが、今回は連番をすでに作成済みだったので連番を再度作成せずに
ファイルを参照し、それをムービー化する方法を探りました。

まずは、TOP networkをobjレベルにつくり、

Topの中はデフォルトではlocalscheduler(一番右のノード)があるだけの状態ですが、
ヘルプ付属のサンプルファイルから、OpenGL Ropを参照しレンダリングが終わったらムービー化するネットワークを持ってきました。真ん中のwait for all ノードは上の全ての処理が終わってから次に進むノードです。


(localschedulerは使用しないと思って消してしまったのですが、そうするとTOPの計算が行われなくなるのでご注意を。これはTOPのスケジュールを管理するノードらしく残しておかなくてはなりません。)

TOPのノード達は繋ぐだけで、前のノードからどんなデータが出力されているか
既に判断されている様で、例えばこの例ではropfetchで参照している/out/openglが書き出した連番のファイルの場所が、一番下のffmpeg encode videoノードに渡されている様です。

ffmpeg encode videoノードのみでもファイルを参照できそうなのですが、txtファイルで指定する仕様になっていて、どのようなフォーマットで書けばよいのか不明なのと(この辺りはffmpegの仕様だと思います。)txtを用意するのも面倒ですのでTOP内で既に書き出された連番を参照するfile patternノードを見つけました。

ディレクトリ名とワイルドカード( *)を使用する事でそのフォルダのすべてのファイルを参照できます。


ropfetchをfile patternに入れ替えています。

全てを計算させるには右クリックからCook Selected Nodeを選びます。



以上です。


Houdiniアドベントカレンダーは2016年から続いています。
Houdiniのほとんどのテクニックは古くならずいつまでも使えるものが多いので是非読んでみて下さい。

https://qiita.com/advent-calendar/2018/happrentice
2017年 https://qiita.com/advent-calendar/2017/houdini
2016年 https://qiita.com/advent-calendar/2016/houdini










2019年3月28日木曜日

note始めました。

実験的ですが、Blogと何かが変わるのかと暫く続けてみようと思います。
2つnoteを書いてます。

Linux vs Windows10パフォーマンス対決その1

Linux初心者のLinuxとWindowsのデュアルブート環境構築(その1)。

2019年1月30日水曜日

Houdiniが使われている良作

これもワークショップの最初で紹介してきましたが、別の事に時間を使いたいのでまとめてみました。

ハリウッドの大作はほとんどの作品で使われているので、
なるべくあまり知られて無さそうなものを集めてみました。

BEAR from SHED on Vimeo.

ゲームFarCry5 ダイジェスト (5分) 1時間のセミナーはこちらhttps://vimeo.com/273986776
Far Cry 5 | Ubisoft | Houdini Connect from SideFX Houdini on Vimeo.


Logitech - Powerplay from Simon Holmedal on Vimeo.


Main Road Post "Attraction" VFX breakdown ' 2017 from Arman Yahin on Vimeo.


2016 AICP Sponsor Reel - Dir Cut from Method Studios on Vimeo.


Nike ~ Air Max 2017 from ManvsMachine on Vimeo.

2019年1月28日月曜日

Houdiniのメリット・デメリット

毎年ワークショップ1週目に力説しているところなんですが、他のことに時間を使いたいのでまとめてみました。

2025年3月アップデート。

メリット

・ソフトウェア設計・UIの一貫性
何を作るにしても似た方法で行えます。スキルの応用が容易で、新機能への対応も素早く行える。記憶に頼らずに済みます。

・ファイル内容・作業工程の可読性の高さ、パラメーターの変更箇所など明確。
・データの透明性、どんなデータがどこに入っているか明確、ビジュアライズ機能の搭載。
・学習がし易い。
プロシージャル、ノードベースのソフトなので他の人のファイルから作業順、作業内容が明確に分かります。

・柔軟性が高く、そしてデータが扱いやすい。
他のジオメトリからデータ転送、ジオメトリ・ボリューム・パーティクル区別なく扱えます。
アニメーションの伸縮、反転、他のフレームの値、形状の取得なども容易です。

・最新テクノロジーの導入が早く、毎年着実に大幅なバージョンアップが行われている。

・ファイルシェア、再利用のしやすい。ファイル間でのコピペ、ユーザー間でのシェアも非常にシンプル。
別ユーザー間でコピペ出来るツールなども用意してある会社あります。

・ファイルサイズが小さい。
通常の3Dソフトと違い、ノードの情報のみ保存しているので10MB以上になるのはほとんどありません。普段の仕事でも2ー3MB がほとんどです。
堅牢なパイプライン構築・バックアップ・トラフィック負荷軽減への恩恵があります。

・CG文法の理解が深まる。
Houdiniで使われる用語の多くは、ハリウッドのCG制作のスタンダードな用語です。
シーグラフや海外でのセミナーで話していることの理解度が高まります。

・使用用途、ユーザー層の拡大中 。
エフェクト、背景モデリングだけでなくモーショングラフィックス、CFX、ライティング・LookDev・レンダーマネージメントでも普及しつつある。(ライティング・レンダーマネージメントではHoudini CoreでSolaris運用が安定性・シンプルさ・コストパフォーマンスが良いと思います。)

・システム面でも環境構築しやすい設計。
豊富に用意された環境変数、HDAなどの仕組みのお陰でパイプライン構築コストが低いです。
他の多くソフトは、プラグイン同士の連携のリサーチ、導入手続き、ライセンス管理等のコストが非常に大きい。(HoudiniでもArnoldもしくはRedshiftはおすすめです。標準レンダラーのMantraは柔軟性は高く、何ライセンスでもフリーで使えるので巨大なレンダーファームがある会社にはメリットがありますが速度は遅いですが、新しいレンダラーKarmaが解決しつつあります。Houdini用のプラグインはノードで用意されるのでシームレスに移行できます。)


デメリット

・他の3D総合ソフトウエアよりも値段が高い。(とよく言われますが、上記のメリットを考えるとコストパフォーマンスは群を抜いて高いと思います。)

・キャラクターアニメーションの機能に関してはまだ発展途上。(20.5のApexで大きく進化しました。)
(MIGSでこの会社http://shedmtl.com/en/のセミナーを見て、大分良い所まで来ていると思いました。リグ・アニメーションもHoudiniに移行しています。)

・1 点物の手動モデリング等には向いていない。(ポリゴン編集はここ数年進化してきてはいます。)

・マテリアル周りが弱い。(シェーダーは柔軟で中へ潜ればカスタムできますが、表のUIはオプションが足りない気がします。プロシージャルシェーダーの種類が少ない。)

・ビューポートがMayaよりもレスポンスが悪い部分がある。(大量のポイントやポリゴン表示などはHoudiniは高速です。)

その他のデメリットと回避方法はワークショップで解説しようと思います。