7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

HoudiniのPythonのExpressionについて

7
Last updated at Posted at 2025-12-22

※Houdiniのエクスプレッションをちょっと書いたことがあるくらいの人向けの記事です。

何故PythonでExpression?

私も簡単なエクスプレッションは HScript で書いていたのですが
複雑なものになると Python で書くことが多くなってきました。
というかPythonじゃないと解決出来ない場合もあります。
例えばファイルの日付を見たりデータベースを参照したりなど
Pythonならではのいろいろな機能をエクスプレッションに使えるのは
とても大きいアドバンテージです。

普通にExpressionを書くと…

image.png
パラメータが緑色になっています。
これは Hscript の書式です。
簡便に書けてとても便利なのですが複雑なことをやらせるには向いていません。

エクスプレッションの言語を変えるには?

パラメータを右クリックして
Expression -> Change Language to Python

image.png

で出来ます。

昔は違うやり方でした

19.5まではパラメータの右上の歯車の隣にHscriptとPythonを切り替えるボタンがありました。
メジャーバージョンがひとつ変わると随分と昔の様に感じます。
image.png

現状(21.5)の引っかかりどころ

分かりづらいのですがパラメータの背景が黒(デフォルト)の状態だと
image.png
Expression -> Change Language to Python
がグレーアウト状態になっていて選択できません。
しかし適当な文字列を入れるだけでエラーは出ますがパラメータの背景が緑色になります。
image.png
この状態なら
Expression -> Change Language to Python
が選択出来る様になります。
文字を入れるのがめんどくさいとかエラーが出て気分的に嫌だとかであれば
Altを押しながらパラメータをクリックするとアニメーションのキーが打たれ
パラメータの背景が緑色になります。
image.png
こちらの方がめんどくさくなくて良いかもしれません。
私はいつもこの様にしています。
果たしてこれが正式なPythonエクスプレッションの設定方法なのかは分かりませんが
H20の時にインターフェイスが変わりましたとは言われたものの正式なPythonへの変更の仕方については正式な情報がなかったように思います。

簡単なエクスプレッションだと逆に煩雑

簡単なエクスプレッション、例えば

sin($F*3)

の様なものの場合、Pythonで同じ内容を書こうとするとこうなります。

import hou
return sin( hou.frame()*3*6.283/360 )

5倍以上タイプしないといけなくなり逆に煩雑で冗長なコードになります。
めんどくさいですね。
sin関数の引数もdegreeからradianに変換しないといけないのも手間です。

ExpressionでPythonが役立つ時

冒頭でも書きましたが処理が複雑な時、Hscriptにはなく
様々なPythonモジュールの中に必要な機能がある場合、Pythonが役立つと言えるでしょう。
比較的シンプルな例を提示します。

image.png

点群はアルファベット大文字小文字の入り混じった4文字のアトリビュートを持ち
この中から VFX という文字列が一度でも含まれる場合は右へスイッチしなさい、というものです。
image.png
SwitchのSelect Input にPythonを書いていきます。

import hou
import re
nd = hou.node('../setSTR')
geo = nd.geometry()
code = geo.findPointAttrib("code")
flg = 0
for pt in geo.points():
    val = pt.attribValue(code)
    if re.search( 'VFX', val ):
        flg = 1
        print(pt)
return flg

image.png
この様に検索した文字列にヒットしたらSwitchは右側の入力が選択されます。
HScriptではおそらくこういうことは出来ないでしょう。

パラメータの枠を超える長いPythonコードの書き方

image.png
ちなみにPythonのエクスプレッションを設定したパラメータは背景がこの様な小豆色になっています。
当然、エクスプレッションの文字数は多いのでAlt+EでEdit Expressionを起動してこの様な小ウィンドウを出して
Expressionを編集するのですが
image.png
外部エディタを設定してある場合
Expression -> Edit in External Editor
image.png

をするとこの様に
image.png
VisualStudioCodeなどで編集出来るようになります。

1文字でも間違うと動かない

Expressionもコードなので当然そういうものです。
Pythonに限らずwrangleもC++もみんなそうです。
書き方が違うとSyntax Error(文法エラー)を吐きます。
Pythonはコードが長くなるので余計間違えやすいです。
AIに考えさせたコードもどこかしら間違いがありそのままでは使えないことが多いです。
英語を話すのも、絵を描くのも、コードを書くのも慣れです。
エラーメッセージを吐いてくれる分まだ優しい方です。

頑張れる人の為にお助け機能をご紹介します。
image.png
Houdini Python専用のものはありませんがVSCのPythonの拡張機能もありますので
こういったもので凡ミスは減らせるでしょう。

まとめ

ここを読むとSideFXはユーザーにHscriptから徐々にPython(hou)に移行して欲しがってる感じはしますが、実際Hscriptを廃止するという選択肢は有り得ないので現状で良いのかもしれません。
PythonのExpressionを設定する際の煩雑さは改善を求めたいところですが
(とはいえ昔のバージョンのHoudiniを触ると確実に触り心地の良さが改善されているのが分かります。)
ユーザーにもPythonをカジュアルに書けるコーディング能力が求められるところでもありましょう。
(個人的にはPython内でverbとして扱えるSOPの数が増えてくれると自動化の助けになるので嬉しいですが。)
この記事が過去の私の様な迷える子羊な皆様の一助となれば幸いです。

7
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
0

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?