チュートリアルの履修が楽になるフォルダ構成

<b>この記事はHoudiniアドベントカレンダー2021 8日目の記事です。</b>
<br>

皆さんはHoudiniのチュートリアルやグループワークをする際、
下記のような事を経験したことはないでしょうか。

<b>・hipやアセットの保存場所が全部同じで、いつの間にかごちゃごちゃになっている
・プロジェクト設定やキャッシュの保存先を毎回設定するのが面倒くさい
・誰かにhipを渡したらアセットの参照エラーが出た</b>

これらの問題は、予め必要なルールやファイルを作っておくと解決しますが、
調べて実行するまでのハードルが結構高いですよね。
なので、今回は私がセットアップによく使っているフォルダ群を配布・解説します。
皆さんの作業の効率化に少しでも役に立てば幸いです。


##参考
　本題に入る前に、私が参考にしたBlogを紹介しておきます。

　<b>▼ FX HACKさん「Houdini Workflowについて」</b>
　　http://fxnomemo.blogspot.com/2021/04/houdini-workflow.html
　　全く知識が無いと読み解くのは少し難しいですが、
　　勉強になりますので、ワークフローに興味のある方はぜひ読んでみて下さい。





##導入のメリット
　・一度設定してしまえば、<b>コピペと少しの編集でそのまま使い回せます</b>

　・誰かにシーンを渡す場合はフォルダごと渡せばOKです
　　ファイルの不足に悩まされることはありません
　　<img width="240" alt="copy_and_paste.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526231/e9ab8bc6-d044-d33f-5cea-fe43fca5d28c.png">

##フォルダ構成
　まずは、私が提案するフォルダ構成の一部をお見せします。
　全体を知りたい方は当記事の最後に記載していますので、そちらを御覧ください。

>Sample/
　├ <b>shot000/</b>
　│　└ houdini/
　│　　└ <b>cache/</b>
　│　　　└ untitled/
　│　　　　└ obj/
　│　　　　　└ sim_spark/
　│　　　　　　└ sim_spark_a.v001
　│　　　　　　　└ 55.bgeo.sc
　│　　└ <b>hip/</b>
　│　　　└ spark_part1.hip
　│　　　└ spark_part2.hip
　├ <b>turtorial_B/</b>
　│　　<b>shot000と同じ構成</b>
　├ <b>turtorial_C/</b>
　│　　<b>shot000と同じ構成</b>
　│
　├ tool/
　│　└ bat/
　│　　└ <b>shot000.bat</b>
　│　　└ <b>tutorial_B.bat</b>
　│　　└ <b>tutorial_C.bat</b>

####解説
　`shot000フォルダ`
　　グループのようなものです。
　　チュートリアル毎にhipやcacheを分けるために使います。
　
　`cacheフォルダ`
　　キャッシュファイルの保存先です。
　　<b>中のフォルダ階層はシーン内のネットワークを元に構成されます。</b>
　　例）D:/Sample/shot000/houdini/cache/untitled/obj/sim_spark/sim_spark_a.v001/65.bgeo.sc
　　<img width="370" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526231/67cc4503-7a27-6a90-14e6-2f87de3ae5b7.png">

　`hipフォルダ`
　　hipファイルの保存先です。
　　同じチュートリアルの中で作ったhipは全てここに格納します。

　`turtorial_B, turtorial_Cフォルダ`
　　新しいチュートリアルを始める場合はshot000をコピー＆リネームして使います。

　`shot001.bat`
　　batファイルを実行してHoudiniを起動します（<b><font color="Red">hipファイルから直接起動はしません</font></b>）。
　　起動後は、Ctrl + O でダイアログを開き、任意のhipを選んで下さい。
　　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526231/e1e62083-1961-396f-892f-8a51e7bb51ef.png)




　`tutorial_B.bat, tutorial_C.bat`
　　チュートリアル毎にbatファイル分けることで、
　　<b>それぞれの環境に合った状態でHoudiniが起動します</b>

<br>
　どこに何が置かれているか、なんとなく分かったところで実際に導入してみましょう。



##導入方法
###1. ダウンロード
　下記のリンクからzipファイルをダウンロードして下さい。
　空のフォルダやhda, bat, jsonファイルが入っています。
　https://drive.google.com/file/d/1aAvCdnxcFDtr4pwG_iKhXQKa0z3RSjYC/view?usp=sharing

###2. Sampleフォルダの配置
　ダウンロードしたzipファイルを解凍後、<b>Sampleフォルダを好きな場所</b>に置いて下さい。
　フォルダ名も変更して構いません（例：Tutorial）

