時間がないときとかLow Resのシミュレーションの動きを維持したいときに 若干Upresの組み方がややこしいのでおさらいと、LowresがSparse Volumeでも動くのか試した
hip fileはこちら(Houdini 18.0.287)
Lowresシム
どちらも凝ったことはしていないので割愛
一応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はわずかに遅くなる程度らしい。
Upres Input
・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タブ
・Use Lower Source Resolutionにチェック Lowresのvelの解像度を維持してほかの要素のみを高解像度化する 結果がもとに似やすい
・Fluid Type 煙のみの場合は、Smokeに、炎も必要ならPyroに、など適宜変更する必要がある
・Low Res SOP Path Lowresのシミュレーション結果のパス(今回は第一入力)
Combustionタブ
・炎を伴う場合に設定 Lowresと設定を合わせるところからスタートする
Shapeタブ
・Dissipation Lowresと設定を合わせるところからスタートして調整
・Turbulence 一番大事で追加のディテールを設定する。
3種類あるのでHelpを参照
Links
この部分のパラメーターは優先的にLowresにリンクされるはず…
Sparseで効いているかは不明
Smoke Object
・Size, Centerは第三入力から読み込み
・Division SizeはLowresのDiv SizeをベースにSOPのWrangleでDetailに設定したものを読み込んでいる
この際Time Scaleも設定して読み込まれるようにしている Time Scaleに関しては、DOP Import FieldでLowresの結果をSOPに持ってきていれば自動で設定される
//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");