Houdini 20.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の編集は不要になります。

hou.ui.loadPackageも参照してください。

パッケージファイルの使い方

  • パッケージファイルが正しくJSONで記述されていて、そのファイルの拡張子は.jsonでなければなりません。

  • Houdiniは、起動時に以下のディレクトリ(存在した場合)からパッケージファイルを検索します:

    • $HOUDINI_USER_PREF_DIR/packages

    • $HSITE/houdinimajor.minor/packages (例えば、$HSITE/houdini18.0/packages)

    • $HOUDINI_PACKAGE_DIR

      Houdiniは$HOUDINI_PACKAGE_DIRで指定されたディレクトリ直下にあるパッケージファイルを処理します。 $HOUDINI_PACKAGE_DIRpackagesディレクトリを足してパッケージファイルを検索するわけでは ありません

    • $HFS/packages

    Note

    $HSITE$HOUDINI_PACKAGE_DIRは、Houdiniを起動する前に必ず設定してください。

  • Houdiniは、上記で指定された順番で各パッケージディレクトリを走査します。その順番は、$HOUDINI_USER_PREF_DIR/packagesから始まり、次に$HSITEなどの順番になります。パッケージファイルは、各パッケージディレクトリ内でアルファベット順に読み込まれます。この処理順は、process_orderキーワードを使って変更することができます。

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

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

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

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

パッケージファイルを記述する際には以下のキーワードを使用します:

env

環境変数を設定または変更します。

enable

パッケージを有効または無効にします。

load_package_once

パッケージが何回もロードされるのを回避します。 "load_package_once": trueを指定すると、Houdiniは、検索パス内の最初のパッケージをロードし、その検索パス内の 同じファイル名 の他のパッケージを無視します。 このキーワードのデフォルトはfalseです。

process_order

パッケージディレクトリ内のパッケージを処理する順番を変更するためにHoudiniで使用可能な整数値を指定します。

package_path

動的にパッケージパスを走査します。

hpath

HOUDINI_PATHを設定するショートカット。

Note

pathは廃止され、代わりにhpathを使用してください。

recommends

依存関係を強制することなく、特定のパッケージ(s)が利用可能かどうかをチェックします。

requires

特定のパッケージ(s)が利用可能かどうかをチェックし、依存関係を強制します。

Houdini Pathの制御

To...Do this

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

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

hpathキーワードは、$HOUDINI_PATH変数を制御するのに便利です。以下の任意の環境変数を設定する方法も参照してください。

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

{
    "hpath" : [
        "/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つのパスを追加する:

{
    "hpath" : 
    [
        {
            "value" : "/user/bob/libs",
            "method" : "append"
        },
        "/user/tom/libs",
        "/user/sam/libs"
    ]
}

前のHoudni Pathを新しいパスで上書きする:

{
    "hpath" : 
    [
        {        
            "value" : 
                [
                    "/user/bob/libs",
                    "/user/tom/libs",
                    "/user/sam/libs"
                ],
            "method" : "replace"
        }
    ]
}

他のパッケージファイルに依存したパッケージファイルを指定する。

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

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

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

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

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

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

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

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

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

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

トップレベルキーのenable:

{
    "enable" : false,
    "hpath" : "/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配列には、文字列リテラルまたはJSONオブジェクトを含めることができます。キーは($接頭辞なしの)環境変数名、値は文字列です。

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

  • JSONオブジェクト(例えば、{ “houdini_os == 'linux'”: “/bob/tool” })を使ってパス変数(例えば、HOUDINI_PATH)に追加される値は、デフォルトでは頭に追加されます。methodキーワードを使用することで、このデフォルトの挙動を変更することができます。

Note

envキーワードはパッケージキーワードを設定するためのものではありません。

以下のJSONは、$BOB環境変数に$HOME/bob_toolを設定し、hpathキーワードを使わずに直接$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"
                }
            ]
        }
    ]
}

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

{
    "requires" : ["package1","package2"],
    "env": [
        {
            "var": "BOB_TOOL",
            "value": "$HOME/bob_tool",
            "method": "append"
        },
        {
            "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"
                }
            ]
        },
        {
            "PATH" : {
                "value" : "$BOB/bin",
                "method": "append"
            }
        }
    ]
}

独自のパス変数を定義することができます。