　※ 当記事では配置場所とフォルダ名を下記として説明を進めます。
　　 <b>各自で設定した名前、場所に読み替えて下さい。</b>

　 　　配置場所：Dドライブ直下（D:/）
　 　　フォルダ名：Sample

###3. shot00フォルダの複製
　Sampleフォルダの中にあるshot000フォルダを複製して下さい。
　その後、複製したフォルダを別の名前に変更して下さい。
　（例：tutorial_A)

<br>
　次はbatファイルを扱います。batファイルに関する詳しい説明は省きますが、
　<b>今後Houdiniを起動する為の実行ファイルとして使います。</b>

###4. batファイルの編集
　Sample/tool/batフォルダを開き、中にある<b>shot000.batを複製</b>して下さい。
　複製後、わかりやすい様に「3.shot000フォルダの複製」で複製したフォルダと
　<b>同じ名前</b>にして下さい（例：tutorial_A.bat）。

　複製したbatファイルを<b>メモ帳等のテキストエディタで開いて下さい</b>（右クリック→編集）。
　すると、下記のような文字列が表示されます。

```
@echo off

set HOUDINI_VERSION=18.5.596
set HOUDINI_EXE="C:\Program Files\Side Effects Software\Houdini %HOUDINI_VERSION%\bin\houdini.exe"
set PROJ=Sample
set PROJ_ROOT=D:/%PROJ%
set HSITE=%PROJ_ROOT%/tool/houdini
set SHOT_NAME=shot000

start "" %HOUDINI_EXE%
```


　<b>表示後は下記のルールに従って必要な部分を修正して下さい。</b>
　<b><font color="Red">その際に、「=」の前後にスペース（空白）を入れないように注意して下さい。　</font></b>

　×　set HOUDINI_VERSION<b> = </b>18.5.596
　○　set HOUDINI_VERSION<b>=</b>18.5.596


　```@echo off```
　　今回理解する必要は全く無いので、おまじないだと思って下さい。

　```set HOUDINI_VERSION=18.5.596```
　　起動するHoudiniのバーションを指定します。
　　18.5.596の部分を<b>使っているHoudiniのバージョン</b>に書き換えて下さい。

　```set PROJ=Sample```
　　「2.配置」で置いたSampleフォルダの名前です。
　　<b>フォルダ名を変更された方は、「Sample」の部分をその名前に書き換えて下さい。</b>


　```set PROJ_ROOT=D:/%PROJ%```
　　「2.配置」で置いたSampleフォルダの配置場所です。
　　<b>Dフォルダの配置位置を変更された方は「D:/」の部分を書き換えて下さい。</b>
　　例）set PROJ_ROOT=F:/Works/%PROJ%


　```set HSITE=%PROJ_ROOT%/tool/houdini```
　　今回は理解する必要は全くないので（以右省略）


　```set SHOT_NAME=shot000```
　　<b>「3.shot00フォルダの複製」で複製したフォルダの名前を
　　「shot000」の代わりに記入して下さい</b>
　　（例：turtorial_A)


　```start "" %HOUDINI_EXE%```
　　今回は理（以右省略）

<br>
　上記の編集が終わった後は<b>ファイルを保存して下さい。</b>


##使い方


###A. Houdiniの起動
　「4.batファイルの編集」で作ったbatファイルをダブルクリックしてHoudiniを起動して下さい。
　もし起動に失敗した方は「4.batファイルの編集」を見直してみて下さい。
　シーンを開く場合は、起動後にCtrl + O でダイアログを開き、任意のhipを選んで下さい。
　![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526231/e1e62083-1961-396f-892f-8a51e7bb51ef.png)


###B. シーンを保存する
　Ctrl + S でダイアログを開き $JOB/ を選び、表示される<b>hipフォルダの中に保存</b>して下さい。
　<img width="370" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526231/b9eb0b13-d316-eeb8-6a0a-615f353a0317.png">




###C. キャッシュを取る
　sopネットワーク内で「<b>FileCache GX</b>」を生成して下さい。
　<img width="370" alt="image.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/526231/2e4a39f8-b792-2448-9073-865d976cbe8b.png">
　<b>ノード名を適切なものに変更後</b>、Save to Diskを押すと、
　Cacheフォルダにキャッシュが生成されます。


###D. 環境変数を試す

　ファイルの書き出しや読み込みで便利な環境変数をこちらにメモしておきます。

　　<b>$PROJ_ROOT：Sampleフォルダまでのファイルパスが取得できます</b>
　　（例：D:/Sample/）

