hdaファイルの設置場所についての調査

# HDAファイルの配置場所について

Houdiniにhdaファイルを認識させるための配置場所は複数存在します。場所によって有効となる状況に差があります。これについて調べていたところ思った以上に複雑だったので、記事としてまとめておこうと思います。

## 有効となる範囲・状況とその場所

### Houdiniのバージョンごと 

一般的に `$HOME/houdiniのバージョン/otls` と表される場所です。一番一般的なのはここかと思われます。Houdini17.5 / Houdini18.0 などHoudiniの公リリースごと、つまりマイナーバージョンごとに区別して管理されます。17.5用に配置したHDAは18.0で自動で有効にならないという事です。

OSや環境によって差異がありますが、Windowsでは、

* `C:\Users\tarou\Documents\houdini17.5\otls`
* `C:\Users\tarou\OneDrive\Documents\houdini18.0\otls`

というような場所になるかと思います。筆者の環境では後者でした。( **tarou** ユーザーというアカウントがある事を想定しています。以下のパス記述も同様。)

環境設定ファイルの `houdini.env` に設定を記述して、設置場所を追加したり変更したるすることもできます。
※ 環境変数の設定については詳細を説明しだすととても長くなるのと、なかなか意図した結果にならずはまりがちなので、ここでは紹介するにとどめます。
この配置方法を利用する場合、新しいHoudiniをインストールする毎に設定を対応する必要があります。

### 特定のhoudiniビルドごと

`$HFS\houdini\otls` と表される場所で、具体的には

* `C:\Program Files\Side Effects Software\Houdini 18.0.416\houdini\otls`

のような場所になります。上記で416と書いてある部分はツールのビルドバージョンで、ここに配置されたHDAはそのビルドバージョンでしか認識されません。ツールと一緒に配布されているビルトインのノードも、ここにhdaファイルを配置する事で定義されている物があります。(HDAの形で定義されていない物もあります。)
個人的にはここの配置場所は使っていません。コアな開発者などであればよく使うのかもしれません。

### 全Houdini共通

`$HOME\otls` とあらわされる場所です。個人的にはここをよく使います。新しいバージョンのHoudiniをインストールしても再度hdaファイルを置きなおす必要がないからです。逆に特定のHoudiniのバージョンや環境設定でしか動かないようなHDAはここに配置しない方がよいです。

具体的な場所は、

* `C:\Users\tarou\otls`

でした。$HOME以下であるなら、 `C:\Users\tarou\Documents\otls` が正しいではないのかと思うのですが。。

また、システムの環境変数 `HOUDINI_OTLSCAN_PATH` にパスを設定することで全バージョンで共通したHDA配置場所を作ることもできます。（設定ファイルの扱いに慣れていない人には、このパスの設定をお勧めはしません。）


### 特定のhipファイルのみ

`$HIP\otls` または `$JOB\otls` とあらわされる場所で、保存したhipファイルの横にある `otls` フォルダ内がその場所です。当然ながら絶対的なパスを確定させるため、hipファイルが保存されている必要があります。

:warning: **この場所を自動認識させるには、hipファイルをダブルクリックして起動したときだけのようです。Houdiniを起動してからhipファイルをロードした場合は認識しませんでした。またここを認識させている場合は後述のAsset managerで確認する限り、`$HOME\otls` 側を認識しなくなっているように見えました。混乱を生みそうなので利用しない方がよいかもしれません。**

任意の場所からファイルに直接HDAを読み込む事も可能です。
どこでもいいのでhdaファイルを保存し、メニューから `File` -> `import` -> `Houdini Digital Asset..` と、たどり対象のhdaファイルを読み込みます。

自分の場合、HDAの開発時には$HIP\hdaフォルダに開発中のhdaファイルを配置し直接シーンへの読み込み状態で使っています。（というよりそこに開発中のhdaを保存していると言った方が正しいです。）

## hda配置場所の優先順位

いくつかHDAの設置場所がある事を紹介しましたが、同じ定義をもつHDAが複数ある場合優先順位が低い場所のものが隠蔽されるので気を付けましょう。
Windows10 / Houdini Indie 18.0.416 の環境で同じhdaファイルを複数の場所に配置しつつ試したところ、

直接よみこみ > `$HIP\otls` > `$HOME\otls` > `$HFS\houdini\otls` > `$HOME\houdiniのバージョン\otls` 

の順に優先されていました。(HOUDINI_OTLSCAN_PATHなどの環境変数を指定していない状態での調査です。)

### 実際にどこのhdaファイルが有効となっているのか確認する

今有効となっているHDAがどこに設置されている物なのかを確認するには `Asset Manager` を使います。
調査したいノードを右クリックして　`Show in Asset Manager` を選択するか、メニュー から `Windows` -> `Asset Manager` を選択する事で起動できます。

![cap_assetmanager2.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/5730806b-bfd4-646c-b9e7-ae04dd4760ea.jpeg)

このようにあるHDA(proceduralchair)を確認してみると、3か所に定義があり、赤文字の部分は隠蔽されて無効になっていることが確認できます。白文字の部分が有効となっているパスです。

![cap_assetmanager1.jpg](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/8302/5f272d41-8e7a-04c5-c89a-83ef6f870c4a.jpeg)

他のノードの定義を見ていると、１つのHDA＝１つのhdaファイルではないことが確認できます。実際１つのhdaファイルには複数のHDA定義を含めることができます。また、HDAのバージョンを１つのhdaファイルに含めることもできますし、別々のhdaファイルに含めることもできます。
新規にhdaをネットワーク上に配置する際、通常は最新のバージョンのhdaが使われますが、明示的に過去バージョンを使うこともできますし、過去のバージョンのhdaを使っているhipファイルを開いた場合は過去のバージョンのhdaがネットワーク上に存在しているので、定義元を確認する際もどのバージョンについて調べているのか注意する必要があります。

バージョン管理の詳細についてはこの投稿では触れません。（触れたいが力尽きた。）

# 参考リンク
* サルにもわかる HoudiniHDA path [http://ikatnek.blogspot.com/p/hda-path.html](http://ikatnek.blogspot.com/p/hda-path.html)
* Houdini Digital Asset(HDA)をインストールする [https://support.borndigital.co.jp/hc/ja/articles/360000246193-Houdini-Digital-Asset-HDA-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B](https://support.borndigital.co.jp/hc/ja/articles/360000246193-Houdini-Digital-Asset-HDA-%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB%E3%81%99%E3%82%8B)
* Houdiniと環境変数の魔導書 〜補助魔法導入で失敗しないために〜 [https://qiita.com/takavfx/items/b58cae65984b15e5ad29](https://qiita.com/takavfx/items/b58cae65984b15e5ad29)
* houdini environment variables [http://ikatnek.blogspot.com/p/houdini-environment-variables.html](http://ikatnek.blogspot.com/p/houdini-environment-variables.html)

## 最後に

注意深く調査したつもりですが、間違いはあるかもしれません。その際はコメントで指摘いただければと思います。