{
    "env": [
        {
            "MYPATH": ["$HOME/bob_tool", "$HOME/bob/test"]
        }
    ]
}

中括弧({})を使用することで、変数値と値リテラルを連結することができます。 この中括弧の構文は、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

デフォルト変数構文

デフォルト変数構文である${VAR-DEFAULT}を使用することで、デフォルト値が設定された変数を定義することができます。 デフォルト値には、値リテラル、変数、エクスプレッションを設定することができます。 VARは、設定されていれば期待通りに展開され、設定されていなければDEFAULTに展開されます。

/home/bob/packages/package1.jsonで定義されているいくつかのサンプル。

{
    "hpath" : [ "${EMPTY_VAR-/var/tmp}", "${BOB_TOOL-${HOUDINI_PACKAGE_PATH}/../BOB_TOOL}" ],
    "env": [
        {"BOB": "${BOB_TOOL-/home/bob/bob_tool}"},
        {"BOB1": "${BOB_TOOL_V1-${BOB}}"}
    ]
}

HOUDINI_PACKAGE_PATH/home/bob/packagesに設定した場合、package1.jsonで設定されている変数が以下のように展開されます:

. echo $HOUDINI_PATH
/var/tmp:/home/bob/BOB_TOOL
. echo $BOB
/home/bob/bob_tool
. echo $BOB1
/home/bob/bob_tool

相対パス変数

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/tools;&'

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

パッケージファイルを読み込むために事前に指定されたスタートアップフォルダに加えて、Houdiniではパッケージファイルから追加でパッケージフォルダを設定することができます:

  • package_pathキーワードを使用することで、単一フォルダまたはフォルダの配列を設定することができます。

  • Houdiniは、指定したフォルダ直下に配置されているパッケージファイルを処理し、それらのフォルダ下にpackagesディレクトリを追加 しません

  • Houdiniは、追加パッケージフォルダをキューに入れて、それらを再帰的に処理していきます。このキューは、現行パッケージフォルダの処理が完了した時に逐次処理されていきます。このループは、キューにフォルダが追加されなくなった時に終了します。

Note

envキーワードを使って設定された環境変数は、package_pathの設定には使用することができません。 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" } 
    ]
}

パッケージの処理順を変更する

Houdiniは、起動時に特定のパッケージディレクトリを走査してから、各ディレクトリで見つかったパッケージをファイル名のアルファベット順で読み込みます。 それらのパッケージの処理順はそれと同じです。 パッケージディレクトリ内のその処理順は、process_orderキーワードを使って変更することができます。 Houdiniは、このキーワードを使用してパッケージを昇順でソートした後に、それらのパッケージを処理します。 process_orderが一番低いパッケージが最初に処理され、process_orderが一番高いパッケージが最後に処理されます。

Note

処理順の変更は、パッケージディレクトリ別に行なわれ、パッケージのprocess_orderは、そのディレクトリ内でのみ影響があります。

To...Do this

デフォルトの処理順でHOUDINI_PATHにパスをprepend(頭に追加)する

$HOUDINI_USER_PREF_DIR/packages/package1.json

{
    "hpath" : "$HOME/bob1"
}

$HOUDINI_USER_PREF_DIR/packages/package2.json

{
    "hpath" : "$HOME/bob2"
}

$HOUDINI_USER_PREF_DIR/packages/package3.json

{
    "hpath" : "$HOME/bob3"
}

結果:

. hconfig -xa
. HOUDINI_PATH := '$HOME/bob3;$HOME/bob2;$HOME/bob1;&'

カスタムの処理順でHOUDINI_PATHにパスをprepend(頭に追加)する

$HOUDINI_USER_PREF_DIR/packages/package1.json

{
    "hpath" : "$HOME/bob1",
    "process_order" : 3
}

$HOUDINI_USER_PREF_DIR/packages/package2.json

{
    "hpath" : "$HOME/bob2",
    "process_order" : 2
}

$HOUDINI_USER_PREF_DIR/packages/package3.json

{
    "hpath" : "$HOME/bob3",
    "process_order" : 1
}

結果:

. hconfig -xa
. HOUDINI_PATH := '$HOME/bob1;$HOME/bob2;$HOME/bob3;&'

カスタムの処理順でHOUDINI_PATHにパスをappend(末尾に追加)する

