Edited at

Houdiniと環境変数の魔導書 〜補助魔法導入で失敗しないために〜


イントロ

みなさん、Houdiniをご存知でしょうか。

とりあえずググってみると、世紀の魔術師Harry Houdiniがヒットします。

Potter家の魔術師ではないHarryです。ムキムキですね。

HarryHoudini-1899.jpg

さて、CG業界には、デジタルコンテンツクリエイション(DCC)ツールの一つとして、彼の名前を借りたツールが存在します。

それが、SideFX社が提供するHoudiniというアプリケーションです。

houdini.png

Houdiniが利用された映像作品は以下のリンクから確認できます。


こっちはゲーム系。


プロシージャルなコンテンツ作成を基本とした、ノードベースでのCG作成が行えます。

Houdini Apprenticeという、まさに「見習い」向けにほぼフル機能を無料で試せますので、興味がある方はぜひダウンロードして触ってみてください。

image.png

Houdiniは、Pythonスクリプトや、独自のアセット機能Houdini Digital Asset(HDA)といった機構をもち、それをアーティストやゲーム開発者などに補助機能として提供する事が出来ます。その時に設定するのが、このHoudiniが持つ環境変数の設定です。

今回は、そのHoudiniの環境変数の設定にまつわるお話です。


そもそもなぜ環境変数を設定するか

理由はいくつかあります。


  • サードパーティのプラグインインストーラーが、そのプラグイン管理のために独自のパスの先に配置していくため、その場所をHoudiniに知らせる必要がある。

  • 社内で同じプラグインのバージョンを同プロジェクト内ユーザーに使ってもらいたいため、ネットワーク上に配置し、それを一律で読みに行くようにしてもらう。

  • プラグインのバージョン違いをサクサクっと検証できるように、バージョン区分けのディレクトリに保存しておくため、Houdiniに知らせるそれぞれのバージョンのプラグインのパスを切り替えられるようにしておく。

などです。

環境変数設定がないDCCツールは、こういった設定が柔軟にできず、地味にDCCツールサポートの苦労を強いられます。

全DCCツールはカスタムの環境変数設定に対応してほしいものです…。


環境変数の設定の仕方

環境変数の設定の仕方はいくつかあります。


  • houdini.envに書き込む。

  • 起動batやshファイルに書き込む。

  • ツールランチャーの機能を使って起動時に一緒に設定してもらう。


    • 例えば、Pythonのsubprocess.run('houdini', env=envs)でセットして行く感じです。



などです。


houdini.env


houdini.env

#

# Houdini Environment Settings
#
# The contents of this file are read into the environment
# at startup. They will override any existing entries in
# the environment.
#
# The syntax is one entry per line as follows:
# VAR = VALUE
#
# Values may be quoted
# VAR = "VALUE"
#
# Values may be empty
# VAR =
#

# Example:
#
# HOUDINI_NO_SPLASH = 1

HOUDINI_PATH=C:\tools\houdini\USD\2018.11.10;&



batファイル


launch_houdini.bat

@echo off

set VERSION=17.0.395
set EXE=C:\Program Files\Side Effects Software\Houdini %HOUDINI_VERSION%\bin\houdinifx.exe

set HOUDINI_PATH=C:\tools\houdini\USD\2018.11.10;&

%EXE%



まず最初の闇、それはhoudini.env

「プラグインが読めてない!」という問題が起こり、ユーザーからトラブルの対応相談が来ることがあります。その場合、まず疑いに行くといいのがhoudini.envファイルです。

 

このhoudini.envファイル、Windowsだと、

C:\Users\<username>\Documents\houdini<version> (例: C:\Users\takanori\Documents\houdini17.0)

の直下に保存されています。

ここに環境変数を登録していくことによって、Houdiniが起動時にスクリプトやHDAファイルを認識できるようにしてくれます。

しかしながら、このファイル、人も触ることもあれば、プラグインのインストーラーが勝手に触ることもあり闇を生みがちです。

よくあるのが、

一つのプラグインをインストールしておいて、

