ソリッドボディと非ソリッドボディ


このチュートリアルでは、Phoenix FDでソリッドボディと非ソリッドボディをMayaに使用するための基本的なワークフローについて説明します。最後に、ソリッドボディと非ソリッドボディを使用して、相互作用をさらに制御し、シミュレーションをカスタマイズすることができます。

このチュートリアルを進めるには、Phoenix FD for Mayaプラグインがインストールされている必要があります。YouTubeに投稿されたクイックスタートビデオと照らし合わせながら進めてください。


このチュートリアルで使用するファイルはここからダウンロードできます。注:シーンファイルはMaya 2014以降で動作します。

このチュートリアルでは、シミュレーションでソリッド(Solid)ボディと非(Non-Solid)ソリッドボディを使用して、シミュレーションパーティクルを柔軟に制御する方法を学びます。まず、シンプルなシーンから始め、同じ概念を海に衝突する宇宙船に適用します。

空のシーンから始まり、球体を作成します。スケールアップして作業するのが簡単です。正確なサイズはここでは重要ではありません。


球が選択された状態で、Phoenix FD シェルフのLarge-scale Smoke simプリセットアイコンをクリックします。


アトリビュートエディタで、Gridを開きます。シミュレーション解像度を下げるためにCell Sizeを調整してTotal Cells が5000程度になるようにします。これにより、より迅速なフィードバックが可能になります。この場合、Cell Sizeの値を0.660にすると望ましい解像度を生成します。


Adaptive Gridを無効にします。X / Y / Z Sizeにシミュレータのサイズ20、 60、60。このようにして、非常に低い解像度で素早くフラットなシミュレーションを行います。


シミュレーションボリュームは次のようになります。


Dynamicsのロールアウトを開き、Steps Per Frame を1.0に変更してフィードバックを速くします。


キューブをスケールさせ長方形のボックスを作成します。以下に示すように、球の上に置いて、わずかに右側に置きます。


再生範囲の終了時間を1200に調整すると、より多くのフレームを再生できます。

次に、ツールバーの[Start Simulation]ボタンをクリックします。次のいくつかのステップを続行しながら、シミュレーションを実行します。

煙がシミュレーションとどのように相互作用するかをよりよく確認するには、Previewロールアウトに進みます。下のようにPreviewセクションのEnable GPU Previewをオフにします。


次に、Previewセクションの上部までスクロールし、Draw Just a SliceAlong X axisに設定します。


これで煙がボックスと衝突して周りを回っていることをはっきりと見ることができます。この動作をさせるために何もする必要はありませんでした。これは、デフォルトではメッシュはPhoenix FDによってソリッドオブジェクトと呼ばれるものとして扱われます。つまり、オブジェクトは流体の動きの障害になります。


ここでのアドバイス:使用したいメッシュが閉じられていることを確認してください。平面のジオメトリを使用しないでください。フラットに見えるジオメトリを使用する必要がある場合は、シミュレーション内で適切に計算されるように、少しの厚みつける必要があります。

視認性を高めるには、キーボードの4を押してワイヤフレームモードに切り替えます。オブジェクトの内部が空であり、以下に示すように、煙がボリュームを周り込みます。


キューブを選択し、アトリビュートエディタで、Extra Phoenix FDアトリビュートを展開します。デフォルトで有効になっているSolidのチェックボックスがあります。それをオフにします。


煙はボックスの中を通ります。このボックスは非ソリッドです。つまり、ボックスはシミュレーションの一部ですが、ボックスとは相互作用しません。


オブジェクトをシミュレーションと相互作用させないようにする別の方法があり、この方法では異なる結果が得られます。シミュレータを選択した状態で、Scene Interactionのロールアウトに移動します。Interaction Setでシミュレーションと相互作用するオブジェクトが決まります。Exclude Listが有効になっている場合、Interaction Setは、どのオブジェクトがシミュレーションと相互作用しないかを指定するものになります。


私たちが今あるような非ソリッドのオブジェクトを持つことと、相互作用からオブジェクトを除外することの間には違いがあります。シーン内のような非ソリッドのオブジェクトは、Force(Body Forceのアトラクター)やSourceオブジェクトによるEmitterとしても使用できます。Render CutterやBirth(またはignition)ボリュームなどとしても使用できます。一方、Scene Interactionから除外されたオブジェクトは、シミュレーションとまったく相互作用しません。

今度は、非実体のボックスの中の煙を消滅させます。キューブを選択し、追加のPhoenix FD Attributesにアクセスします。Clear Insideオプションを有効にします。下の画像には、影響を受けるシミュレーションのさまざまなチャネルがリストされています。このリストを編集して、非ソリッドオブジェクトの内部で消去される内容を制御できます。


ボックス内の煙がなくなったことが分かります。


