Houdini 18.0 リファレンス

Houdiniパッケージ

プラグイン、ツール、アドオンが異なる環境変数定義ファイルを複数作成して、それらを組み合わせる方法。

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_DIRpackagesディレクトリを足してパッケージファイルを検索するわけでは ありません

      $HSITEは、Houdiniを起動する前に必ず既存ディレクトリを設定してください。

  • Houdiniは、上記のディレクトリの順番で、各ディレクトリ内をファイル名のアルファベット順で最初に見つかったファイルを処理します。

  • 上記のディレクトリの各packagesディレクトリ内に複数のパッケージファイルを格納することができます。

  • Houdiniはpackages内のサブディレクトリを検索 しません

  • パッケージファイルから追加パッケージフォルダを動的に指定することができます。

パッケージファイルの記述

Houdini Pathの制御

To...Do this

Houdini Pathの前に新しいディレクトリを追加する

{
    "path" : "/user/bob/libs"
}

トップレベルキーのpathは、$HOUDINI_PATH変数を制御するのに便利です。以下の任意の環境変数を設定する方法も参照してください。

Houdini Pathの前に複数のディレクトリを追加する

{
    "path" : [
        "/user/bob/libs",
        "/user/tom/libs",
        "/user/sam/libs"
    ]
}

methodキーとvalueキーを使って、変数の値を編集する

デフォルトでは、新しいパスは既存パスの に追加されます。

pathキーの値に文字列値を使用するような箇所では、その文字列値を、新しいパスの値を持ったvalueキーと変数の現行値を修正する方法を示したmethodキーを含んだJSONオブジェクトに置換することができます。

methodキーの値には、prepend(デフォルト。新しいパス(s)を既存パスの頭に追加します)、append(新しいパス(s)を既存パスの末尾に追加します)、replace(以前の値をクリアして、その変数に新しい値を設定します)のどれかを指定することができます。

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キーを使用すると、そのパッケージファイルが見つからなければHoudiniは警告を表示するようになります。とはいえ、それでもこのパッケージファイルは処理されます。

{
    "recommends" : "package_name",
    "path" : "/user/bob/libs"
}

requiresキーを使用すると、そのパッケージファイルが見つからなければHoudiniはエラーを表示し、このパッケージファイルを処理 しません

{
    "requires" : ["package1","package2"],
    "path" : "/user/bob/libs"
}

どちらのキーでも値には、パッケージ名の文字列またはパッケージ名の文字列の配列を指定することができます。

エクスプレッションに基づいてパスを追加または追加しないようにする

pathキーの値に文字列値を使用するような箇所では、その文字列値を、valueキーの代わりに単純な エクスプレッション を記述したキーとそのエクスプレッションがtrueに評価された時に使用されるパスの値を含んだJSONオブジェクトに置換することができます。

{
    "path" : 
        [
            {"houdini_os != 'windows'" : "/user/bob/libs"},
            {"houdini_os == 'windows'" : "$HOME/bob_win_libs"},
            {"$use_tom_libs == '1'" : "$HOME/tom_libs"}
        ]
}

以下のパッケージエクスプレッションを参照してください。

パッケージを"無効"としてマークして、Houdiniにそのパッケージを無視させる

トップレベルキーのenable:

{
    "enable" : false,
    "path" : "/user/bob/libs"
}

ブール値の代わりにenableキーの値には、エクスプレッションを含んだ文字列を指定することができます:

{
    "enable": "houdini_os == 'linux'"
}

このエクスプレッションの意味を逆にしたいのであれば、デフォルトのtrueの代わりにfalseを生成するようにすることができます:

{
    "enable": { "houdini_os == 'linux'": false }
}

Houdiniが検索パスで後で見つけた同じパッケージファイル名の他のパッケージをロードしないようにする

load_package_onceキーにブール値を使用します:

{
    "load_package_once" : false
}

または、load_package_onceキーの値には、エクスプレッションを含んだ文字列を指定することができます:

{
    "load_package_once": "houdini_os == 'linux'"
}

または、JSONマップを使用することができます:

