7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 3 years have passed since last update.

Houdiniにおけるデバッグ Vol.2 エラーについて

Last updated at Posted at 2020-04-07

はじめに

Houdiniにおけるデバッグ Vol.1 ではHoudiniにおいて様々な情報を表示・確認する方法について書きました。
今回はエラーに関わることについて書いていきます。


第一回はこちら
第三回はこちら


トラブルシューティング

Houdiniのインストール、ライセンス、諸々の不具合については開発元や代理店のトラブルシューティングをご覧の上、不明点があれば各問い合わせ先にお尋ねくださいませ。

トラブルシュートFAQ | SideFX

Born Digital サポート Houdini

インディゾーンサポート SideFX

エラーに関する環境変数

houdini.env に設定できる項目の中にエラーに関するものがいくつかあります。

HOUDINI_ERRORLOG_FILENAME

エラーのログをこのファイルに書き出します。

HOUDINI_ERRORLOG_LEVEL

HOUDINI_ERRORLOG_FILENAME で指定したエラーログファイルに書き出す最低エラーレベルをし指定します。 有効な値は、0から6の整数値です。 デフォルト値は3。
エラーレベルは以下の通りに定義されています。
0,すべてのエラーをログに出力
1, メッセージ
2, プロンプト
3, 警告
4, 中止処理
5, 致命的なエラー
6,何もログに出力しない
例)houdini.envの記入例と実行例です。
Sweep(旧Sweep)に何も繋がずにエラーバッチが出ている状態の時、設定したLogファイルには下記のように記載されます。
env.png
error_sample.png
この他にも様々なエラーに関する環境変数がありますが、例示としてエラーを起こすのが手間なので環境変数の項目のみ記載します。

HOUDINI_VERBOSE_ERROR

予期しないファイル保存エラーをコンソールとエラーボックスの両方に表示します。

HOUDINI_DSO_ERROR

プラグインのDSO/DLLエラーをコンソールに出力するかどうか決めます。

HOUDINI_TIFF_SAMPLEFORMAT

TIFFライブラリの古いバージョンが未知のタグに関して警告/エラーを表示します。

HOUDINI_OGL_DUMP_SHADER_ERRORS

GLSLコンパイルエラーが発生すると、コンソールに出力します。

HOUDINI_SCRIPT_DEBUG

ダイアログスクリプトとスクリプト化したオペレータを読み込む時、エラーが出力します。

HOUDINI_IMAGE_DEBUG

画像を保存/読み込みした時に発生したエラーに関する情報がより詳細になります。

エラー表示

ErrorSOP

条件によって メッセージ、警告、エラーを発生させることができます。
論理演算で判別され 0(False)の時にそのまま通過し、1(True)の時に上記のエラー等を発生します。

例)グリッドの Row とColomnが10以下の時にエラーを発生して止めます。
ErrorSOP.gif

エラーハンドリング(例外処理)

Swichの利用

Swichの Select Input は整数値が返ってくるエクスプレッションで設定ができるのでエラーを起こす場合を判定して入力を切り替えることができます。

例)他のDCCツールで作成したものを読み込み、そのジオメトリ(ジオメトリでなくても良いですが)に下流で必要なAttributeを予め付与していることがシステム上必要である時、そのジオメトリが不在であっても、必ずそのAttributeを下流に継承させるための補助のネットワークを用意しておき、ジオメトリの有無で判定してネットワークを切り替えます。
errorHandling_Swich.gif

例)Helpの掲載されているTIPS
エラーがあれば2番めの入力に切り替えます。
Helpに掲載されている例では正常とエラーの入力が逆になっています。前後のネットワークがあることを想定し、それらのメインストリームが左(第一インプトット)であることが多いので下記のようにしました。

ただし、公式Helpでは 直感的には1番目の入力がTrueの方が良いのではと思うかもしれませんが、エクスプレッションやスクリプトの結果を入力番号の0と1に合わせた順番の方が理にかなっています。 としていますので公式にならったほうが自然ではあると思います。
if(expression, true_value, false_value)
Swich2.gif

エラーを起こさないための工夫

煩雑になればなるほどエラーを起こす危険性は高まります。ではどうすれば良いのでしょうか?これは色々な手段があると思います。私も試行錯誤で少しずつ改善しているところです。ですので極々一例ではありますがご参考までに。

スペルミス

VEX等でアトリビュートを設定していくときに起きやすいのがスペルミスです。自分で設定するカスタムアトリビュートもそうですが、ビルトインアトリビュートは既にHoudini側で用意しているものなので間違えると動きません。スペルミスを防ぐために Houdini Expression Editor というのを使用してVSCodeで書いています。VSCodeでシンタックスハイライトしてくれますし、補完もしてくれるので便利です。くわしくはめんたいこさんの記事に載っているので参考にしてください。
Houdini: VEXをカスタマイズしたVS Codeで書く02 - kick the base

整理

ネットワークが複雑化すると他の人から分かりにくくなります。一人で作業していても時間が経てば分からなくなることもあります。いかにデータを分かりやすく構築し、整理していくこともエラー回避につながります。

ネットワークボックス

まとまった処理をネットワークボックスで囲うことで視認性があがり作業しやすくなります。また左上の - を押すことで最小化することもできます。

sticky note

付箋を配置してそのノード、ネットワークが何を行っているかなどのメモを残して構造を分かりやすくします。

サブネットワーク

まとまった処理のネットワークをサブネットワーク化してルート階層の処理の流れを見やすくします。

各ネットワークの集約

ケースバイケースですが、 /obj 階層に matnetropnet を配置して各ネットワークの行き来を少なくします。

おわりに

今回は主にエラーに関することについてまとめました。エラーを回避し、そしてエラーが起こったとしても解析してすばやく想定する動作にもっていく。それが作業効率をあげ、アーティストワークにもより集中できるようになると思います。TOPSやPythonについてなど今回あげられなかったものもたくさんありますが、それらはいずれ詳論として取り上げたいと思います。(そのあたりはまだ詳しくないので学習しつつとなりますが。)
なにかの参考になれば幸いです。時期はあくかもですが次回以降でデバッガーや解析にまつわることを書ければと思います。

参考

Houdiniと環境変数の魔導書 〜補助魔法導入で失敗しないために〜
Houdini:Error(SOP)No More Retake | No More Retake
HoudiniのParameter Interfaceで使えるPython②
Houdiniで長方形のプリミティブを判別するノードを作成した
Graph Cleanup

7
6
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
6

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?