Warning: Use of undefined constant user_level - assumed 'user_level' (this will throw an Error in a future version of PHP) in /home/users/1/indyadmin/web/houdinifx/blog/wp-content/plugins/ultimate-google-analytics/ultimate_ga.php on line 524
こんにちは、篠島です。この間のコリジョンの説明の続きで、ジオメトリがデフォームしている場合の注意点を書いておきたいと思います。
今回のサンプルファイルです。
deforming_geometry.zip
もしオブジェクトが変形している場合、デフォルトでは最初のフレームのジオメトリを元にシミュレーションがされますが、Use Deforming Geometry をONにすることでオブジェクトの変形を保ったままシミュレーションすることが出来ます。これはどういうことかというと、毎フレームSOPレベルのノードを処理してジオメトリを計算し、さらにそこからSDFボリュームを計算しなければなりません。
下のGIFアニメーションは板を回転させているだけの極単純な変形ですが、Uniform Divisionsを50に上げています。それでもジオメトリが回転する時にSDFボリュームにところどころ隙間が出来てしまっているのが分かるかと思います。この隙間を埋めるためにさらにUniform Divisionsを上げると更に処理が重くなるという結果になります。
そこで下のSOPネットワークのように予めIsoOffsetによってボリュームを作り、TransformによってSDFボリュームをSOPレベルで回転させます。そして作ったSDFボリュームをDOP内で読み込むことが出来ます。Proxy Volume で予め作ったSDFボリュームを指定し、ModeをVolume Sampleにすると自分で好きなSDFボリュームに置き換えることが出来ます。この時 Uniform Divisionsは完全に無視され、自分がSOPで指定した解像度のSDFになります。下の図はUniform Divisionsが関係ないことを示すために1にしてあります。
自分で作ったSDFボリュームを読み込んだ結果が下のGIFアニメーションです。隙間が埋まって綺麗にSDFボリュームでジオメトリが表現されているのが分かります。GIFアニメーションからだと分かりませんが、毎フレームSDF計算しなくて済むために実際に処理する速度も早くなっています。
下のようなシミュレーションを作ってみたので、サンプルシーンを読み込んでみて試してみてください。速度の違いが体感できるはずです。FLIPシミュレーションする時にこのテクニックは非常に役に立つので覚えておきましょう。