二個目のプラグインをインストーラーを使ってインストールすると、

一個目のプラグインが動作しなくなることがあります。

これは二個目のインストーラーが以下のように書き込み、前の環境変数を上書いてしまうためです。


houdini.env

# 一個目 <- 二個目に上書きされてしまうパス。「記述されてるのに、読み込めてない」、みたいなことになる。

HOUDINI_PATH=C:\tools\Houdini\GameDevTool\1.72;&

# 二個目 <- こっちが最終的な設定として認識される
HOUIDNI_PATH=C:\Program Data\Redshift\Plugin\Houdini 17.0.532;&


ちなみに、bat起動などで環境変数をあらかじめ設定したうえでHoudiniを起動しようとしても、Houdiniの環境変数設定の順序は一番最後にhoudini.envのものを読み込んでくるため、頑張ってbat起動時に環境変数を設定しても、houdini.envでセットされた環境変数が上書いてきて邪魔する事があります。

一番の解決方法としては、houdini.envには書かずに、社内でこういった環境変数を一括管理し、いっぺんにプロジェクトデフォルトの環境変数をセットしてくれるDCCツールランチャーを開発・購入して、それを経由してHoudiniを立ち上げる事です。

そうでない場合は、プロジェクト固有の起動Bat等を作っておく事が良いでしょう。


環境変数の呪文

Houdiniの環境変数は17.0.395のバージョンの時点でざっと311コくらいです。

確認方法は、HoudiniのCommand Line Toolsを使い、hconfig -a >> houdini_envs.txt とでも出してみると分かります。

image.png

書き出した環境変数リストはこんな感じ。

image.png

その中でも、チームで共有するのによく使うのは、



  • HOUDINI_PATH


    • Houdiniが定めるフォルダ階層に従って適切なディレクトリ・ファイルを配置していくことで、Houdiniがそれらを起動時に自動認識します。




  • HOUDINI_MENU_PATH


    • Houdiniのメインメニューを定めるファイルが配置されているパスです。




  • HOUDINI_TOOLBAR_PATH


    • シェルフツールという、Houdiniの便利スクリプトを並べたカスタムのツールバーを設定したファイルを見に行くパスです。




  • HOUDINI_PYTHON_PANEL_PATH


    • Pythonパネルという、Houdiniに組み込めるPySide/PySide2ベースのカスタムGUIパネルの設定ファイルを見に行くパスです。




  • HOUDINI_OTLSCAN_PATH


    • Houdini Digital Assetを配置するパスです。




  • HOUDINI_DSO_PATH


    • ライブラリ等のビルドされたバイナリファイル等を配置するパスです。



などで、他に個人の自由で使用するものとしては、



  • EDITOR


    • 「外部のコードエディターで編集する」機能を使う際に、これにセットされているexe等が実行されます。




  • HOUDINI_EXTERNAL_HELP_BROWSER


    • Houdiniからヘルプを開く時のデフォルトブラウザを指定します。




  • HOUDINI_DSO_ERROR


    • DSO関連のエラーをどれだけ表示するかを指定します。



などがあります。

また、ここには載ってないですが、PythonではおなじみのPYTHONPATH環境変数もHoudiniにPythonモジュールを知らせるものとしてよく使います。

image.png


HOUDINI_PATH以外のパスを設定するということ

基本的にはHOUDINI_PATHがほぼすべてを握っています。

マスター級とでも認識してもらえればいいです。

このHOUDINI_PATHに設定されていると、例えば以下のような階層の場合、


  • root(HOUDINI_PATHに設定されているところ)


    • config(フォルダ)

    • otls(フォルダ)

    • python_panels(フォルダ)

    • sciprts(フォルダ)



これらの決まったディレクトリや、決まったファイルは、Houdiniが起動時に自動で認識してくれます。

では、すべて HOUDIN_PATH で設定すればいいのか?と思うと思いますが、必ずしもそうとも限りません。

スクリプトやHoudini Digital Assetを開発して検証する際には、問題範囲を限りなく絞って開発したいため、そのディレクトリだけ読んでほしいケースがままあります。

