kick the base

Houdiniと、CG技術と、日々のこと。

Houdini: CGWORLD 2022 クリエイティブカンファレンス登壇内容の振り返り

もうアドベントカレンダーの季節とか嘘でしょう…?(N回目)

気を取り直して皆さんいかがお過ごしでしょう。

今年はCGWORLD MASTER CLASS ONLINE vol.9 《Houdiniアドバンスコース》や表題のCGWORLD 2022 クリエイティブカンファレンスで登壇をさせていただく機会をいただき、また実務でもチャレンジングなプロジェクトでお仕事をさせていただいたりと目が回るような一年でした。主催している勉強会も再始動しまして、Houdini三昧の毎日でした。

今回は表題の通り、公演させていただいた「カプセル化しないHDAを作ってみよう」について振り返りをしたいと思います。(ボーンデジタル様には記事公開許諾済みです)

Houdini 夜会 2022 SP

本記事はHoudiniアドベントカレンダー2022 15日目の記事です。

目次

データ配布

記事で使用したシーンはこちらからダウンロードできます。

  • Windows10
  • Houdini 19.5.403

ツール制作の背景

本ツールのオーダーとしては単純です。

  • 配布(再利用)しやすいこと
  • 生成されたネットワーク(ノード群)はすべて編集可能であること
  • 複雑なネットワークを構築可能なこと

それらを満たしたものが今回ご紹介した開いたHDAというわけです。

※ 少し変わったアプローチのご紹介という意味合いもあります

作り方

Pythonに慣れが必要ですが、それ以外は特殊なことはしていません。

また、今回ご紹介したコードに様々なノードのコントロール方法が含まれていますので、多くのケースに対応できるかと思います。

1.HDAを作成する

  1. サブネットワークを右クリック
  2. Digital AssetからCreate Newを実行

これだけです。

2.HDA自身を生成するコードを削除

ここが本講義の最大のキモとなります。まずType Propertiesから下記階層に移動します。

Interactive > Shelf Tools > Script

そして、下記コードをコメントアウトもしくは削除します。

soptoolutils.genericTool(kwargs, '$HDA_NAME')

この一文がHDA自身を生成するコードだったわけです。

3.Pythonでネットワークを構築する

Interactive > Shelf Tools > ScriptにこのHDAがどんなノードを生成するかの振る舞いが書かれているので、ここで望み通りのコードを書きましょう。

今回は下記のとおりとなっています。

  • ノードに任意の名前を付ける
  • パラメータに値をセットする
  • ノードの接続をコントロールする
  • ノードの位置を決定する
  • チャンネルにエクスプレッションをセットする
  • WrangleにVEXを記載する
  • ノードにパラメータを追加する

これらが網羅されたコードとなっています。ご参考ください。

4.手打ちが面倒な方へ

ノードの接続や位置の決定、パラメータの調整などはケースバイケースで良いと思いますが、少しでも手間を減らしたいあなたのために選択したノードを生成し、戻り値として受け取るという部分を簡単に自動化するシェルフツールを用意しました。実行するとHoudini Consoleにプリントされます。もっとちゃんと作り込んでもいいですが、簡単のためご紹介と言うかたちでお茶を濁します。

import re

for node in hou.selectedNodes():
    text = node.asCode()
    
    p = r'createNode\("(.*?)"'
    m = re.search(p, text)
    type = m.group(1)
    create_node = f"{type} = soptoolutils.genericTool(kwargs, '{type}')"
    print(create_node)

例) AttributeWrangle、Null、Transformを選択して実行した場合

attribwrangle = soptoolutils.genericTool(kwargs, 'attribwrangle')
null = soptoolutils.genericTool(kwargs, 'null')
xform = soptoolutils.genericTool(kwargs, 'xform')

シェルフの使い方自体はHoudini: Pythonでノード操作してみる。をご参考ください。

まとめ

最後まで読んでくださった方、ありがとうございます。少し珍しいアプローチかと思いますので、実際に利用するかどうかはおいておいて、何かの際に役立てるかも知れません。

来年もいろいろなHDAを作っていくことでしょう。便利そうなのがあればまた来年ご紹介しますね!

明日はTrsVrcさんの記事です。

ではでは!