# TouchDesigner Vol.033 Instancing workflows with Houdini
Houdini(`18.0.xxx`)とTouchDesigner(`2020.26630`)を使用するのであらかじめインストールしておいてください。
<br>
## なぜHoudiniとTouchDesignerを連携させるのか
TouchDesignerは映像を作るのにも非常に優れたツールですが、TouchDesigerだけでは難しい表現があります。
* **得意なこと/表現**
* プリミティブなオブジェクトやParticleSOPなどを組み合わせた抽象的な表現
* リアルタイムレンダリングをいかしたインタラクティブな表現(音反応/その他センサー類)
* CHOPを起点とした操作
* TOP→CHOP→SOPなど、異なる種類のオペレーターとの行き来が容易
* **不得意な/やりにくい表現**
* 具象的な形や動きの表現
* 時間軸に沿った厳密な表現
Houdiniなどの外部ツールを組み合わせ、TDの強みを活かしつつこれら苦手な部分を補うことによって、より幅広い表現が可能になります。
<br>
## VATについて
主にゲームなどの表現で使われる、低負荷で3Dオブジェクトをアニメーションさせる手法の一つにVAT(Vertex Animation Texture)を利用するというものがあります。

VATとは3Dオブジェクトの頂点の動きを書き込んだテクスチャのことで、それをシェーダーで読み込みGPUで演算処理を行うことによって低負荷で3Dオブジェクトのアニメーションが可能になります。
HoudiniではSideFXが無料で公開している[SideFX Labs](https://www.sidefx.com/ja/products/sidefx-labs/)というツールの中にVATをベイクできるhdaが入っています。VAT以外にも様々な便利ツールが入っているのでかなりおすすめです!
VATベイク方法
https://youtu.be/mg3QHs4Dwfg
* TDでのVATに関する詳しい説明
[TouchDesignerでVertex Animation Textureを用いたアニメーションについて](https://qiita.com/komakinex/items/b97c12b9554e4b492f81)
このVATの仕組みを利用して、3Dオブジェクトの頂点ではなく、インスタンシングの情報をhoudini上でテクスチャとして仕込み、TDで再生させるというのが今回のゴールになります。
## HDA
houdiniではTouchDesignerでいうところのtoxのように、自分で組んだオペレーター群をアセットとして保存しておけるHDA(Houdini Digital Asset)という機能があります。
> Houdini デジタルアセットとは、Houdiniのシーンを構成するノードネットワークの一部を再利用できるようカプセル化、それにコントロールのためのパラメータを露出し、一つの独立したノードとして扱うことが出来るようにする仕組です。コンパイルが不要で、OS 非依存、ダイナミックにロード・アンロード・入れ替えが可能なプラグインと考えていただくと良いかと思います。
[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)より
### HDA読み込み方法

左上のAssetから`Install Asset Library...`をクリック

Instal Digital Asset Libraryウィンドウの`Disital Asset Library:`の欄で読み込みたいアセットのパスを選択して`Install and Create`をクリック
これでインストールしたhoudiniファイル内でHDAを使用することができます。
あるいは`$HOME/houdini18.0/otls` (デフォルトだと`C:/Users/ユーザー名/Documents/houdini18.0/otls`)にhdaを配置しておくとhoudini起動時に自動的に読み込まれるようになります。
詳しくは[こちら](http://ikatnek.blogspot.com/2015/07/hda-path.html)
## BakeAttributes.hda
`TDSW_1004/houdini/hda`内に入ってます。
任意のポイントアトリビュートをテクスチャとしてベイクできるhdaです。
基本的な仕組みはSideFXlabsのVATを参考に、ゲームエンジンではなくTouchDesignerでの使用を念頭に構成をシンプルにしたものになります。

| Parameter | |
| ----------------- |:---------------------------------------------------- |
| Render | アトリビュートをベイクして書き出す |
| Output Picture | 書き出し先とファイル名を指定 |
| Strat/End | 書き出すフレームの範囲を指定 |
| Sop Path | アトリビュートを書き出したいノードを選択 |
| RGB Channel(vec3) | RGBチャンネルに書き出したいアトリビュートを指定 |
| Use Alpha Channel | アルファチャンネルを使う場合はチェックを入れる |
| Alpha Channel | アルファチャンネルに書き出したいアトリビュートを指定 |
houdini無料版(apprentice)で使用できるものも作成しました。
`TDSW_1004/houdini/hda/Bake_Attributes_nc.hdanc`
無償版の書き出せるテクスチャの解像度がハーフHDまでなので一度に書き出せる頂点数は1280、フレーム範囲は720までになります。

加えて無償版には書き出した画像の右下にロゴの透かしが入るので実際に使用する際は、
- 書き出す頂点数の上限を1025以内に収める
- 書き出すフレーム数を640フレーム以内に収める
のいずれかの条件を満たす必要があります。
## ReadAttributeTexture.tox
`TDSW_1004/touchdesigner/tox`内に入ってます。
BakeAttributesで書き出したテクスチャを読み、chopに変換するtoxです。最大12種類までのアトリビュートを1度に読み込めます。変換したchopをgeometryのinstanceに渡して動かします。

| Parameter | | | |
|:--------- |:-------------- |:----------------------------------------------------------- |:--- |
| Play | PlayMode | どのように再生するかを選択(Loop/Only Once/Locked to Timeline) | |
| | Reset | 再生のリセット(トグル) | |
| | Reset Pulse | 再生のリセット(パルス) | |
| PlaySpeed | Play FPS | オンの場合、TouchDesignerのFPSに合わせて再生 | |
| | Set Play Speed | 再生スピードを設定(`Play FPS`がオフの時有効) | |
| Input1 | UseAlpha | Input1のテクスチャのアルファチャンネルを使用するかを選択 | |
| | RenameRGB(A) | 読み込むアトリビュートの名前を設定(デフォルトだとr/g/b/a) | |
| Input2 | EnableInput2 | Input2を使用するかを設定 | |
| | ... | ... | |
`TDSW_1004/touchdesigner/tdsw_1004.toe`の`/project1/Sample_Project`に今回作成したサンプルが入ってます
houdini無償版で書き出したテクスチャに対応したものも作成しました。(TDSW_1004/touchdesigner/tox/ReadAttributeTexture_nc.tox)
こちらは上記のほかにFrameRangeというパラメーターがあるのでそこに書き出したフレーム数(今回のサンプルの場合は600)を入力してください。
**その他注意点**
※VATをTouchDesignerでインポートとき/TOPで何らかの操作をする際はTOPの設定でCommonのViewer SmoothnessをNearest Pixelsに設定してください

※TouchDesignerでも無償版の制限として、表示できる解像度がハーフHDまでとなっているのでご注意ください(追記:縦の解像度が4px以内の場合は無償版でも横の解像度が無制限になるらしい)
**粒いっぱい飛ばしたい方は課金しましょう!**
<br>
## まとめ
今回のサンプルではHoudiniで作成したものをTouchDesignerで再生するという部分だけを扱いました。
つまり、冒頭で説明したところの「苦手な部分を補う」ことはできたかもしれませんが、まだTouchDesignerの強みを十分活かせた表現とはいえません。音反応と組み合わせる/リアルタイム性と組み合わせるとおもしろそうなシーンをHoudiniで仕込むなど、ここから先はぜひ皆さんの手で作ったり遊んだりしてみてください!
### おまけ
- 今回のトピック(Houdini×TouchDesigner)に関するその他チュートリアル
- [TDSW Houdini x TouchDesigner Audio Creation Baton](https://www.youtube.com/watch?v=07ASQ9szsvs&list=PLH6Y6o7cLK9j9abrzKYR-oxsRoPaIVasU)
- TDSW vol.014 / Extending TouchDesigner with Asset Tools by Kezzadrix
(今は一時的に非公開になってますが、そのうちPatreonの方にはアーカイブ見れるようになるらしいです!)
- Houdiniのチュートリアル/解説資料など
- [Entagma](https://entagma.com/)
- [CG Wiki](https://www.tokeru.com/cgwiki/?title=Houdini)
- [Houdini COOKBOOK +ACADEMY](https://cgworld.jp/special/houdinicookbookacademy/)
- [Sugimuraさん](https://twitter.com/sugiggy)による[Houdiniオンラインワークショプ](https://sugi-iggy.blogspot.com/p/workshop4.html)(毎年2月ごろ開催)
---
2020.10.04