{
    "load_package_once": { "houdini_os == 'linux'": false }
}

任意の環境変数を設定する

To...Do this

環境変数を設定/変更する

トップレベルキーのenvは、環境変数の値を設定することができます。システム環境変数のPATHHoudini Path変数を設定するだけでなく、カスタム変数も作成することができます。

  • envキーの値はJSON配列です。

  • この配列には、キーが($接頭辞なしの)環境変数名、値がそれを設定/変更する文字列値であるJSONオブジェクトを格納することができます。

  • pathキーはデフォルトでは値をパスの頭に追加するのに対して、envキーは デフォルトでは変数を設定します

  • 文字列値を使用する箇所では、その文字列値をmethodvalueやエクスプレッションが指定されたJSONオブジェクトに置換することができます。詳細は、以下のパッケージエクスプレッションを参照してください。

以下のJSONは、$BOB環境変数の値の頭に$HOME/bob_toolを追加し、上記で説明しているトップレベルキーのpathを使わずに、直接$HOUDINI_PATH変数を制御します。

{
    "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"
                }
            ]
        }
    ]
}

別の構文を使用すれば、予約済みキーであるvarvalueを使って環境変数を定義することもできます:

{
    "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

パッケージパスを基準に環境変数を設定する

$HOUDINI_PACKAGE_PATH変数を現行パッケージパスとして変数値に使用することができます。

例えば、/home/user/bob/packages/bob.jsonというパッケージファイルがあるとすると、

{
    "env": [
        {
            "HOUDINI_PATH": "$HOUDINI_PACKAGE_PATH/../tools"
        }
    ]
}

Houdiniは、HOUDINI_PATHを以下のように解決します。

HOUDINI_PATH := '/home/user/bob/packages/../tools;&'

Warning

...を使用して、Houdini現行作業フォルダを基準にパスを指定することができます。 これらを使用して、現行パッケージパスを基準にパスを指定することは できません

パッケージフォルダを動的に設定する

パッケージファイルを読み込むために事前に指定されたスタートアップフォルダに加えて、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"
        }
    ]
}

HOUDINI_PATHの頭にパスを追加

{
    "env" : 
    [
        {
            "HOUDINI_PATH" : "$HOME/bob_tool"
        }
    ]
}

HOUDINI_PATHの末尾にパスを追加

{
    "env" : 
    [
        {
            "HOUDINI_PATH" : 
            {
                "value": "$HOME/bob_tool",
                "method": "append"
            }
        }
    ]
}

HOUDINI_PATHの置換

{
    "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"
                    }
                ]
            }
        }
    ]
}

PATHシステム環境変数の変更

{
    "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

  • ()で閉じることで優先順位を決めることができます。()を使わなかった場合は、andorの優先度が高く、比較演算子はどれも同じ低い優先度になります。

  • 文字列をシングルクォーテーションで閉じることで、そのままの文字列として比較することができます。

    '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を起動しても、これらの環境変数はそのシェルには影響しません)。

リファレンス

ユーザインターフェース

  • メニュー

    メインメニュー内のそれぞれの項目について説明します。

  • ビューア

    ビューアペインタイプ。

  • ペイン

    色々なペインのオプションを説明します。

  • ウィンドウ

    色々なユーザインターフェースウィンドウのオプションを説明します。

プログラミング

  • エクスプレッション関数

    エクスプレッション関数は、パラメータの値を計算することができます。

  • エクスプレッションクックブック

    エクスプレッションを記述して色々なエフェクトを表現するためのTipsとテクニック。

  • Pythonスクリプト

    PythonとHoudini Object Modelを使用してHoudiniのスクリプトを記述する方法。

  • VEX

    VEXはシェーダの記述などのHoudiniのほとんどの場所で使われているハイパフォーマンスなエクスプレッション言語です。

  • HScriptコマンド

    HScriptはHoudiniのレガシースクリプト言語です。

コマンドライン

導師レベル

プラグインのインストール

  • Houdiniパッケージ

    プラグイン、ツール、アドオンが異なる環境変数定義ファイルを複数作成して、それらを組み合わせる方法。

Houdini Engine