On this page |
概要
従来では、Houdiniの環境変数の値を設定する方法はhoudini.env
ファイルを編集することでした。
セットアップで一番重要な変数は$HOUDINI_PATH
です。
この変数は、アセットなどのファイルを検索する場所をHoudiniに伝えます。
他にも、便宜的な変数(例えば、$TEXTURE_DIR
)を作成したり、システム環境変数($PATH
などのバイナリ検索パス)を編集しても構いません。
ここで問題になるのは、ユーザだけでなく、スタジオやプラグイン作成者なども環境変数を設定したい場合です。
複数の関係者が最終的にそのhoudini.env
ファイルを書き直したり記述を足したりすることになり、場合によってはエラーが起きたり、冗長になりがちです。
さらに、ある場合に変数を定義し、そうでない場合に定義したくないこともあります(例えば、プロジェクト固有のパスに切り替えたり、"実験段階の"アセットを有効化/無効化したい場合です)。
このようなセットアップを可能にするための新しい解決策が パッケージ です。
パッケージは、HOUDINI_PATH/packages
内に.json
ファイルとして格納します。
各パッケージファイルには、その環境設定の修正方法を示した仕様を記述します(Houdini Pathと他の変数も記述します)。
以下の単位でパッケージを分けることができます:
-
スタジオ変数。
-
プロジェクト変数。
-
ユーザ変数。
-
プラグイン、ツール、アドオン毎の変数。
このファイルフォーマットは、何かしらの自動化ができるようにするためのちょっとしたエクスプレッション言語に対応しています。 エクスプレッションを使用すれば、例えば以下のことが可能になります:
-
ツールのインストールを有効化/無効化したり、そのツールで必要となるパッケージ(s)を指定することができます。
-
汎用的なパッケージファイルを記述することができます。
-
1つのパッケージで複数のプラットフォームのセットアップを管理することができます。
-
単純なオペレータ、Houdiniキーワード、環境変数を使った条件分岐で変数を設定することができます。
これによって、houdini.env
の編集は不要になります。
パッケージファイルの使い方
-
パッケージファイルが正しくJSONで記述されていて、そのファイルの拡張子は
.json
でなければなりません。 -
Houdiniは、起動時に以下のディレクトリ(存在した場合)からパッケージファイルを検索します:
-
$HOUDINI_USER_PREF_DIR/packages
-
$HFS/packages
-
$HSITE/houdinimajor.minor/packages
(例えば、$HSITE/houdini18.0/packages
) -
$HOUDINI_PACKAGE_DIR
Houdiniは
$HOUDINI_PACKAGE_DIR
で指定されたフォルダ直下にあるパッケージファイルを処理します。$HOUDINI_PACKAGE_DIR
にpackages
ディレクトリを足してパッケージファイルを検索するわけでは ありません 。$HSITE
は、Houdiniを起動する前に必ず既存ディレクトリを設定してください。
-
-
Houdiniは、上記のディレクトリの順番で、各ディレクトリ内をファイル名のアルファベット順で最初に見つかったファイルを処理します。
-
上記のディレクトリの各
packages
ディレクトリ内に複数のパッケージファイルを格納することができます。 -
Houdiniは
packages
内のサブディレクトリを検索 しません 。 -
パッケージファイルから追加パッケージフォルダを動的に指定することができます。
パッケージファイルの記述
Houdini Pathの制御
To... | Do this |
---|---|
Houdini Pathの前に新しいディレクトリを追加する |
{ "path" : "/user/bob/libs" } トップレベルキーの |
Houdini Pathの前に複数のディレクトリを追加する |
{ "path" : [ "/user/bob/libs", "/user/tom/libs", "/user/sam/libs" ] } |
|
デフォルトでは、新しいパスは既存パスの 前 に追加されます。
Houdini Pathの末尾に1つのパス、Houdini Pathの頭に2つのパスを追加する: { "path" : [ { "value" : "/user/bob/libs", "method" : "append" }, "/user/tom/libs", "/user/sam/libs" ] } 前のHoudni Pathを新しいパスで上書きする: { "path" : [ { "value" : [ "/user/bob/libs", "/user/tom/libs", "/user/sam/libs" ], "method" : "replace" } ] } |
他のパッケージファイルに依存したパッケージファイルを指定する。 |
{ "recommends" : "package_name", "path" : "/user/bob/libs" }
{ "requires" : ["package1","package2"], "path" : "/user/bob/libs" } どちらのキーでも値には、パッケージ名の文字列またはパッケージ名の文字列の配列を指定することができます。 |
エクスプレッションに基づいてパスを追加または追加しないようにする |
{ "path" : [ {"houdini_os != 'windows'" : "/user/bob/libs"}, {"houdini_os == 'windows'" : "$HOME/bob_win_libs"}, {"$use_tom_libs == '1'" : "$HOME/tom_libs"} ] } 以下のパッケージエクスプレッションを参照してください。 |
パッケージを"無効"としてマークして、Houdiniにそのパッケージを無視させる |
トップレベルキーの { "enable" : false, "path" : "/user/bob/libs" } ブール値の代わりに { "enable": "houdini_os == 'linux'" } このエクスプレッションの意味を逆にしたいのであれば、デフォルトの { "enable": { "houdini_os == 'linux'": false } } |
Houdiniが検索パスで後で見つけた同じパッケージファイル名の他のパッケージをロードしないようにする |
{ "load_package_once" : false } または、 { "load_package_once": "houdini_os == 'linux'" } または、JSONマップを使用することができます: { "load_package_once": { "houdini_os == 'linux'": false } } |
任意の環境変数を設定する
To... | Do this |
---|---|
環境変数を設定/変更する |
トップレベルキーの
以下のJSONは、 { "requires" : ["package1","package2"], "env": [ { "BOB": "$HOME/bob_tool" }, { "HOUDINI_PATH" : [ "$BOB/libs", { "houdini_version>'17.5' and houdini_version<'17.5.250'": "$BOB/test", "method": "append" } ] } ] } 別の構文を使用すれば、予約済みキーである { "requires" : ["package1","package2"], "env": [ { "var": "BOB", "value": "$HOME/bob_tool" }, { "var": "HOUDINI_PATH", "value": [ "$BOB/libs", { "houdini_version>'17.5' and houdini_version<'17.5.250'": "$BOB/test2", "method": "append" } ] } ] } 中括弧({})を使用することで、変数を連結することができます。 この中括弧の構文は、HSCRIPT変数と同じです。 { "env": [ {"BOB": "/home/bob/bob_tool"}, {"BOB1": "${BOB}1"}, {"BOB2": "${BOB}2"} ] } Hscript Textportから: / -> echo $BOB /home/bob/bob_tool / -> echo $BOB1 /home/bob/bob_tool1 / -> echo $BOB2 /home/bob/bob_tool2 |
相対パス変数
To... | Do this |
---|---|
パッケージパスを基準に環境変数を設定する |
例えば、 { "env": [ { "HOUDINI_PATH": "$HOUDINI_PACKAGE_PATH/../tools" } ] } Houdiniは、 HOUDINI_PATH := '/home/user/bob/packages/../tools;&'
Warning
|
パッケージフォルダを動的に設定する
パッケージファイルを読み込むために事前に指定されたスタートアップフォルダに加えて、Houdiniではパッケージファイルから追加でパッケージフォルダを設定することができます:
-
package_path
キーワードを使用することで、単一フォルダまたはフォルダの配列を設定することができます。 -
Houdiniは、指定したフォルダ直下に配置されているパッケージファイルを処理し、それらのフォルダ下に
packages
ディレクトリを追加 しません 。 -
Houdiniは、追加パッケージフォルダをキューに入れて、それらを再帰的に処理していきます。このキューは、現行パッケージフォルダの処理が完了した時に逐次処理されていきます。このループは、キューにフォルダが追加されなくなった時に終了します。
To... | Do this |
---|---|
走査する単一フォルダを設定する |
{ "package_path" : "$HOME/bob_tool" } |
条件分岐でフォルダを指定する |
{ "package_path" : { "houdini_version == '18.0.302'": "/opt/bob/packages" } } |
走査するフォルダの配列を設定する |
{ "package_path" : [ "$HOME/bob_tool", "/opt/tom_tool" ] } |
フォルダの配列を設定する |
{ "package_path": [ "$HOME/bob_tool1", "$HOUDINI_PACKAGE_PATH/../bob_tool2", {"houdini_version > '17'" : "$HOME/bob_tool3" } ] } |
サンプル
パス
単純な先頭追加 |
{ "path": "$HOME/bob_tool/libs" } |
パスを複数追加 |
{ "path": ["$HOME/bob_tool/libs", "$HOME/bob_tool/test"] } |
エクスプレッションの使用 |
{ "path": {"houdini_os == 'windows'": "$HOME/bob_tool/libs"} } |
環境変数
複数の環境変数を定義 |
{ "env" : [ { "BOB" : "$HOME/bob_tool" }, { "TOM" : "$HOME/tom_tool" } ] } |
エクスプレッションの使用 |
{ "env": [ { "QUAD_LIBS": { "houdini_version > '17.0' and houdini_version < '17.5'" : "$HOME/quad_libs" } } ] } |
環境変数を利用したエクスプレッションの使用 |
{ "env": [ { "SERVER1": { " $MY_SERVER_SETUP == 'ICARUS' ": "/servers/icarus" } }, { "SERVER2": { " $MY_SERVER_SETUP == 'MERCURY' ": "/servers/mercury" } } ] } |
変数の作成とその再利用 |
{ "env" : [ { "BOB" : "$HOME/bob_tool" }, { "BOB_TEST" : "$BOB/test" } ] } |
|
{ "env" : [ { "HOUDINI_PATH" : "$HOME/bob_tool" } ] } |
|
{ "env" : [ { "HOUDINI_PATH" : { "value": "$HOME/bob_tool", "method": "append" } } ] } |
|
{ "env" : [ { "HOUDINI_PATH" : { "value": [ "$HOME/bob_tool", "$HOME/tom_tool" ], "method": "replace" } } ] } |
複数の変数 |
{ "env": [ { "BOB" : "$HOME/bob_tool" }, { "HOUDINI_PATH" : { "value": [ "$BOB/libs", { "houdini_version>'17.5' and houdini_version<'17.5.250'": "$BOB/test", "method": "append" } ] } } ] } |
|
{ "env" : [ { "PATH" : { "value": [ "$HOME/bob_tool", { "value": "$HOME/tom_tool", "method": "append" } ] } } ] } |
推奨/必須
bob_toolパッケージが見つからなかった場合に警告を表示 |
{ "recommends": "bob_tool" } |
複数の依存パッケージ |
{ "recommends": [ "bob_tool", "tom_tool" ] } |
条件次第で必要な依存パッケージ |
{ "recommends": { "houdini_version > '17.0'": "sam_tool" } } |
bob_toolパッケージが見つからなかった場合にエラーを表示 |
{ "requires": "bob_tool" } |
複数の必須パッケージ |
{ "requires": [ "bob_tool", "tom_tool" ] } |
条件次第で必須なパッケージ |
{ "requires": { "houdini_version > '17.0'": "sam_tool" } } |
パッケージエクスプレッション
エクスプレッションを使用すれば、条件分岐でパッケージ変数を設定することができます。 この文法は、以下の比較演算子と論理演算子の組み合わせで定義されたブール表現に対応しています。
-
エクスプレッションは次の演算子を使用することができます:
(
,)
,==
,!=
,<
,>
,<=
,>=
,and
,or
。 -
()
で閉じることで優先順位を決めることができます。()
を使わなかった場合は、and
とor
の優先度が高く、比較演算子はどれも同じ低い優先度になります。 -
文字列をシングルクォーテーションで閉じることで、そのままの文字列として比較することができます。
'This is a valid string'
-
環境変数名の頭に
$
を付けることで、その変数を比較で使用することができます。$MY_VAR == '/var/tmp' $HOME == '/user/bob'
-
以下の"キーワード"を比較の一部として使用することができます:
houdini_version
現在のHoudiniバージョン(フルバージョンパス)。
houdini_os
OSプラットフォーム('windows', 'linux', 'macos')。
-
エクスプレッション言語は、 文字列値にのみ に対応しています。他のタイプに関しては、新しい識別子で今後対応予定です。
サンプル
"houdini_version == '16.5'" "houdini_version == '16.5' and houdini_os=='linux'" "houdini_version => '16.5' and houdini_version < '17.5'" "houdini_os != 'windows' or houdini_version == '17.5' or houdini_version == '17.5.56'" "(houdini_os != 'macos') or (houdini_version >= '17.4' and houdini_version <= '17.5')" "houdini_os == 'windows' and houdini_version >= '17.5' and $USE_XYZ == 'TRUE'"
Tips
-
hou.houdiniPath()をコールすることで、HoudiniのPythonシェル内でHoudini Pathの内容とその並びを簡単に表示することができます。
-
配列内の前方で変数を定義しておけば、その配列内の以降の値でその変数を使用することができます。必ず変数はそれを使用する値の 前 に定義してください。
-
Houdiniは、すべてのパッケージを処理した 後 で、Houdini内でそれらの環境変数が設定されるので、あるパッケージ内で定義されているカスタム変数を他のパッケージで利用することはできません。
-
これらのパッケージファイル内で設定された環境変数は、Houdiniプロセスにのみ影響します(例えば、コマンドラインからHoudiniを起動しても、これらの環境変数はそのシェルには影響しません)。