こんにちは篠島です。前回に引き続きDOPの説明です。今回はDOPのデータの構造がどのようになっているかを見ていきたいと思います。
カテゴリー別アーカイブ: DOP
DOP基礎 1 リジッドボディ
こんにちは。篠島です。これから数回に渡ってDOPシミュレーションについて書いてみたいと思います。DOPはあまりにも複雑でどこから始めたらいいのかが難しい所ですが、今回はメニューから作られるDOPのリジッドボディでシミュレーションを説明してみたいと思います。
POPの基礎 8 POPノードをリジッドボディで使う
こんにちは篠島です。
POPに関しての基礎はほとんどカバーしたので、今回は応用としてPOPノードをBullet Solverに繋いでリジッドボディをパーティクルのようにコントロールする説明です。
Houdini14で追加されたDOPノード
群衆とGrain(粒)の処理に関するDOPが増えています。
Agent Look At | エージェントの頭が向くオブジェクト/位置を選択します。 |
Agent Look At Apply | エージェントの頭がターゲットを向くように動かします。 |
Agent Terrain Adaptation | 二足歩行のエージェントの足を地形に順応させます。 |
Agent Terrain Projection | エージェント/パーティクルポイントを地形に投影します。 |
Crowd Solver | 独自のステアリングフォースに基づいて群衆エージェントを更新し、アニメーションのクリップ再生を調整します。 |
Crowd State | Crowd Stateを定義します。 |
Crowd Transition | Crowd State間の移り変わりを定義します。 |
Crowd Trigger | Crowd Triggerを定義します。 |
Crowd Trigger Logic | 複数のCrowd Triggerを組み合わせて複雑なトリガーを構築します。 |
Data Only Once | ワイヤーの数に関係なく、オブジェクトにデータを一度だけ追加します。 |
Gas Curve Force | カーブからフォースを生成します。 |
Output | DOPシミュレーションの終点としてマークします。 |
POP Float by Volumes | 液体シミュレーションの表面上にパーティクルを浮かせます。 |
POP Grains | 砂粒の相互作用をパーティクルに適用します。 |
POP Spin | パーティクルにスピンを設定します。 |
POP Spin by Volumes | Velocityボリュームの渦度を利用してパーティクルをスピンさせます。 |
POP Steer Align | エージェント/パーティクルに近隣と揃うようなフォースを適用します。 |
POP Steer Avoid | エージェント/パーティクルに他のエージェント/パーティクルと衝突しないようにフォースを適用します。 |
POP Steer Cohension | エージェント/パーティクルに近隣に近づくようなフォースを適用します。 |
POP Steer Custom | エージェント/パーティクルにVOPネットワークによるフォースを適用します。 |
POP Steer Obstacle | エージェント/パーティクルにStaticオブジェクトと衝突しないようにフォースを適用します。 |
POP Steer Path | エージェント/パーティクルにパスカーブの方向に応じたフォースを適用します。 |
POP Steer Seek | エージェント/パーティクルにターゲットへ向かわせるフォースを適用します。 |
POP Steer Separate | エージェント/パーティクルにお互いを引き離すフォースを適用します。 |
POP Steer Solver | Crowd Solverで独自のステアリングフォースを統合するために内部的に使用されます。 |
POP Steer Turn Constraint | エージェントVelocityが現在の進行方向から特定の角度範囲内にしか向かないように拘束して、エージェントが逆戻りしないようにします。 |
POP Steer Wander | エージェント/パーティクルにランダムな動きをするフォースを適用します。 |
POP Velocity | パーティクルのVelocityを直接変更するノード。 |
Spring Network Constraint | SOPジオメトリを使用してソフトボディオブジェクトをペアで一緒に拘束します。 |
Spring Network Relationship | ジオメトリに基づいたスプリングリレーションシップを定義します。 |
Houdini14新機能~ダイナミクス~
新しいパーティクル粒
- Houdini 14では、VEXで実装された新しいPosition-Based Dynamics(PBD)POP Grainsソルバが含まれています。 これは、特に砂のような粒状の材質のシミュレーションに適しています。
- 非常に素晴らしい堆積の挙動。
- Clumping(凝集)によって湿った砂やセメントのシミュレーションが可能です。
- プリミティブとして表現された明示コンストレイントによって、セットアップと制御が簡単です。 崩れかけた砂と引きちぎれそうな鎖やシートや固体物のシミュレーションが可能です。
- 剛性ボディとの一方向の作用。
- 高い制御性。
- 異なる材料特性を持つパーティクル間での安定した相互作用。
- OpenCLを使用したGPUアクセラレーションをサポートしています。これにより通常では2-5倍高速化されます。一部の機能はOpenCLパスでサポートされていません。 詳細は、POP Grainsのドキュメントを参照してください。
Bulletソルバ
- 多くの部分で大幅にパフォーマンスが改良されました。色々な状況下でシミュレーションが10-20倍に高速化されています。
- 衝突検出がマルチスレッド化されました。
- 大規模オブジェクトとのシミュレーションに対して改良されたスケーラビリティ。
- Convex(凸)ハルの計算が約2倍高速化されました。
- 大量に初期段階で相互貫通または近接したパックオブジェクトとのシミュレーションに対するパフォーマンスが改良されました。
- Bulletソルバは、アニメーションまたは変形するジオメトリを持つパックプリミティブに対応しました。 RBD Packed Objectノードの Create Active Objects トグルは Initial Object Type パラメータに変わり、 このパラメータを使うことで
active
,animated
,deforming
Pointアトリビュートの初期値を設定することができます。 - サブステップ時の動的オブジェクトの補間が改良されました。
- 強いDrag(抵抗)フォースの安定性が改良されました。 Bulletソルバは、サブステップ毎にフォースを再評価するので、ソルバのサブステップ数(DOP Networkのサブステップではなく)を上げると、結果がより安定するようになりました。
- 新しい Constraint force mixing パラメータは、コンストレイントのデフォルトのCFM値を制御します。
- RBD Glue Objectシェルフツールが追加されました。このツールは、RBD Packed Object DOPまたはRBD Fractured Object DOPと共にGlue Constraintネットワークを作成します。
- Bulletソルバは、Collisionリレーションシップを持たないDOPオブジェクト間の拘束に対応しました。
speedmin
,speedmax
,spinmin
,spinmax
Pointアトリビュートを使えば、オブジェクトの線形Velocityや角速度を制限することができます。POP Speed Limitノードを使えば、それらのアトリビュートをセットアップすることができます。collisionignore
Pointアトリビュートを使えば、特定のDOPオブジェクトや(collisiongroup
Pointアトリビュートの値を使って)パックプリミティブのグループに対して衝突を無効にすることができます。 このアトリビュートは、POP Collision Ignoreノードによって生成することができます。dead
Pointアトリビュートを使えば、ソルバが起動した時に削除するオブジェクトをマークすることができます。 このアトリビュートは、POP Killノードによって生成することができます。- RBD Packed Objectノードに Overwrite Attributes from SOP パラメータが追加されました。 このパラメータには、フレーム毎にソースSOPジオメトリから取得するPointアトリビュートのリストを指定します。
- BulletソルバとHard Constraint Relationshipノードに接触拘束とピン拘束の柔らかさを制御するパラメータが追加されました。
- RBD Packed ObjectsのBullet Dataパラメータすべてを、それらのパラメータと同じ名前のPointアトリビュートで上書きすることができます(例えば、
bullet_georep
を使えば、オブジェクト毎に別々の衝突形状を指定することができます)。 - Bulletソルバは、
pointinstancetransform
Intrinsicが有効になったパックプリミティブに対応しました。 - Bulletソルバは、接着ボンドが外れた時にFeedback Impactを考慮します。
- Bulletオブジェクトは、布、ソリッド、ワイヤーのオブジェクトを含むいくつかのタイプのアフェクターと衝突することができます。
- RBD Packed Objectsの
P
アトリビュートを変更すると、正しくオブジェクトを移動させます。trans
アトリビュートはもはや使いません。 - Bulletソルバは、“geometry representation”がconcave(凹)の時または“create convex hull”が有効な時にキャプチャー領域から衝突形状を構築することができるようになりました。
FLIP
- 変形サーフェスとの衝突が改良されました。
- 粘度の処理が高速高精度化されました(GPUサポートで5倍高速化)。
- ディテールを失なうことなく流体ボリュームをより滑らかにします。
- OpenVDB 3.0によって、高解像度で疎らな流体構成のスケーラビリティが良くなりました。
- 可視化がデフォルトでスプライトからパーティクルになりました。
- Reseeding時により滑らかな飛沫が可能になりました。
- Whitewater Sourceジオメトリノードに Cache タブが追加されました。これはアトリビュートのマッピング前でポイントの間引きとサンプリングの後に対象となるポイントをディスクへ保存することができ、大きなシミュレーションに対して放出基準の微調整を高速化することができます。また、シミュレーションボリュームのみに対する2番目の入力と、 Output points only オプションがあり、パーティクルとボリュームを別々に保存することができます。
- 改良されたWhitewater: より豊かな泡沫と分布。
- 極端なスケールの堅牢なハンドリング。
- Points from VolumeSOPとParticle Fluid TankSOPは、新しいScatterSOPの機能を利用して、その Relax iterations パラメータが使えるようになっています。 これにより、FLIPシミュレーションでより平坦な表面の作成が可能です。
- FLIPツールの可視化がスプライトの代わりにパーティクルがデフォルトになりました。
- FlIPソルバのReseedingには、新しい Random seed パラメータがあり、時間軸で変化するランダム関数を使用することで新しいポイントポジションを生成します。これはパーティクル分布における筋の発生が起こりえるバグを修復します。
- FLIPソルバには、動かなくなったパーティクルを削除するための Kill unmoveable particles オプションがあります。
- FLIPソルバの Smoothing パラメータが Velocity smoothing に変わり、デフォルト値が0.3から0.1に変わりました。
- Whitewater Emitterのパーティクル発生のデフォルトは、余分な飛沫が出ないように変更されました。 Velocity offset を上げることで、以前のバージョンと同様の飛沫を表現することができます。
Solids/FEM/Cloth
- シミュレーションが2-3倍高速化されました。
- メモリ使用量が10-15倍小さくなりました。
- Solid Objectノードに Initialize behavior パラメータがあり、そこには“rubber”, “organic tissue”, “oak wood”, “cork”などの材質プリセットのメニューがあります。
- Finite Elementソルバで組み込みワークフローが改良されました
- Cloth ObjectとSolid Objectの両方に対して動作します。
- ポリゴンの直接的な組み込みに対応しました。
- 組み込みポジションは、重心的ではなく滑らかです。
- 破片がシミュレーションされるメッシュからはみ出していても、Embeddingが動作します。
- 組み込まれたポリゴンと四面体がシミュレーションされるジオメトリと一緒に破壊されます。
- 初期整列は頂点毎に指定されます。
- シミュレーションされるジオメトリ内の繋がったコンポーネントを考慮します。
- 組み込まれたジオメトリにVelocity Pointアトリビュートを書き込みます。
- 組み込まれたジオメトリ内の破片部分とシミュレーションされるジオメトリ内の破片部分とのマッチングをサポートしています。これはどちらにも
fracturepart
アトリビュートを必要とします。
- Finite Elementソルバは破壊用のサブステップをサポートしています。
- Finite Elementソルバは、
restP
アトリビュートのRest Stateを保存して、Mantraのrest
アトリビュートとの干渉を回避します。 - 破壊の挙動が良くなりました。
- Finite Elementソルバは、ポリゴン(Cloth)と四面体(Solid)の両方に対して、エネルギーとエネルギー散逸密度を含む頂点アトリビュートを追加することができます。 これは副次的な効果と可視化を容易に追加することができます。
- Finite Elementソルバは、
quality
Primitiveアトリビュートを四面体に追加することができます。 このアトリビュートは、その四面体がシミュレーションにどのように適合できるかを意味します。 このアトリビュートを可視化することで、メッシュ内の問題箇所を発見することができます。 - Solid Objectシェルフツールは、シャープなエッジを持つソースジオメトリに対してより良い四面体メッシュを作成します。
- Finite Elementソルバは、
fracturecount
頂点アトリビュートを保持します。このアトリビュートは、ソルバが他の頂点から頂点を破壊した回数です。 - Solidオブジェクト内の四面体の大きな変形が、より堅牢になりました。
- Cloth Object用の平面的なフォースモデルは、Solid Objectと一致します。
- 薄いサーフェスに対するFEMシミュレーションでは、薄い層の四面体を作成する必要なくポリゴンを直接シミュレーションすることができます(Strong Bendモデルを使用)。
煙と炎
- Gas Curve Forceノードは煙をカーブに沿わせることができるので、非常にかっこいい効果を表現することができます。
- Pyro SHOPのパラメータの順番が変わりました( Noise output type と Space のパラメータが入れ替わっています)。
- Gas Substepノードには、フレーム毎にCFL Conditionを評価するオプションと最大サブステップへ量子化するオプションが新しく追加されました。
- Gas Advectノードは、より高次元な移流メソッドのTrace RK3とTrace RK4に対応しました。 FLIPソルバは、ほぼ同じ速度でより精度の高い移流をするために、内部的により高いデフォルトのParticle Advection CFLの値を0.75にしてRK3に切り替えました。
- Gas Advect CLノードがTrace Midpoint, Trace RK3, Trace RK4のメソッドに対応しました。 デフォルトのTrace advection kernelは、自動的にIntel OpenCL 2014ドライバによってアクセラレーションされ、PyroとSmokeのソルバのパフォーマンスが約20%速くなります。
- Vortextフィラメントのシミュレーション用のノードがいくつか追加されました。これらのノードは煙草の煙などの効果に使用することができます。
- Gas Viscosityソルバが最適化され、32または64ビットの精度を指定するパラメータが新しく追加され、OpenCLに対応しました。
- Gas Advect FieldノードとSmokeソルバとPyroソルバのAdvection(移流)制御に Blend パラメータが追加されました。
パーティクル
- Look At POPに、Dragを追加する必要のないようにフォースベースのSpinモード用に新しく Treat as wind オプションが追加されました。 新しいReference direction と Reference up には、整列するオリジナルのパーティクルフレームを指定することができます。
- 新しいPOP SpinとPOP Velocityのノードは、それらと同等のWrangleを記述するよりも便利です。
- 新しいSpin by Volumes POPは、Velocityフィールドの渦巻きの度合いに基づいてパーティクルをスピンさせます。
- 新しいFloat by Volumes POPは、液体シミュレーションの出力内に軽量の浮遊パーティクルを生成します。
- POP Solverは、POP collision detectと同じ方法で衝突を計算するようになりました。 これは若干遅くなりますが、
hitnml
アトリビュートが正しいことを保証します。これは、パーティクルがサーフェス上を滑り始めた時の跳ね返りを回避します。 - パーティクルとの衝突検出は、
pscale
を砂と一致した半径として扱います。
- POP Sourceノードを書き換えました。
- POP Solverにレスポンスを制限するためのグループフィールドが追加されまsちあ。
- POP Solverが
cling
アトリビュートに対応しました。このアトリビュートは、POP property DOPを使用することで設定することができます。 - POP Replicateの Inherit velocity パラメータにマイナス値を指定できるようになりました。
- パーティクルとパックプリミティブ間のジオメトリベースの衝突に対応しました。
hittotal
は、パフォーマンスを良くするために、Impactの回数ではなくサブステップ毎に1回だけ増分されるようになりました。- 滑るパーティクルや停止したパーティクルは、GAS Integratorの衝突に考慮されなくなりました。
- 古い
/part
ネットワークは、ユーザーインターフェースから非表示になりました。
Wire
- WireソルバがFracture(破壊)に対応しました。
- 大きなPOP DragフォースをWireオブジェクトに加えた時のWireソルバでのパフォーマンスが改良されました。
- Wire Objectは、Cloth SolverとFinite Element Solverに、より一致するように再構築され、すべてのソルバと動作するようにツールの開発が簡単になりました。
- Wireソルバは、ジオメトリ上のアトリビュートを使用することで、ターゲット形状を指定できるようになりました。 フレーム毎にそのアトリビュートを更新するには、Wire Objectノードの Import target geometry を有効にしてください。
全般
- キャッシュ化されているフレームをタイムラインでカラー表示します。青は、フレームがメモリ内にキャッシュ化されていることを意味します。 紫は、フレームが
.sim
ファイルから再生されていることを意味します。オレンジは、メモリ内にキャッシュ化されたフレームが古くて、再シミュレーションする必要があることを意味します。
- DOP Networkは、Outputノードで終了するようになりました。つまり、これまでユーザーを混同させていたディスプレイノードフラグの使用を変更しました。 とはいえ、そのフラグはオレンジの“output”フラグとして今でも利用可能です。Outputフラグのノードは、オレンジのインジケータリングを持ちます。
- 現行シミュレーションは、右下にあるResimulateメニューボタンの隣で独自メニューになりました。 ResimulateボタンをShiftクリックすることで、古いシミュレーションをリセットすることができます。 Ctrlクリックすることで、Houdiniがリセットする必要のないシミュレーションまでも、つまりすべてのシミュレーションをリセットします。
- 部分的キャッシュの開放が賢くなりました。
- DOP Networkを“playback-only”に設定することができます。
- ビューポート内でのSDF表示のメモリ使用量が少なくなりました。
- Geometry ROP, Dynamics ROP, Output DOPに Background render オプションが追加され、別の
hbatch
プロセスでレンダリングを起動することができます。バックグラウンド処理は、Houdiniのレンダースケジューラに表示されます。 - Data Only Once DOPのみが、ネットワークがデータ/ソルバに接続するパスの数に関係なく、オブジェクトに一度だけデータ/ソルバを取り付けます。これにより、特定のDOPネットワークトポロジーの処理を高速化することができます。
- 新しいBlosc圧縮のシミュレーションファイル(
.sim.sc
)は、GZIPよりも 高速 です。 - Gasマイクロソルバがより詳細なパフォーマンスモニタのイベントを持つようになり、FLIPとPyroのシミュレーションのパフォーマンストラッキングが良くなりました。
- DOPノードを右クリックして Spreadsheet を選択すると、そのノードのリレーションシップに対して詳細ビューを開くことができるようになりました。
- File DOPとFile Data DOPに、ファイルを書き出す時の中間ディレクトリを作成するオプションが追加されました。
- ステータスバー内のDOPクッキングメッセージは、シミュレーションフレームではなく、グローバルフレームを使用するようになりました。 これは、サブステップがある時やフレーム1の後でシミュレーションを開始する時の混同が減ります。
- Static Object DOPには、ソースジオメトリのグループを指定するパラメータと、ソルバサブステップでソースネットワークを強制的に再クックするパラメータがあります。
- SOP Geometry DOPの Primitive Group パラメータにアドホック(一時的)な数値またはアトリビュートのグループを指定することができます。
- Merge DOPをバイパスにすることで、1番目の入力のみが通過します。
- Details Viewの呼び名が統一され、Geometry Spreadsheetになりました。
他の変更と改良点
- 新しいSOP Solverをチェーン化できるようになりました。 このノードの入力は単一の複数入力接続であり、灰色の入力になっていて、ワイヤーの接続と再接続が簡単になりました(古いバージョンの利用は、ノードのバージョニングで利用可能です。)
- RBD Object, RBD Stateと他のノードは、 Inherit velocity がオンの時に適切に Velocity と Angular Velocity のパラメータを無効にします。
- Rigid Body Solverノードは、メインのソルバステップの前後で起動するマイクロソルバ(例えば、SOP SolverやPOPフォース)用の入力があります。
- RBD Packed Objectノードは、フレーム毎にソースジオメトリからアトリビュートのリストを取得するオプションがあります。 これにより、例えばStaticオブジェクトとActiveオブジェクト間の推移といったよくある状況で、SOP SolverとWranglesの必要性を減らします。
- Glue Cluster SOPは、Constraint Network DOPで必要なアトリビュートすべてを作成します。
- Constraint Networkは、オブジェクトまでのフルパス(例えば、
object2/piece3
)を使用することで、同じ名前の破片の持つ複数のRBD Packed Objects間の名前の干渉を避けることができます。 DOP Import SOPの Use Full Path to Object をオンにしてください。これは、Glue Adjacentシェルフツールで作成されたネットワークではデフォルトで有効になります。 - Bulletソルバは、ピン拘束用の
restlength
アトリビュートを認識するようになりました。これは、スプリング拘束でも同じ挙動をします。 - Constraint Network用の新しいサンプルファイルが追加されました。
- Constraint Networkは、
orient
Pointアトリビュートを使用することで、r
アトリビュートによるオイラー角ではなく、クォータニオンを使用して、アンカーの初期の向きを指定することができるようになりました。 - Constraint Networkノードに、 Use object transform チェックボックスが追加されました。
- Cloth Create Seam, Cloth Match Panels, Cloth Match Seams, Cloth Refineは、現在では単に非表示になったのではなく削除されました。
Houdini14新機能~群衆~
群衆では、HoudiniとMantraの両方が効率的にハンドリングできるように、新しい非常にコンパクトなパックプリミティブタイプ”パックエージェント”が使用されています。
他の便利な機能には、地形の適応、Look-At、豊富なステアリングツール、群衆ソルバ、RBD/Bullet、流体、粒、パーティクルとのネイティブな相互作用、役に立つ入門向けモーションキャプチャーライブラリ、サンプルエージェント、スタジアム内の群衆のシーンセットアップなどを含んでいます。
群衆の作成とレイアウト:
- 新しい効率的な“パックエージェント”プリミティブタイプは、3DビューポートとMantraを含むHoudiniにネイティブに対応しています。
- リグとジオメトリの拡張されたFBXインポート。
- エージェントの動きをベイクし、地形にエージェントを配置する便利なシェルフツール。
- 地形上にエージェントの密度をペイントすることが可能。
- ジオメトリ形状からエージェントの構成を簡単に作成します。
可視化:
- ビューポートとMantraでの高速インスタンス。
- 大量の群衆(2万エージェント)の高速でリアルタイムな表示。
- エージェントの複数の表示オプション(ポイント、パックプリミティブ、リグ、キャプチャー領域など)
- 最適LOD表示
- カメラの視界外を間引き
- GPUアクセラレーションによる変形。
- 任意のエージェント情報の可視化。
- 新しいMaterial Stylesheetsを使用したマテリアルの上書きによる効率的なMantraプロシージャル。
群衆ソルバ:
- 指定されたstate, trigger ,transitionのノードによるDOPベース。
- エージェントとダイナミクス環境:RBD,流体、砂とのわかりやすい相互作用を可能にします。
- 効率的な衝突検出(新しい衝突レイヤーの考え方を使用)
- 他のエージェントや障害物との賢い衝突回避。
- 地形の適応。
- Look-atのサポート。
- Follow-pathのサポート。
- 豊富なステアリング挙動。
- モーションブレンドに柔軟なCHOPベースのツール。
- 典型的なシナリオでの大量の群衆シミュレーションに最適。
- オープンなHDAの実装のおかげで、アーティストレベルで拡張しやすくなっています。
- シェルフにスタジアムとストリートでの群衆のサンプルを用意しました。
出力:
- Bgeo, FBX , Alembicを出力。
- 新しいMaterial Stylesheetsを使用したマテリアルの上書きによる効率的なMantraプロシージャル。
- Arnoldプロシージャル(Solid Angleによる)