先のソリッドオブジェクトとClear Insideを持つこの非ソリッドオブジェクトの違いは、流体はソリッドオブジェクトの周りを移動しますが、非ソリッドオブジェクトの場合は貫通することです。このようにして、流体の挙動に影響を与えずに、シミュレータの特定の領域からSmoke、Temperature、Liquidなどのチャンネルやパーティクルを消去するために、Non-solidsオブジェクトのClear Insideを使用することができます。

シミュレーションが続行されている間、最初のものと同じサイズの別のボックスをシーンに作成します。それをコンテナの中で煙の流路上に移動させ、ここに見られるように、内部の煙の一部を捕まえます。


Fire / Smokeシミュレーションコンテナ内にソリッドオブジェクトを作成または移動するとき、その内部にFluidチャネルをトラップできます。しかし、これはLiquidシミュレータには適用されません。

このボックスをもう少し動かしてみると、以前のボリュームの中に閉じ込められた煙の一部がまだ内部に詰まっていることがわかります。デフォルトでは、すべてのオブジェクトがソリッドオブジェクトとして扱われるため、煙は内部から逃げることができないからです。


その2番目のキューブを選択し、Extra Phoenix FD Attributesのプロパティを開きます。Inside Clearをオンにすると、そのボックスの中から煙が消えます。





最後に、最初のボックスを選択し、Clear Insideを無効にして、煙が右端に移動するようにします。


左側のボックスはソリッドオブジェクトで、右側のボックスは非ソリッドオブジェクトです。その意味を見てみましょう。シミュレータ内の非ソリッドボックスを移動してもシミュレーションの動作は変わりません。


しかし、ソリッドオブジェクトボックスを移動すると、煙シミュレーションに影響し、以下のように煙が押し出されます。


Motion Velocity Effectパラメータを使用して、移動するソリッドがPhoenix FD Propertiesからシミュレーションにどれだけ強く影響するかを制御できます。次の例でこれを見ていきます。


宇宙船が水の中に墜落する場面にこれらの同じ概念を適用しましょう。Motion Velocity Effectがどのように機能するかを確認し、シミュレーションで泡や飛沫を追加します。
ダウンロードしたシーンファイルspaceshopCrash_begin.mbを開きます。宇宙船を動かして海に衝突させます。


シーンの海洋ジオメトリの平面(oceanSurfaceReference)は、アニメーションのブロッキングの為に使用され、プレビュー目的にのみ使用されます。プレーンを選択しCtrl + Hを押して非表示にします。


次に、Phoenix Oceanを作成します:宇宙船を選択し、PhoenixFDツールバーからOceanプリセットを選択します。

シミュレータを宇宙船の軌道に沿って再配置します

シミュレータを選択し、Gridを開きます。X / Y / Z Sizeが250、100、250の小さいシミュレーショングリッドを作ります。


シミュレーションの合計セル数を約50万に保つには、セルサイズを約477に増やします。


その後、必要に応じてシミュレータの位置を調整して、宇宙船がスプラッシュダウン全体の内部にとどまるようにします。

Oceanプリセットは、シミュレーションのジオメトリが大きな海洋船であることを前提としています。宇宙船はこれよりはるかに小さいので、Gridのロールアウトでは、Units Scaleを0.04に減らしてください。


液体のプレビューを表示させるために十分な長さのシミュレーションを開始して停止します。シミュレーションの海面が、非表示にしていたジオメトリと一致するようにして、衝撃を正確にさせます。


アウトライナーでoceanSurfaceReferenceプレーンを選択し、Shift + Hを押して、oceanSurfaceReferenceプレーンを再表示します。

水位が一致するようにシミュレータの位置を調整します。海洋ジオメトリ平面を再び隠してから、シミュレーションを開始します。

70フレーム目あたりでシミュレーションを停止します。タイムラインをスクラブして結果を確認します。宇宙船が墜落すると、かなり小さな飛沫が発生しますが目的の大きさではありません。

船のアニメーションやクラッシュの速度を変更したくないので、シミュレーションが大量のスプラッシュを生成するように調整する必要があります。ここでMotion Velocity Effectアトリビュートを使います。あたかも船の速度が増加したかのようにシミュレーションを行います。

宇宙船のメイングループには、Extra Phoenix FD Attributesはありません。代わりに、船を構成する各オブジェクトのシェイプノードにあります。3つの宇宙船のパーツごとに、Extra Phoenix FD Attributesのロールアウトを開き、 Motion Velocity Effectの値を5に設定します。これは、船がアニメーションより5倍速く動いているかのように、船が飛沫(Splash)に影響することを意味します。



シミュレーションを開始します。それははるかに大きく、より劇的なスプラッシュを作成することに注意してください。45フレーム辺りでシミュレーションを停止し、アニメーションをスクラブして新しい飛沫を確認するとシミュレータの外に出ているパーティクルがあることがわかります。


