このチュートリアルは、「【初心者向けHoudiniトライアル007】Houdiniでガラスを粉々にしてみよう」の続きです。
使用するHoudiniバージョン
Houdini 18.0.460
外的要因が衝突する場所を調整しておく
Sphereは設定したVelocityによりガラスの板に衝突します。
そこで初期位置を修正し、ガラスのインパクトポイント(蜘蛛の巣の中心)にSphereが衝突するようにしましょう。
Sphereの初期位置
衝突位置
ガラスに破片を追加する
ガラスに分割が少ない場合は、RBD Material FractureのCracksタブで調整します。
このサンプルではRadial Crack NumberとNumber Varianceを下記の値にしています。
破片に設定を追加する
前回の設定のままシミュレーションを再生すると、砕けた破片すべてがシミュレーションしていることがわかります。
しかし基本窓ガラスは枠にはまっており、衝突した場所(インパクトポイント)から離れた個所まで粉々にするにはかなりの力がかかる必要があるはずです。そのため特定の破片はシミュレーションから外したいと思います。
ジオメトリがdop内で他のオブジェクトからの影響かうけるかどうかはactiveというアトリビュートによって決定します。
- RBD Bullet Solver内に入り、Geometry Spreadsheetを確認します。
rbd_object > Geometryを選択すると各パックプリミティブのアトリビュートを確認することができます。
この中にactiveというアトリビュートがあり、これがすべて1に設定されています。
これによりすべてのパックプリミティブが他のオブジェクトの影響を受けるようになっています。つまり、このactiveアトリビュートをRBD Bullet Solverに入力する前の段階で0と設定することで、そのパックプリミティブは他からの影響をうけないようになります。
このようにRigid bodyに必要な設定をあらかじめ設定する方法として前回も使用したRBD Configure ノードがあります。
まず、activeアトリビュートを0に設定したいパックプリミティブをGroupに登録します。
- assembleとgroupromoteの間にgroupノードを追加します。
- Groupノードのプロパティにて、Group Nameをtopにします。
- Base Groupの選択用アイコンをクリックし
- 下記のようにインパクトポイントより上にある破片をランダムに選択します。この時、破片と破片の間の角にできた切れ端は選択しないようにします。
- 選択後、Enterキーを押すことで選択したパックプリミティブがBase Groupに登録されます。
このtopグループを使用して、RBD Configureを設定します。
- RBD Bullet Solverの直前にRBD Configure を追加します。
- RBD Configureノードのプロパティにて、Groupにtopを指定します。
- Bullet DataのActiveを有効にして、0にしてください。
これでパックプリミティブにactiveアトリビュートが設定されました。
RBD Bullet Solverの中にはいり、Geometry Spreadsheetを確認します。
- Geometry Spreadsheetにて、rbd_object>Geometryを選択します。
- activeアトリビュートをクリックし並び替えを行うと値が0に設定されているパックプリミティブがあることがわかります。
activeアトリビュートによる結果を確認してみましょう。
- RBD Bullet Solverの中にいる状態でシミュレーション再生します。
上部のグラスをシミュレーションから外したため、インパクトポイントに近い部分の破片は吹き飛びますが、インパクトポイントから遠く、上部のガラスとつながったままの破片は飛ばされず保持されています。
次に、ほかのグループには異なる設定を追加したいと思います。
RBD Material Fractureで分割を作成したときにいくつかグループが作成されていたかと思います。その中にglass_chipというグループもありました。
このグループをビューポートで確認したいと思います。
- RBD ConfigureノードにDisplayフラグを設定した状態で、ViewportのDisplay Group and attribute listをクリックします。
ビューポートの左上にグループリストが表示されます。
その中にglass_chipというグループがあることを確認します。
glass_chipに黄色が割り当てられており、ビューポートをみるといくつかの破片が黄色で表示されます。
Chipは大きな破片の角から作成しているため、破片と破片の間にはChipがはさまっています。
このChipに大きな破片がひっかかってしまっているようです。
- RBD ConfigureノードでAttributesの横の+をクリックします。
- 2つ目のタブが追加されるのでクリックして選択します。
- Groupの横のドロップリストボタンをクリックし、表示されたリストからglass_chipsを選択します。
- Collision shapesを開き、Collision Paddingを0にします。
- Shring Amountはオフにしてください。
- シミュレーションを再生します。
ちなみに壊れ方はSphereが衝突した場所やtopグループへ登録した破片により変わってきます。そのため、壊れ方が上記の画像と違う場合でも問題ありません。
最後にパフォーマンスを上げるかもしれない設定を追加します。
- AdvancedタブでBullet Solverを開き、Sleeping Timeを1に設定します。
ここで指定した時間内にLinear ThresholdとAngular Thresholdで指定した値未満になったら、その破片はスリープ状態になります。
Linear ThresholdとAngular Thresholdは、Solver>Bullet Objectにて指定しています。
今回は下記まで完成しました。