Houdini Tips回。
煙作成時「Gas Resize Fluid Dynamic(DOP)」を使用した際、シミュレーション開始時に計算領域と発生源が重なっていないと上手くシミュレーション出来ない場合があります。今回はその回避法です。
何を解決したいのか
次のようなシミュレーションがあるとします。
(gifアニメの枚数節約のため、ここではFPSを10で作ってます)
シェルフで作った普通の煙ですが、発生源は原点より上の方(離れた場所)にあります。
この発生源を、最初消しておいて何フレームか経ってから出現させるとこうなります。
煙が一切発生しません。画面中央に出現するのは煙の発生源です。
初めの方は発生源がないので仕方がないとして、後半は発生源が存在するのだから、そこから煙が出てくれてもよさそうなものなのに、そうなりません。
なぜか?
原因は「Gas Resize Fluid Dynamic(DOP)」
これは「Gas Resize Fluid Dynamic(DOP)」というノード(下図の赤枠)が原因で起こる問題です。
「Gas Resize Fluid Dynamic(DOP)」はシミュレーション領域を最適化(必要な範囲に毎処理調整)してくれるノードです。
ためしに、このノードにBypassフラグを立てて一時的に機能をOFFにすると、シミュレーション範囲の最適化は行われず、シミュレーション範囲は一定のままです。
途中のフレームからでも煙が発生してくれます。
では「Gas Resize Fluid Dynamic(DOP)」ノードを使わなければ良いかというと、そういうわけにもいきません。
マシンスペックと時間が有限である以上、効率のよいシミュレーションを求めることは必然です。
そして効率よいシミュレーションのために、「Gas Resize Fluid Dynamic(DOP)」は必要なノードです。
これを回避するために
これを回避するために、「Gas Resize Fluid Dynamic(DOP)」にあるパラメータTracking Object設定を用います。
下のほうにあるパラメータですね。
これを用いると、シミュレーション領域最適化の計算に、指定したSOP(もしくはDOPオブジェクト)を考慮させることが可能になります。
実際にやってみます。
Track By Objectを有効にし、SOPに設定。
SOP Pathには、煙の発生源より少し大きいくらいの箱を用意し、それを設定しました。
これでシミュレーションすると、こうなります。
Gas Resize Fluid Dynamic(DOP)による最適化の際、指定したSOPジオメトリ(上図の赤い四角)が考慮されるので、シミュレーション領域はそれより小さくはなりません。
そのため発生源が出現した時にも、シミュレーション領域内にいることができるので、ちゃんとシミュレーションも行われています。
プロシージャルに煙を発生させる際は、発生源そのもの(もしくはそれを少し大きくしたもの)を、”Track By Object”で設定しておくと、シミュレーション領域の最適化に失敗することが無くなると思います。
以上ここまで!
間違い等ありましたらご指摘を!
Sample File = GasResizeFluidDynamic.hip
Thank you so much!!!