kick the base

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

Houdini: 初学者への教材作成に役立ちそうなツールをいくつか作りました

Houdini楽しんでますか?僕の方はおかげさまで通常の制作のお仕事とは別に、個人レッスンのご相談をいただいたりして日々頑張っています。

Houdiniはとても高度なツールなので、最初のうちは一つ一つの概念を丁寧に教えることに重点を置いていますが、ある程度下地ができてきた頃にレッスンとは別に宿題を出しています。宿題の取り組み方は下記のとおりです。

  1. 最終絵(一枚絵 or 動画)を見てもらい、それを自身で組んでもらう
  2. Houdiniはノードが多岐にわたるため自分ではまだ有用なノードが探せない場合は、ヒントとなるネットワークを見ながら進めてもらう
  3. ヒントとなるシーンは最終的なネットワークから「全部ワイヤーを切った状態(ノードだけある状態)」とする

これに取り組んでもらうことによって、使用するノードを限定しつつHoudiniらしい考え方を体得してもらうことに近づけるかなと思っています。

上記教材を作成する補助として下記ツールを作成しましたのでそちらをご紹介します。

  1. 現在のビューポートを画像として書き出すツール
  2. 選択したノードのコネクションを切るツール
  3. 選択したノードのコネクションを切り、パラメータをデフォルト値にするツール

目次

現在のビューポートを画像として書き出す

下記画像のようにビューポートの画像をJPEGイメージとして保存します。

f:id:kickbase:20200618193119j:plain

保存するファイル名はデフォルトでHIPファイル名+日付です。

f:id:kickbase:20200618181554p:plain

Pythonコードは下記の通りです。

ポイントとして、最初環境変数の$HIPNAME(拡張子なしファイルネーム)に類する文字列表現の取得方法を知らなかったので下記直球なコードで取得していました。

import os
bn = hou.hipFile.basename()
hn = os.path.splitext(os.path.basename(bn))[0]

そちらを大翔士さんさんにアドバイス頂き、こんなスマートな書き方で表現できました。

hn = hou.getenv('HIPNAME')

hou.getenvを使えば環境変数を色々取得できますね。この場を借りてお礼申し上げます。

選択したノードのコネクションを切る

f:id:kickbase:20200618194628g:plain

コードをご覧いただければ分かる通り、愚直に選択したノードのコネクションを切っています。

しかし、このスクリプトを使用すると各パラメータは最終型のものが残るので、大ヒントになってしまうかな?と思われます。より初心者向きです。

パラメータを自身で組んで見てほしい場合は下記の「選択したノードのコネクションを切り、パラメータをデフォルト値にするツール」を使用することをおすすめします。

選択したノードのコネクションを切り、パラメータをデフォルト値にするツール

f:id:kickbase:20200618193742g:plain

選択したノードのコネクションを切り、パラメータをデフォルト値にするツールとありますが、実装上は選択したノードをひとつづつ取り出し、削除した後同名・同タイプのノードを作り直しています。これがベストな実装とは思えないので、直接的にパラメータをデフォルト値にするような方法があれば教えていただけると幸いです。

また、VOP等の入れ子構造のノードは何も考えずノードを作り直してしまうと内部のノードが全て消えてしまうので、再帰処理を入れています。ここも判定がnode.isEditable() and(len(node.children()) != 0)であってるのかどうかは微妙な線な気もしないですが、今の所問題はなさそうなのでより良い方法があれば修正できればと考えています。

シェルフに登録する

シェルフの登録に関する細かい手順は以前の記事を参考にしてください。

www.kickbase.net

まとめ

いかがでしょうか。非常に簡単なスクリプトですが、教材作成のお供にするにはありなのではないかなと思います。

ご興味があれば使ってみてください。