Houdiniにおけるデバッグ Vol.3 デバッガー・最適化について

# はじめに

[Houdiniにおけるデバッグ Vol.1](https://qiita.com/dicepastoso/items/01682bdc88f45e9054f1) ではHoudiniにおいて様々な情報を表示・確認する方法について書き、[HoudiniにおけるデバッグVol.2](https://qiita.com/dicepastoso/items/478c8a0a05d67f3a0560)ではエラーに関することについて書いてきました。
今回はデバッガーについてと最適化について触れていきたいと思います。

# Debugger

## HoudiniEngine Debugger

HoudiniEngine DebuggerはHoudini Engineを使用したアプリケーションに対するデバッギングサーバーのことです。（[オンラインヘルプ](https://www.sidefx.com/ja/docs/houdini/ref/henginedebugger.html)より）
HoudiniEngineはMaxonが開発をしているものも含めて5つのプラグインがあります。（Unity版、UnrealEngine版、Maya版、3dsMax版,Cinema4D版）（Houdini Engine APIを利用してカスタムプラグインを開発することも可能です。）
プラグインを介して各ホストアプリケーションでHDAを利用することが可能となるわけですが、HoudiniEngine Debuggerを使うことでHoudini(GUI)内でどのような処理が行われているかが逐次確認できるので開発のトライアンドエラーがしやすくなります。
使用方法は `Window>Houdini Engine Debugger`から起動してお使いのマシン、ネットワーク環境に合わせてサーバーの設定をしてStartします。
![houdiniengineDebugger01.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/2f60b2df-0885-0d32-f616-a1d11b8d30bf.png)
次に使用するアプリケーション側でHodini Engineを立ち上げて　`Session Configuration` から先ほどHoudini側で設定したサーバーの設定と同じ設定をして　`Start Session` します。
※画像は3dsMaxのHoudini EngineのUI。
![houdiniengineDebugger02.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/7b9210ff-2170-4634-feb9-beb8b14bdf3d.png)
正常に接続できると Houdini Consoleに　`Client connected` と表示されます。
![houdiniConsole.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/c875a5a0-fefb-6d79-7132-bf46c1eb3ab8.png)
使い方やデバッグの仕方については下記に紹介します参考のリンクの記事を参照ください。

### 参考
[Houdini Engine Debugger](https://www.sidefx.com/ja/docs/houdini/ref/henginedebugger.html)
[houdini engine maya debugging menu](http://ikatnek.blogspot.com/p/houdini-engine-maya-debugging-menu.html)
[Houdini Engine for Maya : デバッグの仕方](https://houdinifx.jp/blog/houdini-engine-for-maya-%E3%83%87%E3%83%90%E3%83%83%E3%82%B0%E3%81%AE%E4%BB%95%E6%96%B9/)
[Houdini Engine for UnrealでHDAの挙動を確認するためにデバッガーセッションを使用する](https://support.borndigital.co.jp/hc/ja/articles/360000346481-Houdini-Engine-for-Unreal%E3%81%A7HDA%E3%81%AE%E6%8C%99%E5%8B%95%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B%E3%81%9F%E3%82%81%E3%81%AB%E3%83%87%E3%83%90%E3%83%83%E3%82%AC%E3%83%BC%E3%82%BB%E3%83%83%E3%82%B7%E3%83%A7%E3%83%B3%E3%82%92%E4%BD%BF%E7%94%A8%E3%81%99%E3%82%8B)
[Houdini Engine for Unrealデバッグ](https://support.borndigital.co.jp/hc/ja/articles/360000348622-Houdini-Engine-for-Unreal%E3%83%87%E3%83%90%E3%83%83%E3%82%B0)
[Houdini Engine For Maya を調べてみる - Qiita](https://qiita.com/yuya_torii/items/001642040a5354cd9f89)

## VEX Debugger

### プリントデバッグ
[Houdiniにおけるデバッグ Vol.1](https://qiita.com/dicepastoso/items/01682bdc88f45e9054f1#printf)でも紹介しましたが [`Printf`](https://www.sidefx.com/ja/docs/houdini/vex/functions/printf.html) で `Houdini Console`に出力しながら作業します。

### 参考
[JoyOfVex14](https://houdini.prisms.xyz/wiki/index.php?title=JoyOfVex14#VEX.E3.81.AE.E3.83.87.E3.83.90.E3.83.83.E3.82.B0)
[Houdini: Wrangleがわからない - 完結編](https://www.kickbase.net/entry/houdini-wrangle-answer)
[Houdini Tricks — QuickTip — Debugging VEX Code](https://houdinitricks.tumblr.com/post/142499706114/quicktip-debugging-vex-code)

## Python Debugger

Python は標準ライブラリーにデバッグ用のモジュール[pdb](https://docs.python.org/ja/3.7/library/pdb.html)があります。これを利用してデバッグする方法が[DEBUGGING PYTHON IN VFX APPLICATIONS](https://jurajtomori.wordpress.com/2018/06/13/debugging-python-in-vfx-applications/)に紹介されています。
Pythonのデバッガーについてはこちらの紹介にとどめさせていただきます。

## HDK Debugger
HoudiniではC++でプラグインを作成することが可能です。VSCodeで開発をしてデバッガーを設定する方法が[LAPLACIAN EIGENVECTOR PLUGIN FOR HOUDINI](https://mbaadsgaard.com/portfolio/laplacian-eigenvector-plugin-for-houdini/)に紹介されています。
HDKのデバッガーについてもこちらの紹介にとどめさせていただきます。

### 参考
[HDK](https://www.sidefx.com/docs/hdk/)
[HDKについて](https://qiita.com/satoruhiga/items/49f8fa93307350e3c662)

# 最適化

作業をしているとノードが見にくくなったり、処理が遅くなったりしていやになってくることがあります。そんな時、最適化をして高速化を図ったり、整理して処理の流れを見やすくしたりします。

## [パフォーマンスモニタ](https://www.sidefx.com/ja/docs/houdini/ref/panes/perfmon.html)

![performancemonitor.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/feaa2651-8dab-4c44-8ec1-0310077cf1d9.png)
パフォーマンスモニターを使うとクック時どこが重い処理なのかがわかり、どこを改善すればよいかの助けとなります。

## クッキングコントロール

- `ESC` でクックをキャンセルできます。
- 右下のシミュレーションメニュー（脳みそアイコン）でシミュレーションの有効無効をコントロールできます。
- Update Menu パラメーターの変更による再クックするタイミングを選択することができます。
- ノードをロックすることで上流をキャッシュすることができ、高速化できます。

## リファクタリング

[Houdiniにおけるデバッグ Vol.2](https://www.notion.so/129c5bafbba248fabc8c5204578ba0da#aa5c4bf200244ed496034cd766be5f2d) の整理の項であげたように適度に整理していくことは修正、変更、引継ぎなどが発生するプロダクションワークにおいては重要なことです。作業中はブランチを作っていろいろ試したりなどあると思いますが、落ち着いたタイミングで整理しておくことが必要と思います。

### 参考
[Refactoring Houdini Node Network – メンテナンス性の高いノードネットワーク構築のために](http://www.technical-artist.net/?p=1737)

## キャッシュ
ジオメトリーがアニメーションする場合、高レゾルーションであればあるほどクックに時間がかかります。一度bgeoに書き出すことで上流を処理させず軽量なシーンにすることができます。

### 参考
[ジオメトリのキャッシュ化](https://www.sidefx.com/ja/docs/houdini/io/geo.html#%E3%82%B7-%E3%82%AA%E3%83%A1%E3%83%88%E3%83%AA%E3%81%AE%E3%82%AD%E3%83%A3%E3%83%83%E3%82%B7%E3%83%A5%E5%8C%96)

# おわりに
今回はデバッガーと最適化について書いてきました。
PythonやHDKについてはまだ詳しく分からないというのもあり、そのあたりについてはご紹介にとどめてしまったのでそのあたりは心苦しいのですが、機会があれば追記したいと思います。
次回以降の予定としては解析関係を考えています。
自分用のメモも兼ねているので拙い部分もありますが何かの参考になれば幸いです。