絶対に挫折しないHoudini入門 12 - スクリプト

スクリプト

 Houdiniで使用できるスクリプトにはHScript、VEX、Pythonの3つがあります。スクリプトは(文脈によって)Expressionと呼ばれていたりします。

※細かい話ですが、"スクリプト"は言語をそのものの意味で、"Expression"はパラメータフィールドなどに記述されたスクリプトの事を意味します。「スクリプトを書く」、「Expressionを書く」と相互に言い換えられるので、とりあえずは同じような意味だと思っていて大丈夫です。
※Expressionという表現/概念はHoudiniに限らず多くのツールで使用されています。(例 AfterEffectのエクスプレッション)
※Pythonについてはこの記事では触れません。

 こちらのリンクは詳細やTipsがまとまっているため参考になります。
【Houdini16.5基礎編】19.Expressionsとスクリプト

 ちなみにVOPはVEXをノードベースで記述できるようにしたものです。

 HScriptとVEXは書ける場所も文法も良く似ているため、混同しないように注意が必要です。

パラメーターエクスプレッション
パラメータ内に数式のような短いコードを入力して、数学や、現行フレーム番号、ポイント番号、乱数などの変数を使用して値を計算することができます。
VEXエクスプレッション
Houdiniのいくつかのノードでは、短いVEXエクスプレッションやVEXコードのスニペットを記述することができます。例えば、Point Wrangle、Attrib Wrangleジオメトリノード、Geometry Wrangle、Gas Field Wrangleダイナミクスノード、パーティクルダイナミクスノードです。

 基本的にパラメータ内に書けるスクリプトはHScriptで、AttributeWrangleノードなどで記載できるスクリプトはVEXです。
 VEXが記載できるフィールドには「VEXpression」と書かれていることが多いです。

 以下はHScriptとVEXそれぞれでSphere(Primitive)をx軸に沿って1秒で1ユニット移動させる例です。

HScript↓ (パラメータ内に記述)

画像1

VEX↓ (Attribute Wrangle内に記述)

画像2

 ちなみに、Point Wrangle、Primitive Wrangle、Vertex Wrangleとたくさん種類があるように見えますが、実体はAttribute Wrangleノードです。配置時の初期設定が異なるだけです。

 HScript、VEX共に使用できる変数や関数がヘルプにまとまっています。

エクスプレッション関数(HScript)
HScriptのグローバル変数

VEX関数
VEXインデックス変数
VEXグローバル変数

 Houdiniを使い続ける限り(完璧に暗記でもしない限りは)ずっとお世話になるものなので、ブックマークなどしてすぐにアクセスできるようにしておくと良いと思います。
 関数名を入力すると、その関数のリファレンスが表示されたりします。(すぐに消えてしまって見やすいとは言えません。再表示のショートカットキーはあるのでしょうか?)

画像3

 また、関数名にマウスオーバーしてF1を押すと組み込みのブラウザでヘルプが表示できます。

画像4

Spare Parameter

 Spare ParameterはAttribute WrangleノードなどでVEXを使用するときに非常に有用な機能です。
 自分で調整したいパラメーターのUIを設けることができます。

 作成するにはch関数を使います。VEXpressionの部分でch関数を使ってパラメーターを書き...

画像8

右側のスライダーの様なアイコンを押すと...

画像9

 下にパラメーターのためのUIが作成されました。この場合Radiusをしましたが何でも好きな名前を付けることが出来ます。UIで指定した値が、VEXの変数に入ってきます。

スクリプトを快適に書くために

 VEXpressionノードのフィールドが狭いと感じた場合は、フィールドを右クリック > Expression > Edit Stringを選択することで、大きなウィンドウで表示/編集することが出来ます。
 Ctrl + E または Alt + E のショートカットで表示することもできます。

 さらに快適にスクリプトを書きたい場合は、外部エディタを指定して好きなエディタ環境で書くこともできます。
 フィールドを右クリック > Expression > Edit in External Editorを選択します。初めて実行した場合は、エディタを設定するためのダイアログが表示されます。

 ちなみに自分はVS Codeを愛用していますが、VS CodeにはVEXのためのエクステンションがあります。シンタックスハイライトや関数の補完などをしてくれるので便利です。

画像7

VEXのデバッグ

 VEXを書いていて、なかなか思ったように動かないとき、変数に正しく計算された値が入っているかなど、デバッグをしたくなる時があります。VEXのデバッグには2つの方法があります。

1. GeometrySpreadsheetを活用する
2. コンソール出力

1. GeometrySpreadsheet
 vectorの中身など、大量のデータを見たい場合に便利な方法です。VEXでは任意のアトリビュートに簡単に値を入れることが出来ます。以下はhogeというアトリビュートを作ってGeometrySpreadsheetで確認している例です。

画像6

2. コンソール出力
 printfで任意の変数をコンソールに出力することが出来ます。大量のデータの場合は、見にくいですし、フリーズしてしまうこともあるのでちょっと注意です。

画像5

スクリプトを使いこなす

 AttributeWrangleノードなどVEXが記述できる強力なノードがあるため、入門者としては、HScriptでパラメータフィールドに複雑な処理を書く機会はあまりない(?)と思います。

 なのでまずはVEXについて学び、作品に役立てるのが良いのではないでしょうか。VEXについてはエキスパートの方々が素晴らしいチュートリアルや書籍を作ってくださっているので、それらをいくつか紹介してお茶を濁します。

 Junichiro Horikawa氏のYouTubeチャンネルではVEXを駆使して魅力的なビジュアルを作成するチュートリアルが多く挙げられています。

 VEXの言語仕様は割とシンプルなので、VEXを書くこと自体はそこまで難しくないと思います。結局大事なのは数学や物理ですね(白目)。

もしこの記事があなたのお役に立てたなら幸いです。 よろしければサポートをお願いします。今後の制作資金にさせていただきます!