>   >  Houdini Cook Book:vol.84 Compile
vol.84 Compile

vol.84 Compile

Compileを利用したメモリの節約手法を検証します。

TEXT_秋元純一 / Junichi Akimoto(トランジスタ・スタジオ/ディレクター)
日本でも指折りのHoudini アーティスト。
手がけてきた作品は数々の賞を受賞している。
代表作に、HIDETAKETAKAYAMA『Express feat. Silla(mum)』など。
www.transistorstudio.co.jp
blog.junichiakimoto.com


EDIT_小村仁美 / Hitomi Komura(CGWORLD)

Houdiniのワークフローにおける「コスト」の考え方

今回は、Houdiniのワークフローにおける大きなテーマである、「節約」に関して検証していきたいと思います。節約へのアプローチは様々あり、どれが正しい方法かはその都度変わるもので、正解はありません。ただ、様々なアプローチができるように、引き出しは多いほうが良いと考えます。

昨今、マシンパワーの向上により、あまりメモリやストレージ、CPUなどの負荷を考えない傾向にあると感じます。特に、近年のHoudiniは一昔前に比べて非常に高速化していることも相まって、ワークフローにおける節約の頻度は確実に減っている、もしくはなくなってしまっていると思います。巨大なデータを扱えるようになったため、それがまるで当たり前のように振る舞ってしまうことで、見えないところで無駄な負荷をインフラに与えてしまっている傾向があります。

Houdiniは元々非常に高コストなソフトであり、先人たちは知恵を絞ってそのコストを落としてきました。汎用的なHDAなどがあることは、その知恵を探る機会を奪っているとも言えます。今回は、そんな状況を打破する意味も込めて、Houdiniのワークフローにおける節約と言うテーマから、Compile SOPを用いたアプローチに絞って検証していきたいと思います。

今回のHoudiniプロジェクトデータはこちら

01 Compile test:case 01

Compileの検証をしていきます。

まずは、Houdiniに負荷をかける準備をします。Forを用いて、単純なBoxに対し、SubdivideとDeformをくり返し適用します【A】

このとき、Block Begin SOP【B】はMethodをFetch Feedback【1】に設定し、Block End SOP【C】のIteration MethodはBy Count、Gather MethodはFeedback Each Iterationに設定します【2】。この設定で得られる結果は、前のIteration結果をFeedbackしてそれぞれのIterationにおいてSubdivideおよびDeformを適用するというものです【3】。その結果、全体のフローで【4】のような結果となりました。



次に、Compile SOPを用いたフローで試します。Compileの用い方はForと同様で、処理したいフローをBlock Begin Compile SOP【D】とBlock End Compile SOP【E】で挟み込む手法になります。

その結果、下図【5】のようになりました。ここから見えてくる情報を読み解くと、Compileを使用しないアプローチでは、メモリの消費が非常に多いことがわかります。その代わり、Compileの方が、若干Cookingに時間がかかっている状況です。この原因はHoudiniのCookingのしくみにあり、SubdivideやDeformなどの処理をするためにいったんジオメトリの情報をキャッシュしているため、Iterationが増えると同時にメモリ消費が上がるためです。しかし、Compileを使用した場合、キャッシュの受け渡しが最低限になるため、このようにメモリ消費を最小限に抑えることができます。

また、Compileを使用する際には、エクスプレッションに制約ができるため、Metadata【F】を活用するためにはSpare Input【6】を使用する必要があります。Add Spare Input【7】で追加して、Metadataへアクセスし、detail()などの"../repeat_begin_metadata"を-1にして再定義する方法があります。


次ページ:
02 Compile test:case 02

その他の連載