Houdiniにおけるデバッグ Vol.1 表示・確認について

# はじめに

Houdiniでいろいろノードを組んだりVEXやPythonでコーディングしていくといつの間にか複雑になってしまいがちです。そんな複雑になったシーンでエラーの原因を探ったり、修正を加えて行くのは至難の技となることがあります。そこでHoudiniでのデバッグの方法について何回かに分けて書いていきます。今回は様々な情報を確認する方法について取り上げます。

---

第二回は[こちら](https://qiita.com/dicepastoso/items/478c8a0a05d67f3a0560)
第三回は[こちら](https://qiita.com/dicepastoso/items/b1831e480bf717736c5a)

---

## デバッグが必要になる場面

- エラーが起きている時
- 想定した動作にならない時
- 処理が遅く最適化したい時

# 表示・確認系
まずは状態を知ろうということでいろいろな情報を教えてくれるものを紹介します。
尚、各見出しにHoudiniのヘルプをリンクしています。

## [Display Options マーカー](https://www.sidefx.com/ja/docs/houdini/ref/windows/displayopts_3d.html#markers)

各コンポーネントの番号や法線を可視化します。
<img width="655" alt="a.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/f6a7910a-46ff-25e8-8651-72b2fca7a26d.png">


## [Display particles](https://www.sidefx.com/ja/docs/houdini/ref/windows/displayopts_3d.html#particle) as Disk

パーティクルのサイズは `pscale` で設定したものを Diskで可視化できます。
![b.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/6a416a85-9670-b90d-8dc7-da5507498d8c.png)


## [Geometry spread Sheet](https://www.sidefx.com/ja/docs/houdini/ref/panes/geosheet.html)

Geometry spread Sheet でアトリビュートの確認をします。
各コンポーネント毎で確認ができ、アトリビュートが多いときには検索窓から探すと該当のもののみ表示します。
またグループもここで確認でき `group:test`のように接頭に `group:` が付きます。
<img width="853" alt="c.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/62c601bd-7e4b-b118-823b-62e65708f84e.png">


## [Node Info](https://www.sidefx.com/ja/docs/houdini/network/nodes.html#info)
各ノードをマウスオーバーした時に出るノードリングの左側にある `i` をクリックすると出現。
ここで確認できることはノード名、ノードパス、ジオメトリ情報、アトリビュート、グループ、Time Dependent情報、クックタイム、作成時/編集時情報、HDAの格納ディレクトリーパス、そしてコメントの追加が可能です。
<img width="700" alt="d.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/5c8a9571-92dc-089f-7b8e-77e673df7fa1.png">


## [Badges](https://www.sidefx.com/ja/docs/houdini/network/badges.html)

ノードに関するステータスを表示します。
いくつか種類がありますが、特に `Error` と `Warning` に気をつけます。どこがおかしいのかを表示してくれて、また不具合が起きている箇所に飛ぶことができるので便利です。（エラーメッセージにに該当ノードパスが表記されている時）
![e.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/28cf74fa-ac15-d085-948d-82b7fdc06733.gif)


## アトリビュートの@Cd や@Alphaを使用する

カスタムアトリビュートを作成してそのアトリビュートを利用してジオメトリに編集を加えたい時、正しく反映されているかを `@Cd` や `@Alpha` を利用して確認することができます。
![f.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/8e9c5814-6cd8-4dcf-27be-5ed1c4f79eff.gif)
![g.gif](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/1d158965-ec7b-1f84-66ff-d846f11e9888.gif)
例にあげたものは Attribute Transferを使用しているので `@Cd` で設定することはできますが簡単な例示のためにこちらをあげました。 動いている球体に`active` というアトリビュートを作成してGridに移し、 `active = 1`の時にGridにノイズがかかるようにしています。どの部分が `active` に変わるかを `@Cd` や `@Alpha`を利用して目視できるようにしました。




## Visualizersで可視化

[Visualizers](https://www.sidefx.com/ja/docs/houdini/basics/visualizers.html)
[Visualize](https://www.sidefx.com/ja/docs/houdini/nodes/sop/visualize.html)
特定のアトリビュートをビジュアライザーを利用して可視化することができます。
利用方法としてはNodeで追加するか、もしくはディスプレイオプションからも設定ができます。
例はポジションのY値を `height` アトリビュートに格納したものを可視化しました。調べたいノードを選択している状態で `x` を押すと自動で `Visualize` ノードが接続されます。
<img width="1810" alt="h.jpg" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/ca8212a8-6c7f-0354-28e5-9e6748916c3c.jpeg">


## [Printf](https://www.sidefx.com/ja/docs/houdini/vex/functions/printf.html)

VEXの処理をHoudini Consoleに出力します。
書式は `printf(“フォーマット文字列“,引数 )`でフォーマット文字列でフォーマットを指定できます。
（%f,%i,%sなど）
単純なものであればアトリビュートを確認したりで可能ですが、引数を渡したりなど複雑化すると途中でプリントデバッグするといいかもしれません。
<img width="548" alt="i.png" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/134079/24bc109e-7de8-00a6-12d5-5db29acc8137.png">


# おわりに

各種データを把握することはデータを構築し、またデバッグするにあたって重要なことです。
今回は表示や確認する方法について書いてきました。次回以降でエラー表示に関することやエラーハンドリングなどについて書いていきたいと思います。

# 参考

[Houdini Tutorial: Send debug output (VEX) to the Houdini Console](https://www.youtube.com/watch?v=MsJuqqz64Kk&feature=emb_title)

[Houdini: Wrangleがわからない（分かった感ある） - kick the base](https://www.kickbase.net/entry/wrangle-operator#printf%E3%81%AE%E6%8C%99%E5%8B%95%E3%82%92%E7%A2%BA%E8%AA%8D%E3%81%99%E3%82%8B)