Houdini Expressionのメモ

便利そうなHoudiniのExpression周りについてすぐ忘れちゃうのでメモ
随時更新
最終更新 2022/08/26

環境
mac os Catalina 10.15.7
Houdini FX(apprentice) version 19.5.303


エクスプレッション の種類


Houdiniは2つの異なる言語:従来のHScriptエクスプレッションとPythonでエクスプレッションを記述することができます。さらに、特定のノードではVEXスニペットを記述することで、そのノードの挙動を制御することができます。

HScriptエクスプレッション
エクスプレッションを記述するための従来の方法。エクスプレッション関数を使用します。
Python
エクスプレッションを記述するための強力で冗長な方法。Houdini Object Model APIとPythonビルトイン関数を使用します。
VEX
高速なコンパイル言語。特定のノードの特定のパラメータでのみ利用可能です。

デフォルトでは、Houdiniのパラメータは上記で説明している従来のHScriptエクスプレッション言語を使用します。 特定のパラメータ、ノード、またはすべてにPythonを使用するように切り替えるには、Pythonパラメータエクスプレッションを参照してください。

https://www.sidefx.com/ja/docs/houdini/network/expressions.html




ex help / ヘルプについて

Hscript textportより、
exhelpでHscript エクスプレッション のhelpを参照することができる。

Hscript textport


Houdini公式のエクスプレッション についてまとめている記事は以下。



Spare Inputについて


Compile blockのために、spare inputなどを作っている際に、
ノードpathを−1と指定すると spare inputのpath名が引用されるようになる。

detail(-1, "iteration", 0)

Spare inputがたくさんある場合。

エクスプレッション側で参照する際には、上から順に-1,-2,-3,-4,….とマイナスの値が対応しています。
つまり、「Spare Input0=-1」、「Spare Input1=-2」という風に。
数字が一致していないのは気持ち悪いですが、仕様なので受け入れます。
パラメータ名にマウスを合わせると出てくるヘルプに、そのSpare Inputを参照する際の番号が書かれています。

http://nomoreretake.net/2018/08/18/houdini_spareinput/


String パラメーターについて


Stringが想定されているパラメーターのところにexpressionを書こうとしてもうまく認識されない場合、
明示的にバッククウォートで囲んであげると、そこはエクスプレッション として認識されるようになる。


しかし、StringでもExpressionを利用したい場合があります。その場合は `{}` を利用します。
String型であっても `(バッククォート)で囲った部分はExpressionとして機能します。

https://qiita.com/jyouryuusui/items/08090811fec7177afc45



HScriptグローバル変数

どのnodeでも使えるグローバル変数。


Expression Local Variables

ローカルな値が適用される変数。

https://qiita.com/jyouryuusui/items/08090811fec7177afc45


 



detail

任意のnodeのDetailについてのattributeを参照してくることができる。

detail(<surface_node>, <attrib_name>, <attrib_index>)

detail("/obj/geo1/attribpromote1", "area", 0)

detail(パス, attribute名, attributeのindex)

attributeのindexは Pとかだとxyzあるので、 Pyだったら、1とindex番号を指定してあげれば良い。


rand

ランダム関数
rand(数値)として入れると、数値に対応したランダムな数値を返す。
iterationやtimeなどを入れるのが無難。

この記事が気に入ったらサポートをしてみませんか?