パーティクルの読み書き
Houdiniで作成したパーティクルを ASCIIデータとして書き出す方法と、タブで区切ったX Y Z 値の羅列ファイルをパーティクルとして読み込む方法を紹介。ここでは、.chan ファイルフォーマットとして扱う。.chan はチャネルデータをタブで区切ったASCII ファイル。Maya の .mov と同じ。
使用バージョン: Houdini 14.0.453
参考シーンファイルへのリンクは一番下にあり。
1. 元ファイルの作成
元になる簡単なパーティクルシミュレーションを作成する。
- Particles シェルフの Location Particle Emitter ツールをクリックし実行。
- 作成された AutoDopNetwork の中の location ノードの Const. Birth Rate を 50程度に、
- gravity1 ノードをバイパス (ノード左側の黄色いフラグをオンに)し、重力を無効にする。
2. パーティクルの書き出し
パーティクルデータをフレーム連番の .chan ファイルとして出力するには、パーティクルの P (Position=座標) 情報を CHOPで tx, ty, tz に変換し、/out 以下で連番ファイルとして出力する。
- /obj で TAB->CHOP Network とするか、/ch へ移動。ここでは、CHOP Network (/obj/chopnet1) を作成し、i キーを押すなり、ダブルクリックするなりして中に入る。
- TAB->Geometry で Geometryノード (channel1) を作成。
- /obj で TAB->ROP Network とするか /out へ移動。ここでは /out に行く (特に深い理由はない。どちらでも良い)。
- TAB->Channel で Channel ノード (channel1) を作成。
- Valid Frame Range を Render Frame Range に変更。必要であれば最初と最後のフレームを変更。
- CHOP Path に先ほど作成した channel1 ノードを指定。
- Output File にパスとファイル名を指定。連番で出すには out$F3.chan 等とする。
- Render ボタンを押せば、パーティクル情報が連番ファイルとして出力される。
- 出力先ディレクトリには、上記の設定の場合、240フレーム分の .chan ファイルがあり、それぞれ各フレームで存在するパーティクルの数だけX Y Z 値がタブで区切られ出力されている。例えば以下は1フレーム目のファイル(パーティクルは2個)。
-0.00499891536310315 0.00223939050920308 0.00306932372041047 -0.0123176770284772 -0.00221042614430189 0.00426115142181516
これでパーティクルの書き出しが終了。
3. パーティクル (データ) の読み込み
書き出したファイルを再度読み込むにも CHOP を使用する。ここでは
- CHOPデータの読み込み
- パーティクルを一つだけ作成
- 読み込んだCHOPデータの数だけパーティクルを複製
- 複製されたパーティクルの位置を調整
- CHOP データの読み込み
先ほどの CHOP ネットワーク (/obj/chopnet1) の中に TAB->File で File ノード (file1) を作成。 - パーティクルを一つだけ作成これでパーティクルが一つ作成された。
- パーティクルの複製
- 複製されたパーティクルの位置を調整
- 再生すれば書き出したパーティクルのアニメーションと同じ挙動を確認可能。
まとめ
- ここでは .chan を使いノードの接続と簡単なエクスプレッション一つで可能な方法を紹介したが、これが唯一の方法ではない。 Python SOP や Wrangle ノードを用いるとより大規模データに対応しやすくなる。
- 関連項目
- シーンファイル
- particleIO.zip (34KB)
0 件のコメント:
コメントを投稿