$HOUDINI_USER_PREF_DIR/packages/package1.json

{
    "env": [
        {
            "HOUDINI_PATH": {
                "value": "$HOME/bob1",
                "method": "append"
            }
        }
    ],
    "process_order" : 3
}

$HOUDINI_USER_PREF_DIR/packages/package2.json

{
    "env": [
        {
            "HOUDINI_PATH": {
                "value": "$HOME/bob2",
                "method": "append"
            }
        }
    ],
    "process_order" : 2
}

$HOUDINI_USER_PREF_DIR/packages/package3.json

{
    "env": [
        {
            "HOUDINI_PATH": {
                "value": "$HOME/bob3",
                "method": "append"
            }
        }
    ],
    "process_order" : 1
}

結果:

. hconfig -xa
. HOUDINI_PATH := '$HOME/bob3;$HOME/bob2;$HOME/bob1;&'

サンプル

パス

パスをHOUDINI_PATHの頭に追加

{
    "hpath": "$HOME/bob_tool/libs"
}

パスを複数追加

{
    "hpath": ["$HOME/bob_tool/libs", "$HOME/bob_tool/test"]
}

エクスプレッションの使用

{
    "hpath": {"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_python

    HoudiniのPythonのバージョン('python3.7', 'python3.9')。

    houdini_platform_build

    houdini_platform_build keywordは、異なるHoudiniビルドのコンパイルで採用されたコンパイラの特定のバージョンを示します。 このキーワードの書式は、コンパイラ.major.minorの構造に準拠しています。

    以下のテーブルには、Houdiniでサポートされている各プラットフォームで使用されているコンパイラを載せています。 Houdiniの色々なビルドに関する情報は、Houdiniのサードパーティ製ライブラリのページを参照してください。

    プラットフォーム

    コンパイラ

    Linux

    gcc

    gcc -vを使用すると、コンパイラのmajorminorのバージョン番号が分かります。

    Mac

    clang

    clang -vを使用すると、コンパイラのmajorminorのバージョン番号が分かります。

    Windows

    cl

    cl.exeを使用すると、コンパイラのmajorminorのバージョン番号が分かります。 このclバージョン番号はMSVCバージョンやVisual StudioバージョンやToolsetバージョンとは異なります。 詳細は、Microsoftのドキュメントを参照してください。

    Note

    Houdiniのコンパイルで使用されているコンパイラのバージョンは、About Houdiniダイアログ内のPlatform Build下で確認することができます。

  • エクスプレッション言語は、 文字列値にのみ に対応しています。他のタイプに関しては、新しい識別子で今後対応予定です。

サンプル

"houdini_version == '16.5'"

"houdini_python == 'python3.9'"

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

"houdini_platform_build == 'gcc.11.2'"

"houdini_platform_build == 'clang.14.0'"

"houdini_platform_build >= 'cl.19.22'"

パッケージのデバッグ

パッケージをデバッグしたり、単にパッケージ情報をリストしたいのであれば、Houdiniを起動する前にHOUDINI_PACKAGE_VERBOSE環境変数を設定します。 HOUDINI_PACKAGE_VERBOSEが有効になっていれば、すべてのパッケージがロードされると、Houdiniはパッケージ情報を標準出力デバイスに書き出します。

Note

HOUDINI_PACKAGE_VERBOSEは、Houdiniの起動で使用するターミナル内またはスクリプト内で設定してください。 パッケージファイル内に直接設定しないでください。

. export HOUDINI_PACKAGE_VERBOSE=1
. hconfig -xa

= = = Houdini Package log = = =
Loading: C:/Users/bob/houdini19.5/packages/mypackage.json
WARNING: Undefined variable $USE_PACKAGE used in expression houdini_version > '19.0.589' and $USE_PACKAGE == 'TRUE'
WARNING: mypackage is marked as disabled.

Loading: C:/Users/bob/houdini19.5/packages/opencolorio.json

Loading: C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/apex.json

Loading: C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/kinefx.json

Loading: C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/package_dirs.json

Processing load once: C:/Users/bob/houdini19.5/packages/opencolorio.json

Processing: C:/Users/bob/houdini19.5/packages/opencolorio.json

Processing: C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/apex.json

Processing: C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/kinefx.json

Processing: C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/package_dirs.json

Loading: C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.0.json
WARNING: SideFXLabs19.0 is marked as disabled.

Loading: C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5.json

Processing load once: C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5.json

Processing: C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5.json

Resolved variables:
    OCIO : C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5/misc/labs_ocio/aces_config.ocio
    HOUDINI_PATH :
        C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5
        C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/kinefx
        C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5/misc/labs_ocio/aces_config.ocio
        &
    SIDEFXLABS : C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5

Loading Info:
    Loaded Packages (5):
        C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5.json
        C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/apex.json
        C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/kinefx.json
        C:/Users/bob/houdini19.5/packages/opencolorio.json
        C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/package_dirs.json

    Disabled Packages (2):
        C:/Users/bob/houdini19.5/packages/mypackage.json
        C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.0.json

= = = = = = = = = = = = = = = =
HFS := 'C:/Users/bob/HOUDIN~3/HOUDIN~1.39/'
HOME := 'C:/Users/bob'
HOUDINI_DESKTOP_DIR := 'C:/Users/bob/Desktop'
HOUDINI_OS := 'Windows'
HOUDINI_PACKAGE_VERBOSE := 1
HOUDINI_PATH := 'C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5;C:/Users/bob/HOUDIN~3/HOUDIN~1.39/packages/kinefx;
    C:/Program Files/Side Effects Software/sidefx_packages/SideFXLabs19.5/misc/labs_ocio/aces_config.ocio;&'
HOUDINI_TEMP_DIR := 'C:/Users/bob/AppData/Local/Temp/houdini_temp'
HOUDINI_USER_PREF_DIR := 'C:/Users/bob/houdini19.5'
SHELL := 'C:/PROGRA~1/Git/usr/bin/bash.exe'
USER := 'bob'

パッケージ化のテクニック

Houdiniでプラグインをパッケージ化する際に使用頻度の高いテクニックがいくつかあります。

プラグインファイルを統合する簡単な方法

otlspython panelsviewer statesdsoなどのファイルの検索場所をHoudiniに伝えるために、$HOUDINI_PATHを設定するパッケージファイルとプラグインフォルダを作成します。

プラグインフォルダには、以下のように標準のHoudiniフォルダを含めてください:

$HOUDINI_USER_PREF_DIR/xyzplugin18.5/
    dso/
    otls/
    python_panels/
    viewer_states/

パッケージファイル内には、プラグインフォルダの参照をHOUDINI_PATHに設定します:

$HOUDINI_USER_PREF_DIR/packages/xyzplugin.json

{
    "hpath": "$HOUDINI_USER_PREF_DIR/xyzplugin18.5"
}

Note

WindowsのPATHとは異なり、パッケージファイル内にLinuxのLD_LIBRARY_PATH(MacのDYLD_LIBRARY_PATH)を設定しても、パッケージはHoudini起動後にうまく処理されるので、何の効果もありません。 LD_LIBRARY_PATHは、Houdini起動前に設定されている場合にのみ効果があります。 dlopen()は、Houdini起動後にLD_LIBRARY_PATHに加えられた変更を評価しません。 上記の手法を用いることでこの問題が解決します。

プラグインのバージョン制御をする方法その1

指定したHoudiniバージョンのプラグインフォルダで$HOUDINI_PATHを設定するパッケージを記述することができます。 これは、各エントリーがエクスプレッションを使用して特定のHoudiniバージョンのプラグインフォルダに合わせられるように、配列変数を使って行なうことができます。

$HOUDINI_USER_PREF_DIR/packages/xyzplugin.json

{
    "env": [
      {
        "XYZ":
        [
            {
                "houdini_version == '18.0'": "$HOUDINI_USER_PREF_DIR/xyzplugin18.0"
            },

            {
                "houdini_version == '18.5'": "$HOUDINI_USER_PREF_DIR/xyzplugin18.5"
            }
        ]          
      }
    ],
    "hpath": "$XYZ"
}

上記のサンプルでは、Houdini18.0を起動すると $HOUDINI_USER_PREF_DIR/xyzplugin18.0 、Houdini18.5を起動すると $HOUDINI_USER_PREF_DIR/xyzplugin18.5$HOUDINI_PATHに設定します。 どれにも該当しなかった場合は、$HOUDINI_PATHは設定されません。 ただし、デフォルト変数構文を使用すれば、どのHoudiniバージョンにマッチしてもプラグインフォルダが$HOUDINI_PATHに設定されるようにすることができます。 以下のサンプルでは、18.018.5以外のHoudiniバージョンに対して $HOUDINI_USER_PREF_DIR/xyzplugin$HOUDINI_PATHに設定します。

$HOUDINI_USER_PREF_DIR/packages/xyzplugin.json

{
    "env": [
      {
        "XYZ":
        [                
            {
                "houdini_version == '18.0'": "$HOUDINI_USER_PREF_DIR/xyzplugin18.0"
            },

            {
                "houdini_version == '18.5'": "$HOUDINI_USER_PREF_DIR/xyzplugin18.5"
            }
        ]          
      }
    ],
    "hpath": "${XYZ-$HOUDINI_USER_PREF_DIR/xyzplugin}"
}

プラグインのバージョン制御をする方法その2

プラグインのバージョン管理をするもう1つの手法は、複数のパッケージファイルを使用することです。 Houdiniの現行バージョンに合致したパッケージがenableとマークされ処理されるようになります:

$HOUDINI_USER_PREF_DIR/packages/xyzplugin18.5.json

{
    "env": [
      {
        "XYZ": "$HOUDINI_USER_PREF_DIR/xyzplugin18.5"
      }
    ],
    "hpath": "$XYZ",
    "enable": "houdini_version == '18.5'"
}
$HOUDINI_USER_PREF_DIR/packages/xyzplugin18.0.json

{
    "env": [
      {
        "XYZ": "$HOUDINI_USER_PREF_DIR/xyzplugin18.0"
      }
    ],
    "hpath": "$XYZ",
    "enable": "houdini_version == '18.0'"
}

OPlibrariesファイルを使ってHDAsを読み込む方法

デフォルトでは、HoudiniはHOUDINI_OTLSCAN_PATH内のフォルダを走査してHDAファイルを読み込みます。 これは、Operator Type ManagerダイアログがOPlibrariesファイルを使用してHDAファイルを検索しないように設定されている場合に実行されます。 ただし、ユーザがOPlibrariesオプションを設定することを選択した場合には、必ずプラグインがOPlibrariesファイルを使用してHDAファイルを読み込むようにする必要があります。

1) パッケージフォルダ内にOPlibrariesファイルを置きます。このファイルには、読み込みたいすべてのHDAファイルを必ずプラグインフォルダを基準とした相対パスでリストする必要があります。

$HOUDINI_USER_PREF_DIR/xyzplugin18.5/OPlibraries

otls/OPlibXYZ.hda

2) OPlibrariesファイルを検索する場所をHoudiniに伝えます。通常では、これは$HOUDINI_PATHまたはHOUDINI_OPLIBRARIES_PATHにプラグインフォルダを設定することで行ないます。

