Getting channel data

チャネルデータの書き出し

チャネルデータをHscriptと Python で書き出す方法を説明。
例としてパーティクルエミッターを作成し、このときに発生する パーティクルの数を書き出す。

使用バージョン: Houdini 13.0.566

  1. パーティクルの作成
    • Particles シェルフから Location Particle Emitter をクリックし、Enter キーを押して原点に配置。
      アニメーションを再生すれば原点からパーティクルが下に向かって放出される様子が確認できる。
  2. Null ノードの追加
    • Scene ビューには、AutoDopNetwork (シミュレーション) と location_particles (描画されるパーティクル) の二つのノードが出来ている。
    • このうち、location_particles の中に入り、その中にある import_locations に Null ノード (null1)を追加。ここにパーティクル数を表示するパラメータを追加する。
  3. パラメータの追加
    • null1 を選択、パラメータビューに表示。現時点では、Copy Input と Cache Input の二つだけがある。
    • 右上のギアアイコンをクリック、Edit Parameter Interface... を実行。

      Edit Parameter Window が表示される。
      • 左側の Create Parameters リストで Integer を選択
      • 中央の Existing Parameters のリストにドラッグ&ドロップする。
      • 右側の Parameter Description で
        • Name を pnum
        • Label をNumber of Particles
        と設定する。この二つは予約語ではないのでわかり易いものであれば何でも良い。
      • Accept ボタンを押して閉じる。
    • すると、null1 に今作成したパラメータが追加された。
  4. パラメータへのエクスプレッションの追加 (Hscript)
    • 「0」 となっているパラメータフィールドの 0 を削除、'n' と入力すると、使用可能なコマンドがリストされる。

      ここで使うのは、npoints ()。矢印キーやマウスを使って選択しても良いし、そのままタイプして行っても良い。
    • コマンド名にもノード名にも補完が効くのでそれに沿って入力を続ける。

      最終的には
      npoints("../import_location")
      とする。
    • ラベル部分 ("Number of Particles") を LMB でクリックすれば値とエクスプレッションがトグルで切替表示可能。
  5. Python で記述
    • ネットワークエディタで、出来た null1 を Ctrl+C、 Ctrl+V で複製。null2 が出来る。
    • null2 の Number of Particles ラベル上で RMB クリックし、Expression -> Change Language to Python とする。
      切り替えるとテキストフィールドの背景色が赤くなる。
    • Python での書き方としては、いくつかあり
      • len(node("../import_location").geometry().points())
      • len(node("../import_location").geometry().iterPoints())
      • len(pwd().inputs()[0].geometry().iterPoints())
      いずれも有効。上で作った Null ノードをコピペして試すと良い。
  6. チャネルデータの書き出し
    • Python
      • メインメニューの Windows-> Python Shell を実行し、Pyhthon Shell ウィンドウを開いたら、
        >>> for x in range (1, 60): 
        ...     hou.parm('/obj/location_particles/null3/pnum').evalAtFrame(x)
        とすれば、最初の60フレームのチャネルデータがプリントされる。
      • ファイルに書くには、Pythonの file() や write() を併用。
    • Hscript
      • Windows->Hscript Textport から以下の一行で書き出すことが可能。
        chwrite -f 1 60 /obj/location_particles/null3/pnum c:/tmp/chan.chan
        chwrite を使う場合、拡張子は、 .chan か .bchan のみ。 .txt や .move または .csv にするには書いた後に変更する必要がある。
    • まとめ
      • 上記の方法は、パーティクルの数だけに限らず、あらゆる数値チャネルに利用することが可能。
      • Hscript Textport, Python Shell ともに補完が効くだけでなく、パラメータビューからパラメータのラベルをドラッグ&ドロップしてパスを記述することが可能。
      • 大きなシーンまたは重いシーンで実行する場合、キャッシュに書いた後でシミュレーションがかからない状態にしてから実行する。
      • 参考リンク: Houdini 製品構成

0 件のコメント:

コメントを投稿