すあまの備忘録

誰得内容の自分のための非営利目的備忘録ブログ(筆者がわかっても内緒にしてください)

SmokeのUpResとちょっとだけPyro Sparse

時間がないときとかLow Resのシミュレーションの動きを維持したいときに 若干Upresの組み方がややこしいのでおさらいと、LowresがSparse Volumeでも動くのか試した


Pyro Upresのテスト

hip fileはこちら(Houdini 18.0.287)

Lowresシム

f:id:godofsuama:20200118130952p:plain
単純なセットアップ

f:id:godofsuama:20200118131024p:plain
LowresのDOP内

どちらも凝ったことはしていないので割愛

一応Sparseのメモ

・Pyro (Smoke) Sparse Solverは、Smoke Object Sparseと一緒じゃないと動かない

・第三入力がSource (Emitter)、第四入力にCollisionとForceを繋ぐ

・GravityはSolverのSimulationに既にある

・Advection-ReflectionをSingle-Project (Double-Project) に変更する help

 ヘルプを見る限り、爆発以外では設定必須のよう。

 設定していると渦の保持をされるようになるのでディテールが乗りやすい。

 Double-Projectにするとかなり計算が遅くなるようで、Single-Projectはわずかに遅くなる程度らしい。


Advection-Reflectionのテスト

Upres Input

f:id:godofsuama:20200118133742p:plain
Upres処理部分

f:id:godofsuama:20200118133849p:plain
UpresのDOP内

・Upresのシムをするには、Lowresのvelのみが必要

・Lowresで使用しているのとまったく同じSource(エミッター)が必要(DOP内で値を変更していたらその値も)

・Bounding Box(初期の位置を大きさ用)

第一入力

Lowresのvelを保存したキャッシュを繋ぐ

Lowresの確認用にdensityも保存しているがUpresDOP内では使われていない

第二入力

LowresのSource(エミッター)を繋ぐ

DOP内で値を変更していたらその値も必要なので、LowresのDOPからVolume Sourceをコピペし、不要なVolumeを読まないように設定する

この際、Smokeの計算の場合は、Densityのみが必要、Pyroの場合はDensityとFuelが必要で、

Temperature等も追加できるが、Lowresと結果が大きく変わるのでないほうがいい

第三入力

LowresのSource(エミッター)のBounding Boxを繋ぐ

第四入力

コリジョンオブジェクトを繋ぐ

今回はSourceが半分地面にめり込んでいるのでその部分を削除するため、Upres DOP内でGas Enforce BoundryでCollision内を削除

Lowresでコリジョンしている場合はvelが避けるような動きになっていたりするのでなくても大丈夫のはず?

Gas Upres

Simulationタブ

f:id:godofsuama:20200118135517p:plain

・Use Lower Source Resolutionにチェック  Lowresのvelの解像度を維持してほかの要素のみを高解像度化する    結果がもとに似やすい

・Fluid Type  煙のみの場合は、Smokeに、炎も必要ならPyroに、など適宜変更する必要がある

・Low Res SOP Path  Lowresのシミュレーション結果のパス(今回は第一入力)

Combustionタブ

・炎を伴う場合に設定  Lowresと設定を合わせるところからスタートする

Shapeタブ

・Dissipation  Lowresと設定を合わせるところからスタートして調整

・Turbulence  一番大事で追加のディテールを設定する。

 3種類あるのでHelpを参照

Links

f:id:godofsuama:20200118140634p:plain

この部分のパラメーターは優先的にLowresにリンクされるはず…

Sparseで効いているかは不明

Smoke Object

f:id:godofsuama:20200118142438p:plain

・Size, Centerは第三入力から読み込み

・Division SizeはLowresのDiv SizeをベースにSOPのWrangleでDetailに設定したものを読み込んでいる

 この際Time Scaleも設定して読み込まれるようにしている  Time Scaleに関しては、DOP Import FieldでLowresの結果をSOPに持ってきていれば自動で設定される f:id:godofsuama:20200118142718p:plain

//Bounding boxのXの大きさを取得
vector lowres_bbox = getbbox_size(0);
float bbox_x = lowres_bbox.x;

//一つ目のVoxel ResolutionのXを取得(*1しているのはintをfloatにするため
float lowres_voxelres = primintrinsic(0,"voxelresolution",0) *1;

//Voxel Sizeを計算
float lowres_voxelsize = bbox_x / lowres_voxelres;

//Upres用のDiv Sizeを設定
@high_voxelsize = lowres_voxelsize * chf("multiply_voxel_size");
@timescale = chf("Time_scale");