シミュレータから出るSplashとFormのパーティクルが必要ないとします。それらは最終結果にほとんど影響を与えず、シミュレーションの計算を遅くする可能性があるので、グリッドから離れると削除するようにします。

キューブを作成し、パーティクルが飛び出しているシミュレータの上部をカバーするようにスケーリングします。グリッドに重なるようにボックスを配置し、完全に覆うようにします。パーティクルの削除は、ボックスとシミュレータが重なっている場合にのみ行われます。シミュレータを離れるとパーティクルに影響はありません。


シミュレーショングリッドの他の側面にも同様のオブジェクトが作成されることに注意してください。液体のパーティクルに影響を与えずに泡と飛沫だけを削除するようにします。

キューブを選択した状態で、Attributes> Phoenix FD> Phoenix FD Node Propertiesに移動して、Extra Phoenix FD Attributesを追加します。

Solid Objectのチェックを外すと、ボックスはシミュレーションに影響しません。Clear Insideをオンにしてから、「Foam,Splashes」を入力して、シミュレーションの特定のパーティクルの種類のみをクリアします。


シミュレーションをもう一度開始して、この面を通過していたパーティクルがボックスに接触したときに消えることに注意してください。まだ底と側面から来るいくつかの不正なパーティクルがあるので、常にそれら管理するために追加で“キルボックス”を作ることができます。

レンダリングのためのシーンを準備します。まず、キルボックスのRender Statsを調整しレンダリングに含めないようにします。レンダリング詳細ロールアウトを開き、シャドウの投影、シャドウの受像、一次可視性、反射に現れる、屈折に現れるを無効にします。

カメラビューに切り替えて、レンダリング時のスプラッシュのルックを見てみましょう。レンダリングをテストするための良いフレームを探します。ここでは、42フレーム目を使用します。


Outlinerで、最初のPhoenix Particle ShaderオブジェクトPhoenixFDPrtShader1を選択します。これは、Foamパーティクルのレンダリング方法を制御します。アトリビュートエディタでPhoenixFDFoamタブが選択されていることを確認し、Renderingを開き、[Mode][Points]に変更します。これにより、レンダリングがかなり高速化されます。次にSplashパーティクルのレンダリングを制御する他のPhoenixパーティクルシェーダ、PhoenixFDPrtShader2と同じ 操作を行います。


Pointsを開き、Point Aplha0.3Shadow Strength20を設定します。これにより、レンダリング時にパーティクルがより不透明になり、より見栄えが向上します。両方のパーティクルシェーダでこれを繰り返します。


アウトライナーからplace3dTexture1ノードを選択します。海の質感をコントロールします。トランスフォームアトリビュートで、スケールを約半分に減らし宇宙船のスケールに合うようにします。


次にレンダリングの設定を見てみましょう。V-Rayタブに移動しとImage samplerを開きます。Sampler TypeBucketまたはProgressiveのどちらかを選びます。1つのフレームをレンダリングする場合は、Bucketを使用する方がよいでしょう。ただし、シーケンス全体をレンダリングする予定がある場合は、Progressiveにアドバンテージがあります。

Max subdivsを4に減らしますが、高品質にレンダリングする場合は少し増やしてください。ノイズのThresholdを0.05に設定します。 Progressiveサンプラーでレンダリングしていて、レンダリング時間に関係なくSubdivsとThresholdを一致させる場合は、Max render timeを0に設定します。


GIのタブを開き、とGIをオンにします。Primary bouncesのEngineにBrute forceSecondary bouncesLight cacheをそれぞれ設定します。

\\ 
テストフレームをレンダリングします。レンダリングに大きな白っぽい部分(下に表示されているようなもの)が出てきたら、その問題を簡単に解決する方法があります。
 

VRayシェルフからV-Ray Planeを作成し、アトリビュートエディタからLocatorスケール値を1000などに増やして、ビューポートでの表示と選択を容易にします。


次に、パースペクティブカメラから、下のように、Planeを下に移動してSimulatorのボリュームの下に配置します。

Planeを右クリックしてメニューから新しいマテリアルの割り当てを選択し、ウィンドウからVRayMtlをクリックします。



あとはマテリアルのDiffuse Colorを黒に設定するだけです。


今度は、シーンの中で海洋の屈折の問題を引き起こすのを助けるために、そのボリュームの背後に黒い背景があります。再度レンダリングを開始すると、以下に示すようなものになります。水の白っぽい部分は修正されていますが、グリッドの解像度はまだ低いです(このチュートリアルのレンダリング時間を減らす為)。

結果に満足すれば、シミュレーションの品質を高め、再度シミュレートしてレンダリングすることができます。GridロールアウトのCell Sizeを小さくすると、解像度を上げることができます。およそ2000万のTotal Cellsは良い結果を生成することができます。また、Dynamics内のSteps per Frameの値を増やしてスムーズなシミュレーションを作成します。

  • 最終更新: 2018/07/17 09:11
  • by oaksup3