Tips

  • hou.houdiniPath()をコールすることで、HoudiniのPythonシェル内でHoudini Pathの内容とその並びを簡単に表示することができます。

  • env配列内の前方で環境変数を定義しておけば、その配列内の以降の値でその変数を使用することができます。必ず変数はそれを使用する値の に定義してください。

  • あるパッケージ内で設定された環境変数は、他のパッケージからも参照することができます。

  • パッケージ内で設定された環境変数は、Houdiniプロセスにのみ影響します(例えば、コマンドラインからHoudiniを起動しても、これらの環境変数はそのシェルには影響しません)。

  • サブプロセスからHoudiniを起動すると、そのHoudini親プロセスの環境変数がサブプロセス環境にコピーされます。サブプロセスを起動する前にHOUDINI_PACKAGE_SKIP=1を設定することで、Houdini親プロセスのパッケージ環境変数の重複を回避することができます。

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

リファレンス

ユーザインターフェース

  • メニュー

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

  • ビューア

    ビューアペインタイプ。

  • ペイン

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

  • ウィンドウ

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

プログラミング

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

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

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

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

  • Pythonスクリプト

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

  • VEX

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

  • HScriptコマンド

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

  • hwebserver

    グラフィカルまたは非グラフィカルなHoudiniセッション内でウェブサーバーを起動するための関数とクラス。

コマンドライン

導師レベル

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

  • Houdiniパッケージ

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

Houdini Engine