サブステップのMin/Maxと、シミュレーションのキャッシュ化について

   727   2   0
User Avatar
Member
36 posts
Joined: June 2023
Offline
Houdiniの仕様についての質問です。

現在流体シミュレーションを行っているのですが、レンダリングするにあたりモーションブラーの品質を高めるためにサブステップを増やしてキャッシュ化することにしました。

ソルバにも様々な種類がありますが、ほとんどのソルバにはGrobal Substeps、Min Substeps、Max Substepsの3つの項目があると思います。
いろいろドキュメントや資料をあたって回ったのですが、これらの明確な仕様がいまいちわかりませんでした。

Grobal Substepsは基本的な1フレームの分割数と捉えていますが、だとするMin/Max SubstepsはHoudini側が勝手に必要不必要を判断して分割数を増やしたり間引いたりしているということなのでしょうか?
素人の見当違いな憶測かもしれませんが、サブステップが部分的に間引かれたり増やされていると均一なブラーがかからないのではないか等の心配がよぎります。

他にもキャッシュ化する際にFile Cache SOPを使ってみてはいるのですが、当然なのかもしれませんがこちらにはサブステップに関する項目は「Substeps」しかありません。
均一な詳細分割数が得られるのは想像できるのですが、だとしたらユーザーはあますことなくフレームを保存するためにソルバでのMax Substepsをここに入力するべきなのでしょうか?

初学者でいろいろおかしなことを質問してしまっているかもしれませんが、どうかアドバイスを頂けたら幸いです。
User Avatar
Member
59 posts
Joined: March 2012
Offline
流体シミュレーションの「モーションブラーの品質を高めるために」とは具体的にどのようなケースの品質の事なのでしょうか。
流体も水(Flip)なのか、Pyroの煙なのか、炎なのか、パーティクルなのか。画像があればより分かり易いのではないかと思います。

モーションブラーの品質の話で言うならば、レンダラーのモーションブラーの設定が主な部分が占めており
場合によっては速度情報(v)が必要になるケースがあります。こちら参考になるかと。

↓モーションブラー
https://www.sidefx.com/ja/docs/houdini/render/blur.html [www.sidefx.com]

↓KarmaでのPyroのモーションブラー
https://www.youtube.com/watch?v=lrLcX-cQZNY&ab_channel=Houdini [www.youtube.com]


また、Hikari_さんが仰っているソルバーのGrobalSubstepsはシミュレーションの1フレームの分割数なので
レンダリングのモーションブラーの品質には大きく直結しないと認識してます。

高速に移動している場合のモーションブラーの品質を高める場合は、CacheSOPのSubstepsは使用せずに(理由は忘れましたがMantraでレンダリングをする際にSubsteps分のキャッシュの読み込みが上手くいかない、エラーが出てしまったりするケースがあり私は使用していないです。なので品質を高めたい場合は)FPSを30から120、240にした状態でシミュレーションを行う形を取ってます。人によるのではないかな…と。

またSolverのGrobalSteps、Min、Maxに関しては、基本的にはデフォルト値を使用してシミュレーションをしており、計算時にコリジョンが突き抜けてしまったり等、高速移動してバグってしまう場合にGrobal,Min,MaxのSubstepsを使用しています。

>Min/Max SubstepsはHoudini側が勝手に必要不必要を判断して分割数を増やしたり間引いたりしているということなのでしょうか?
この認識で合っていると思います。高速に移動していたらMax値が使用され、そうでなければMinを使用してくれる。といったイメージです。

参考になれば幸いです!
User Avatar
Member
36 posts
Joined: June 2023
Offline
> icecreamumaiさん
ご回答ありがとうございます!

私が今回取り組んでいたものは水のFLIP流体でした。
icecreamumaiさんが貼られた公式ドキュメントを私も見ていたのですが、流体シミュレーションのモーションブラーはデフォルトのトポロジーベースのモーションブラーが機能しないケースが多いため、代わりにシミュレーション時に生成された速度情報でブラーを作成する部分は理解できました。

私はMantraではなくKarmaでレンダリングをしていたのですが、Cache LOPで全フレームのキャッシュを取りKarma Render Settingのモーションブラーを適用する方法ではソルバーでのGlobal Substepsの差(私の場合は1から4に上げました)はかなりブラーのクオリティに影響を及ぼしているように見えました。
(まさにこの部分↓
https://www.sidefx.com/ja/docs/houdini/render/blur.html#:~:text=1%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E5%86%85%E3%81%A7%E8%A4%87%E9%9B%91%E3%81%AB%E5%A4%89%E5%BD%A2%E3%81%99%E3%82%8B%E3%82%AA%E3%83%96%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AB%E3%81%AF%E3%80%81Geo%20Time%20Samples%E3%81%AE%E6%95%B0%E3%82%92%E4%B8%8A%E3%81%92%E3%82%8B%E5%BF%85%E8%A6%81%E3%81%8C%E3%81%82%E3%82%8A%E3%81%BE%E3%81%99%E3%80%82
のような、サブステップ間が直線で結ばれてしまうが故の不自然さが、Global Substepsを上げることでかなり改善されたと思います)

ただ当然サブステップを上げることで簡単に処理負荷を何倍にも上げてしまうため、無駄の少ない効果的なシミュレーションの方法とキャッシュの取り方をするにはまずMin/Max Substepを含めるサブステップの仕様を正しく知るべきなのかと思い質問させていただいた次第です。

>この認識で合っていると思います。高速に移動していたらMax値が使用され、そうでなければMinを使用してくれる。といったイメージです。
やはりそういう感じなのですね。
丁寧にリンクなども付けてくださりありがとうございます。FLIP流体だけでなく次Pyroを触る機会などにも参考にさせていただきます!
  • Quick Links