　　<b>$CACHE_ROOT：cacheフォルダまでのファイルパスが取得できます</b>
　　（例：D:/Sample/turtorial_A/houdini/cache/）


　　<b>$JOB：houdiniフォルダまでのファイルパスが取得できます</b>
　　（例：D:/Sample/turtorial_A/houdini/）



###E. 別のチュートリアルを始める
　1. <b>shot000フォルダを複製</b>して、名前を変更して下さい。
　　 （例：tutorial_B）

　2. Sample/tool/batフォルダの中にある、<b>shot000.batファイルも複製</b>して
　　 名前を変更して下さい。
　　 （例：tutorial_B.bat）

　3. 2.で作ったbatファイルを開き<b>set SHOT_NAME=shot000を編集</b>して下さい。
　　 （例：set SHOT_NAME=tutorial_B）

　4. <b>batファイルを実行</b>し、Houdiniを起動して下さい。


###F. 誰かにシーンを渡す
　1. Sampleフォルダをコピーして渡して下さい。
　2. 「4. batファイルの編集」に従ってbatファイルを編集してもらって下さい
　3. batファイルからHoudiniを起動して下さい。
　
　<b><font color="Red">※ tutorial_Aのみを渡したい場合は、コピーしたSampleフォルダから
　　 tutorial_Bのフォルダとtutorial_B.batを削除して下さい。</font></b> 


##完全版 フォルダ構成


>Sample/
　├ <b>asset/</b>
　│　└ mob_a/
　│　　└ model.fbx
　│　　└ tex/
　│　　　└ diffuse.tga
　│　　　└ normal.tga
　│
　├ <b>shot000/</b>
　│　└ anim/
　│　└ houdini/
　│　　└ cache/
　│　　└ hip/
　│
　├ tutorial_A/
　│　└ <b>anim/</b>
　│　　└ cam001_mob_a_walk.fbx
　│　└ houdini/
　│　　└ cache/
　│　　　└ untitled/
　│　　　　└ obj/
　│　　　　　└ sim_spark/
　│　　　　　　└ sim_spark_a.v001
　│　　　　　　　└ 55.bgeo.sc
　│　　└ hip/
　│　　　└ spark_part1.hip
　│　　　└ spark_part2.hip
　│
　├ tutorial_B/
　│　　tutorial_Aと同じ構成
　│
　├ <b>tool/</b>
　│　└ <b>bat/</b>
　│　　└ shot000.bat
　│　　└ tutorial_A.bat
　│　　└ tutorial_B.bat
　│　└ <b>houdini/</b>
　│　　└ houdini18.5/
　│　　　└ <b>otls/</b>
　│　　　　└ FileCacheGX.hda
　│　　　└ packages/
　│　　　　└ <b>variables.json</b>
　│
　├ <b>batショートカット.link</b>


`assetフォルダ`
　<b>汎用的な素材はここに入れます。</b>
　1アセットで1fbxを想定しているので、modelフォルダは作りません。
　歩き、ジャンプのような汎用的なアニメーションであれば、
　ここにanimフォルダを作ってしまうのもありだと思います。

`shot000フォルダ`
　<b><font color="Red">コピー元として使うため、空の状態にしてあります。</font><b>

`animフォルダ`
　チュートリアル等で配られる専用のアニメーションデータを入れます。
　<b>チュートリアルの垣根を越えて使い回せるようなデータの場合は、
　assetフォルダに入れてください。</b>

`toolフォルダ`
　ツールの設定情報や、batファイル、OpenColorIOを管理します。

`batフォルダ`
　Houdiniの起動batを管理するフォルダです。
　<b>フォルダの場所へのショートカット（batショートカット.lnk）を用意しています。</b>

`tool/houdiniフォルダ`
　Houdiniの設定ファイルやHDAを管理しています。
　<b>シーンファイルとキャッシュはtutlrial_Aやtutlrial_Bフォルダ内にある
　houdiniフォルダを使います。</b>

`otlsフォルダ`
　HDAファイルを管理するフォルダです。
　<b>このフォルダ内にHDAファイルを入れておくと、
　シーンを渡す際に、渡し忘れが発生しません。</b>

`variables.json`
　Houdiniの環境変数の一部を設定しています（残りはbatファイル内で設定しています）。
　<b>RedShiftやOpenColorIOを使いたい場合はこちらのファイルを編集して下さい。</b>



##終わり
如何でしたでしょうか？
本記事きっかけでワークフローに興味を持っていただけたり、
快適なチュートリアルライフを送っていただければ幸いです。

ここまで読んでいただきありがとうございました！！