検索 - User list
Full Version: HDA ノードの再クック
Root » 日本語フォーラム » HDA ノードの再クック
Yukihiro_Fujita
HDAのノードを再クックする方法はありますでしょうか。

python で
node.cook(force=True)
を実行してもHDAノードの場合は再クックされないようでした。

ご教示いただけますと幸いです。

よろしくお願いいたします。
Ken Taki
例えば /obj/geo1 以下に a1 という HDA があり、

a = hou.node('/obj/geo1/a1')
から Performance Editor で Record をオンにした状態で
a.cook()
だと Performance Editor に cook された形跡が現れませんが、
a.cook(force=True)
だと、計算が走った形跡が現れます。

再クックされていないとは、どのようにして判別しているのでしょうか?

Yukihiro_Fujita
ご返答ありがとうございます。

Image Not Found


動画を添付いたしました。

動画にあるremesh ノードはクックに3秒ほどかかります。
同じremesh ノードをHDA 化したものが右にあるノードです。

Performance Monitor でRecord 状態にしてそれぞれcook(force=True) を実行してみると、左のリメッシュノードのみ処理時間が計測されクックされているように見えます。

使用しているバージョンはHoudini FX 20.5.445 - Py3.11 です。
Ken Taki
お使いの HDA をここに晒すのがまずいのであれば、
1. HDA (test_hds1)の中を見て、出力ないし表示フラグがネットワークの最下流なり、最も重要なところについているかご確認ください。
2. 設定上の問題がないのであれば、 HDA を info-jp@sidefx.com に送っていただけますでしょうか?
Yukihiro_Fujita
ありがとうございます。

HDA 内では出力ノードが表示状態で最下流になっていますのを確認しました。

前の投稿の動画で使用しているHDA をこちらに添付させていただきました。

お手数をお掛け致しますが、よろしくお願いいたします。
Ken Taki


私のところでは問題なく動きました。Performance Monitor の前に、Hscript で
sopcache -c
ないし、 Python で

hou.hscript("sopcache -c")

としてから実行するとさらに顕著 (数秒、添付画像参照)かもしれませんが、そうでなくともちょっと (0.1 秒) は実行している感じです。

使った Houdini は 20.5.444 と 20.5.522 です。どちらでも同じように実行されました。

SOP Cache に関しては、こちらのページをご覧ください。
https://ikatnek.blogspot.com/2025/03/sop-cache.html [ikatnek.blogspot.com]
Yukihiro_Fujita
キャッシュの情報ありがとうございます。

教えていただいた方法でキャッシュをクリアしてから実行してみましたが、動作は変わらずでした。

同じ環境で作業している同僚のマシンでも試してみましたが状況は同じでした。
Ken Taki
お使いコンピュータが速すぎるからとか。
例えば、 HDA の中の Remesh の Target Size を 0.005 などにしてみた場合はどうでしょうか?

Yukihiro_Fujita
マシンスペック記載しておりませんでした。
以下の通り早すぎるスペックではないと思います。

Target Size を0.005 にしたremesh ノードのみを指定して計測すると16s 程かかっています。
しかしながら、HDA にcook(force=True) を実行して計測した場合は、やはり一瞬で終了しています。
実行時の動画を添付いたしました。

OS
Windows 10 Pro for Workstations
22H2

プロセッサ
Intel(R) Xeon(R) W-2145 CPU @ 3.70GHz 3.70 GHz

RAM
128 GB

グラフィックボード
Geforce RTX 3080
Ken Taki
それはつまり「計算を一度しているから二度目は早い」ということではないでしょうか?

hou.hscript("sopcache -c")

を実行してから

a.cook(force=True)

をするとどうなるでしょうか?
Yukihiro_Fujita
hou.hscript("sopcache -c")

を実行してからクックコマンドを実行してみました。

添付しました動画のような結果になります。

HDAが再クックされれば、16秒ほど処理に時間がかかるかと思うのですが、一瞬で終了しているように見えます。
Ken Taki
本当ですね。私のところでは同じ手順でクックされています。Remesh の Target Size は 0.005 です。


一度、 MyDocuments 以下の houdini20.5 を houdini20.5a などと変えて環境をリセットするとどうでしょうか?
Yukihiro_Fujita
houdini20.5 フォルダを削除して環境をリセットしてから試してみました。

キャッシュクリアコマンドを実行してからクックを試みています。

変わらず瞬間的に終わってしまいますが、パフォーマンスモニターの「test_hds1」の下に「output0」が表示されるようになりました。
今までは「test_hds1」しか記録されていなかったように思います。

Ken Taki
私のところでも問題を再現できた気がします。
Edit->Preferences-> Objects and Geometry > SOP Cache に行き、Cull Level の値を確認してみてください。
こちらが 1 でしょうか?
その場合、HDA 経由では、 sopcache -c のあともキャッシュを使っているように見えます。
Cull Level を 2 以上にすると、sopcache -c のあと、a.cook(force=True) が最初から計算をしているように見えます。

Cull Level を変更して、挙動に変化が出るかご確認いただけますでしょうか?

https://ikatnek.blogspot.com/2025/03/sop-cache.html#badge [ikatnek.blogspot.com]
にも追記しましたが、Node Needs to Cook バッジを表示すると、Cull Level 1 の場合、上流が正しくクックされていないと表示されます。


ここの挙動の挙動の解明にはもう少し時間が必要ですが、Cull Level を2以上にするなり、手動で関連ノードを再クックすれば、うまくいくように見えます。
Yukihiro_Fujita
Cull Level の値は1 に設定されておりました。

自分の環境ではCull Level を4以上にした状態で、sopcache -c を実行したのちにcook(force=True) を実行すると、HDA 内のノードのクックが計測されるようになりました。

Cull Level が3以下の場合は、挙動に変化がないようでした。

情報ありがとうございます。
Ken Taki
色々と訊いてみましたが、Cull Level やその他の設定に影響されることなく、HDA の再クックを一番確実に行うのは、入力を切断して、再接続することのようです。スクリプト化すると良いのかもしれないですね。
Yukihiro_Fujita
まさに再クックするスクリプトをネットワークビューのコンテキストメニューに追加しているところでした。
切断、再接続の方法でひとまず実装しようと思います。

色々とご教示いただきありがとうございました!
This is a "lo-fi" version of our main content. To view the full version with more information, formatting and images, please click here.
Powered by DjangoBB