また、そもそも全部が全部 HOUDINI_PATH で設定していると、総パスがとんでもない長さになるので、何を読んでいるのか追うのが大変になっていきます。

基本的には、インハウスツールの開発・検証・運用のフルセットでのスピードを重視したい場合、最初からこのHOUDINI_PATHではない固有パスを設定するのが良いです。


開いているシーンで、どういったパスが設定してあるかを確かめる

Houdiniのシーンを開いている状態で、そのシーンが現在どの環境変数をカスタムで持っているかを確認する事が出来ます。

Main Menu -> Windows -> ShellでShellウィンドウを開き、hconfigコマンドを利用します。

2018-12-07_04-05-31.png


それぞれの設定呪文


HOUDINI_PATH

以下、基本的にはbatとかへの書き方は同じなので、houdini.envへの書き方を前提にサンプルを提示

HOUDINI_PATHを設定する場合にはこうやります。

HOUDINI_PATH=C:\tools\houdini\USD\2018.11.10;&

そう。 & というものが要るのです。

これがないと、どうなるかというと…

image.png

なんと、立ち上がりすらせずにHoudiniがクラッシュします。恐怖ですね。

環境によっては立ち上がることもありますが、UIやシェルフツールなどいろんなものが吹っ飛ぶので、結局まともに使えません。

忘れずに & を追記しましよう。


HOUDINI_MENU_PATHの場合

Houdiniにはメインメニューがこんな感じになっています。

2018-12-01_18-44-04.png

Houdiniのメインメニューにカスタムの、例えば、チームの名前を入れたチームのためのツールを追加していきたい場合、HOUDINI_MENU_PATHに設定されたファイルMainMenuCommon.xmlを読みに行きます。

その場合はこうやります。

HOUDINI_MENU_PATH=C:\tools\houdini\team\ta;@

!!?

ここでは、@が必要になってくるのです。

これがないと…、エラー警告を出しながら、もともとのメニューが吹っ飛びます。

image.png


HOUDINI_TOOLBAR_PATHの場合

Houdiniのシェルフツールはこういうものです。

image.png

ここにカスタムのツールバーを追加したい場合は、HOUDINI_TOOBAR_PATHが必要になります。

その場合こうやります。

HOUDINI_TOOBAR_PATH=C:\tools\houdini\Bento\v5.0.2\toolbar;@/^

!?

なんと記号が増えました。

@/^が要ります。呪文味あります。

これがないと、一応該当場所にエラーメッセージは出ますが、コンソールエラーは出さずに、シェルフツールがふっとびます。

image.png


HOUDINI_DSO_PATHの場合

dsoというのは、プラグインをビルドしたバイナリファイルの行き場所です。

対象ディレクトリにはdllファイルやisoファイルが配置されます。

HOUDINI_DSO_PATH=C:\tools\houdini\USD\2018.11.10\dso;@/dso_^;@/dso

!!!??

今度は、 @/dso_^;@/dso が必要になります。

短いはずなのに、奇妙さを覚えさせる呪文です。

これがないと、Houdiniがインストール時に持っているデフォルトのバイナリファイルが読めなくなります。

様々なノードの機能がdllファイルに格納されてたりするので、かなりの機能が使えなくなってしまいます。


どうやって調べるか

さて、こういうのを闇雲に追っていくのはさすがに骨が折れます。

こういった環境変数、どうやって知ればいいか。

方法があります。

Command Line Toolsという名の魔導書へ呪文を唱えるのです。

hconfig -ap

この呪文を使うと以下のように、それぞれの環境変数に対する解説と、デフォルトで入れるべき環境変数が帰ってくるので、それを読み解きつつ、環境変数をセットする場合に忘れずにセットします。

image.png


最後に

Houdiniの用意する環境変数がたくさんあります。正直覚えられないです。

なので、補助ツールや自動化ツールの追加など、カスタム対応を行おうとして環境変数の罠を踏んでしまったら、魔導書(Command Line Tools)でもって、hconfig -apコマンドで対処しましょう。

toy.png