kick the base

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

Houdini: Event Scriptを利用してWrangleのRun Overを表示する

最近チーム開発について思いを馳せているめんたいこです。皆さんいかがお過ごしでしょう。

今回はWrangleの対象(Run Over)をネットワークエディタ上で確認できると良いなぁをかなえるTipsについての記事となります。ノードの名前($OS)に_pointとか_primitiveなどのサフィックス(接尾辞)やプレフィックス(接頭辞)をつけてもいいですが、人力でやるのもなんだかアレですよね。

そこでHoudiniの機能であるEvent Scriptという機能を使って実現しましょう。最終的にはこんな感じ↓になります。

ちなみに動画に写っているF3キー1発でAttribute Wrangleを作成するScriptについては以前下記記事にまとめましたのでご参考ください。

www.kickbase.net

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

目次

執筆環境

  • Windows10
  • Houdini 18.5.563

まだHoudini19にしてなくてすみません…

制作の背景

先にも書いたとおり、「Wrangleの対象(Run Over)をネットワークエディタ上で確認したい」シンプルにそんなオーダーになります。

個人的に、ネットワークは「読んでわかる」ものより「見てわかる」もののほうが良いと思っているので、VEXを追うことなく、ノードを選択してパラメータを確認することなくRun Overがわかるようにしたいと考えました。

Event Script is 何

これはSOPやLOPなどのコンテキストとは全然別のお話で、いうなればHoudini全体の仕組みで使えるPythonスクリプトのことです。

簡単な図を用いて解説しましょう。

実はノードを作成したとき、ユーザーは全く気づきませんが、Houdiniは裏側でノードを作ったで!とシグナルを発生させています。

f:id:kickbase:20211216212203j:plain

該当するPythonスクリプト*1を作らなければ毎回空振りをするだけで、特に何もしません。

しかし、該当するPythonファイルをHoudiniが認識できる場所に作っておくとそのファイルを実行してくれるのです。これがEvent Scriptという仕組みです。

f:id:kickbase:20211216212552j:plain

ただ「ノードが作られたよ」という情報だけではなく、特定のノードが作られたときに実行してねということも可能です。今回はこの仕組みを使っています。

f:id:kickbase:20211216212806j:plain

ちなみにこのような仕組みをプログラムの世界ではイベント駆動と呼んだりします。

  1. 先に実行したいプログラムを用意しておき
  2. イベントが発生したらそれを実行!

というシステムです。イベントが発生することを発火と言ったりします。爆弾を用意しておいて火がついたらBOMB!というイメージでとらえるとわかりやすいかもしれません。

スクリプトの作成

今回のブログ記事はEvent Scriptの仕組みを紹介することなので、スクリプト自体はサラッと流します。とても短いコードなのでPythonを書く方であれば疑問は少ないと思います。

すごく簡単に説明すると、ノードが作られたときこちらのコードが実行され、main関数内でUserDataにRun Overの対象を渡してセットしています。

プロジェクト規約としてUserDataをすでに使用しているチームでは使えない方法ですので、そこらへんはよしなに対応してください。

ファイル名設定

Event Scriptの仕組みではPythonファイルのファイル名が重要になってきます。

今回はWrangleが作られたときに実行されてほしいので、attribwrangle_oncreated.pyという名前をつけましょう。

見て分かる通り{ノードタイプ}_oncreated.pyとしてあげればOKです。詳しくは下記記事にまとまっていたので参考とさせていただきます。

qiita.com

ファイルの設置

ファイルを置く場所も重要です。最初に書いたとおり、Houdiniが認識できる場所に保存することが重要になってきます。

C:\Program Files\Side Effects Software\Houdini [version]\houdini\scripts\sop

Windowsの場合は上記に保存してください。下図の通り、実行したい処理がsopだったらsopフォルダ以下に、objならobjフォルダ以下に保存すればOKというのがわかるかと思います。

f:id:kickbase:20211216221708p:plain

インストール方法のまとめ

Gistにまるっと書いておいたので解説が不要な方はこちらをご覧になるだけでOKかと思います。

[Houdini] [Python] Check Run Over with UserData on Network View · GitHub

まとめ

Event Scriptの仕組み、駆け足のご紹介でしたがいかがでしたでしょうか。使い方によっては夢が広がりそうですね。それでは良きチーミングを!

ではでは!

*1:該当するスクリプト、というのは後述します