トランジスタスタジオ・秋元純一氏によるHoudini連載「Houdini Cook Book」がリニューアル! Houdiniをより基礎の部分から解説し、最後にはふり返りとして課題も用意しています。Houdiniをこれから習得したい人も、改めて基礎をふり返りたい人も、ぜひ取り組んでみてください。

記事の目次

    秋元純一 / Junichi Akimoto

    株式会社トランジスタ・スタジオ/取締役副社長

    2006年に株式会社トランジスタ・スタジオ入社。日本でも指折りのHoudiniアーティスト。手がけてきた作品は数々の賞を受賞している

    www.transistorstudio.co.jp

    はじめに

    今回から心機一転で再開する本連載。過去に誌面、Webと十数年に及んで連載してきた「Houdini Cook Book」をベースに、これからHoudiniを学んでいきたい人をターゲットとして、ベーシックな部分をより強固にしてお届けしていきたいと考えています。

    もちろん、これまで読んでくださっていた皆さんにとって、制作のヒントになるようなポイントも押さえていきたいと思いますので、ぜひご愛読いただければ幸いです。

    まだフォーマットが固まり切っていない本連載ですが、これまでとちがう点としては、チュートリアルのように一方的ではなく、読者の方が考えて学んでいけるような構成を目指しています。大筋では①アプローチの参考になる作例と、②ヒントになるHoudiniの機能の解説、最後に、③課題を投げかけたいと考えています。

    課題といっても答えの決まっていないクイズのようなもので、こちらから提案する表現を、皆さんそれぞれのアプローチで導き出してもらって、こちらからは回答のサンプルをお渡しするようなながれを想定しています。

    Houdiniは、考えることが楽しめる稀有なツールです。ぜひそれを享受してもらいたいと思い、こういったフォーマットを考えました。今後、皆さんのご意見と共に成長する連載であればと願っています。

    Copyで知るHoudini

    今回のテーマは「Copy(コピー)」です。Houdiniでも特徴的な機能のひとつですが、単純な複製ではなく、Forループを使って、複製時にそれぞれのターゲットで固有の数値を入れ込んでいくようなアプローチを解説します。

    Houdiniにおいては非常に基本的なアプローチですが、通常のCGツールではこう言ったアプローチが難しいため、最初は戸惑うかもしれません。特に、今回登場するForという機能はプログラミング的な考えをもっているため、慣れないと意味不明です。

    しかし、いったん理解してしまえば非常に強力な武器になることは間違いなく、他のツールでは表現しづらいものにも、いとも簡単にアプローチできます。

    Houdiniの歴史からみると、この考え方は非常に古くからあり、年々進歩して現状のようなアプローチになっています。Forのようなくり返し処理というものは、Houdiniにとって非常に得意な演算であり、それが他の追随を許さないひとつの理由でもあります。

    ぜひ今回を機に、Forを使ったCopyの基礎を学んでいきましょう。今回のプロジェクトデータは以下からダウンロードできますので、開いた状態で読み進めるとよりわかりやすいと思います。

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

    01 Main Flow / Forを使った制作例

    今回の作例のフローは以下のようになります。

    ▲フロー全体図(※クリックで拡大)

    STEP 01

    まず、ベースとなるGrid【A】を用意します。

    Gridはこの後コピーしたいサイズで分割数を決定します。今回は立方体をコピーしたいので、正方形を同等の数で分割しています【1】

    STEP 02

    次に、Gridの分割に合わせたBox【B】を作成します。Boxは立方体で、Y軸方向で下面が0になるように設定します【2】

    STEP 03

    Gridに対して、VOP【C】を使いY軸方向へNoiseで高低差及びカラーを作成します。

    VOP内では、Noiseを作成する座標を別のNoiseを使って歪ませる手法を使用しています【D】。このあたりのアプローチは自由ですが、今回は、簡単に割と複雑で有機的に見えるようなアプローチを使っています。さらに同じようなアプローチで色情報も追加します【E】

    このVOPでは、敢えて変形を用いて、最終的な形状に近いものをプレビューできるようにしています【3】

    STEP 04

    次に、VOP【F】を使ってNoiseの変形を取り除き、改めて平面に戻して【G】、変位分のみをAttributeの"height”として出力します【H】

    これにより、コピーの準備が整いました【4】

    STEP 05

    複製には、Copy to Points SOP【I】を使用します。今回は、ForCompileを使用してくり返し処理を行います。

    まずCompile Blockを作成し、Block Begin Compileを複製します【J】。次に、For Each Pointを作成し、Block Beginを複製します【K】

    複製元となるBox【B】からはMethodをFetch Inputに設定したもの【5】、複製先となるGrid【A】からExtract Piece or Pointに設定したものを接続します【6】。この際、Block Begin Compileは作成時の設定で問題ありません。

    Block Endでは、Multithread when Compiledを設定します【7】

    STEP 06

    Grid側のBlock BeginからNull【L】を作成し、わかりやすいノード名へ変更します。画像では「GEO_HeightData」としています。

    STEP 07

    Box側にTransform SOP【M】を作成し、Transform SOPのパラメータのギアマークからAdd Spare Inputを作成します。これに先ほどのNull【L】を指定します【8】

    次に、Size Yに対して、Null【L】がもつ"height"のAttributeをPoint()関数で指定して、元々のNoiseの変形の形状になるようExpressionを組みます【9】

    さらにTransform SOP【N】を作成し、Size XとSize Zのみが少しだけ小さくなるようにギャップを作ります。これで処理をすると、"height"がもつ情報によって、配置されたBoxの高さがそれぞれ変更されるようなかたちでコピーされます【10】

    これで、コピー時にそれぞれ異なる値を適用する方法が理解できたかと思います。

    Forは様々な反復処理ができますが、今回はFor Eachという手法で、Pointそれぞれに対して処理をくり返し、最後にまとめて出力しています。

    この場合、くり返し処理の重さはPointの数によって決まりますが、Compile Blockを使用することで、1つのノードのように処理することが可能になり、並列処理が行えます。そのため、反復処理の時間を大幅に減らすことが可能になります。

    今回のような単純な反復処理であれば概ね効果的ですので、このアプローチはセットで覚えておくと役に立つでしょう。

    02 Hints / 制作に役立つヒント

    Edit Parameter Interface

    今回のNoiseを使ったAttributeの編集において、その後の調整に重要になってくるのがユーザビリティです。

    VOPはParameterをつくりっぱなしだと、どれがどういう効果を生むのかわかりにくくなってしまいます。特にNoiseを多数使う場合などは、Labelがかぶるため余計にわかりにくくなります。そういった使いにくさを解消するためにも、Parameterは整理整頓されていることが望ましいですね。

    今回はAttribute VOPのパラメータにあるギアマーク(設定)から、Edit Parameter Interfaceを開いて編集しています。この方法は、今後登場していくHDAなどのAsset制作の際にも重要な項目で、さらに言えば、Houdiniの環境開発やワークフローにおいても非常に重要な存在となっていきます。

    使用方法の詳細を解説するのは難しいですが、整理するだけであれば特に難しいこともなく、慣れてしまえばさほど混乱することもない設計になっています。実際にはParameterを様々な編集でカスタマイズすることが可能なので、自分なりの整理方法を試してみてください。

    Performance Monitor

    今回のような大量の反復処理を行う際に、重要になってくるのが処理速度です。ワークフローを開発する際には、そのパフォーマンスが正しいのか、スマートにできているかなど、存分に悩むことが大切です。

    そういった際に重宝するのが、Perfomance Monitorです。トップメニューの[Windows]から開くことができます。 このモニタは、Cookingの際に、どのくらいの負荷がそれぞれのノードにかかっているのかを計測・記録することが可能です。

    今回の場合、Compile Blockを使用した場合とそうでない場合を比較してみると、その差は歴然だと思いますのでぜひ試してみてください。こういった処理のちがいを知ることで、単純なマシンパワー依存から脱却し、スマートな処理を行えるようになるはずです。

    03 Issues / 今回の課題

    Issue 01:コイルを作ろう / Modeling ★☆☆☆☆

    簡単なコイルのしくみを作ってみましょう。 らせん状のものをどうすれば作成できるか、考えてみましょう。

    Issue 02:階段を作ろう / Modeling ★☆☆☆☆

    階段をプロシージャルなしくみで作ってみましょう。 リニアに連続するものをどうやればスマートに作れるか、またそれに対して基本的な変更が加えられるように考えてみると良いと思います。

    Issue 03:ギアを作ろう / Modeling ★★☆☆☆

    ギアの基本的なしくみを作ってみましょう。 回転体として連続するものですが、どうすれば基本的な変更を加えやすいかなど、その後の調整なども踏まえて作ります。

    こちらの制作例は、今回のプロジェクトデータ内に用意しています。ひととおり制作できたら、ぜひ確認してみてください。

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

    TEXT_秋元純一 / Junichi Akimoto
    EDIT_小村仁美 / Hitomi Komura(CGWORLD)