activate rbd by geo and texture


こちらで説明した Glue コンストレインを使わずに RBDの active アトリビュートを用いて挙動をコントロールする方法を、ジオメトリを用いた場合とテクスチャを用いた場合の二通りで説明する。

使用したビルド: 15.5.628

1. 元形状の作成

元となる形状を以下の要領で作成する

  1. Create シェルフから Box を実行。ネットワークエディタで、作成された box_object1 の中に入り、box1 ノードの Uniform Scale を 0.2 とする。
  2. box1 と並列し (つまりは box_object1 の中で)、TAB-> Grid を実行。
  3. TAB->Copy を実行。作成された copy1 の左の入力に box1, 右に grid1 を接続する。
  4. grid1 に戻り、
    • Size を 4 x 4
    • Rows と Columns の値をどちらも 21

      これで最初に作った box1 が隙間無く並ぶ。
  5. これを元に RBD (リジッド・ボディ・ダイナミクス) の設定を行う。

2. RBD 初期設定

  1. ネットワークエディタ内で U キーを押すなりして一つ上の階層 (/obj) に上がる。
      あるのは box_object1 ノードのみ。
  2. box_object1 の TY の値を 3 など、原点より上に設定。
  3. box_object1 を選択したまま、Rigid Bodies シェルフから RBD Fractures ツールを実行。
      表示されるダイアログでは "RBD Packed Object" を選択。
  4. Rigid Bodies シェルフから Ground Plane ツールを実行。
  5. 再生する。
      立方体のグループ全体が同時に落下し、地面に当たって砕けるはず。

      つまりこの状態は何もコントロールしていない状態
  6. ネットワークエディタ内で /obj/AutoDopNetwork に入り、最上流の box_object1 (RBD Packed Object ノードタイプ) を選択。
    • Initial Object Type を Create Animated Static Objects に変更
    • Overwrite Attributes from SOP をオンにする

      こうしたことで "active" というアトリビュートが有効化されたが、Initial Object Type が Static (静止) オブジェクトとなったことで、再生をしても落下しない。
  7. 次のステップで静止状態になっているオブジェクトを動的 (Active) にしていく。

3. ジオメトリを使って RBD 設定変更

  1. /obj/box_object1 の中に行く。
  2. ここで TAB-> sphere と球 (sphere1) を作成。
  3. 現在のフレームが1フレーム目であることを確認。Uniform Scale の値を 0 にして、Alt キーを押しながら LMB で Uniform Scale ラベルをクリックしてキーフレームを設定。
  4. 現在のフレームを48フレーム目程度に移動、Uniform Scale の値を 3 にして、Alt+LMB で Uniform Scale をクリックしてキーフレームを設定。
      タイムラインをスクラブすれば球の大きさが変わる。
  5. 同じく TAB-> group とグループノード (group1) を作成。 setup_packed_prims と dopimport1 の間に挿入し、group1 の右側の入力に sphere1 をつなぐ。
    • group1 のパラメータビューで
      • Entry を Points
      • Number タブで
        • Enable を オフ
      • Bounding タブで
        • Enable を オン
        • Bounding Type を Enable を "Bounding Object (points only)" に
    • Attribute Wrangle ノードを作成。出来た attribwrangle1 ノードを group1 と dopimport1 の間に挿入。
      • Group フィールドに group1 を追加
      • Run Over を Points (デフォルトのまま)
      • テキストフィールドに
        i@active =1;
        と記述。これにより group1 の範囲に入ったものが active になっていく。
    • 一つ上の階層 (/obj) に戻り、再生すると次の通り (最初の90フレーム)。

    4. テクスチャを使って RBD 設定変更

    1. /obj/box_object1 の中に行く。
    2. setup_packed_prims の出力から TAB->Attribute from Map を作成。作成された attribfrommap1 にテクスチャを読み込む。ここでは、このテクスチャ (a.png) を使う。
      • Texture Map に上記のファイルテクスチャへのパスとファイル名
      • Export Attribute に Cd および Vector タイプ
      となっていることが重要
    3. attribfrommap1 の出力から Attribute Wrangle ノードを作成。出来た attribwrangle2 ノードで
      • Run Over を Points (デフォルトのまま)
      • テキストフィールドに
        if (v@Cd.x > .5)
            i@active=1;
        else
            i@active =0;
        と記述。Cd.x は、ベクトル型 Cdの最初の数値(つまりはR)。この値が 0.5 以上の場合 1 とみなし (Active になり)、以下の場合、Static のまま。
    4. attribwrangle2 の出力を dopimport1 に接続。
        従来の接続を上書きしても switch ノードで切り替えられるようにしても良い。
      再生結果は以下の通り (最初の90フレーム)。

    まとめ

    • シーンファイル: activate_rbd.zip (40KB) の中の activate_rbd.hip
      • ジオメトリによる有効化を見たい場合は /obj/box_object1/switch1 を 0 にする
      • テクスチャによる有効化を見たい場合は 同パラメータを 1 にする
    • 関連項目

    0 件のコメント:

    コメントを投稿