Houdini17にてBulletのSoft Constrainを完全利用できるようになりました。
このSoft Constrainを実際に使ってみたいと思います。
こちらも新しく追加したRBD Material Fractureを使用し、ジオメトリを壊します。
タブを確認すると、Constrainsタブがあり、デフォルトでApply Constrain Propertiesが有効になっていることがわかります。
ちなみにRBD Material Fractureには2つのアウトプットがあります。
一番左はRenderingに使用されるジオメトリで、Interior Detailなどを追加していればその状態を出力します。
真ん中の出力はConstrainsのデータが出力されます。
一番左はProxy Outputです。Interior Detailなどが追加されていても衝突などを計算するために簡易データを出力することができます。
計算はこの3つ目のプロキシを使用して行っています。
Dop NetでGravityを追加して計算を行うと
ジオメトリはそのまま壊れます。ここにSoft Constrainを追加し、ひびが入り壊れつつもつながっているような状態を作りたいと思います。
マニュアルを確認すると・・
- Spring Constrainと同様に、Soft Constrainはアンカー間の距離に比例する力だが、2つのコンストレインの種類の間には動作にいくつかの違いがある
- Soft Constrainは、はるかに安定しており、コンストレイン条件が煩雑な状況(例えば、非常に堅いばねまたは小さな質量の物体)でシミュレーションが爆発してしまうことがない。
- Soft Constrainのパラメータは、質量に依存しない。色々な質量のオブジェクトを使用したコンストレインネットワークでの動作調整がはるかに簡単。
ただし、Bullet Solverでしか動作しないため注意が必要です。
それではSoft Constrainを追加していきます。
RBD Material FractureのプロパティでConstrainsタブを開きます。
この中に「Switch to Soft Constraint when Broken」を有効にします。
これを使用すると、Bullet Solverがグルーコンストレインが壊された場合、Soft Constrainに切り替わります。
Dop Netに入ります。これがSoft Constrainを追加する前の状態です。Bullet Solverで破壊されるまでジオメトリをつないておくGlue Constrainがあります。
ここに、Bullet Soft Constrain Relationshipを作成します。
その2つmergeにつなぎ、Constrain networkに接続します。
この状態で再生すると、下記のようにSoft Constrainによりジオメトリがつながっていることがわかります。
Bullet Soft Constrainのプロパティを確認すると、Data Nameに「Soft」と記述があります。これがGlueから切り替わった際のデータ名です。異なる名前で作成している場合はこちらを変更してください。
パラメーターを調整し、結果を変更します。
最後にTransform Pieceを追加し、計算したProxyとレンダリングするジオメトリを置き換えます。