Houdiniでフリー回転ソルバを作ってみた

ふと、平井氏のTweetに誘発されて作ってみた。
ダイナミクスを使わず、キーフレームによる移動をもとに、正しくボールを転がすソルバです。
思いの外サクッとできたのでちょっと嬉しい。

Houdiniでフリー回転ソルバを作ってみた” への2件のコメント

  1. こんにちは。
    いつもこちらのブログにてHoudiniの勉強をさせていただいております。
    このソルバはどのように作成したのでしょうか。
    クラスメイトと考察しておりますが、うまくいきません。
    内積を上手く使うのではと考えております。
    ご教授いただけましたら幸いです。
    (上手く投稿できているのか不安になり再投稿しました。)

    • ご質問ありがとうございます。

      このソルバのキモは、クォータニオンです。
      ソルバは、移動と回転を分離して考えられるよう以下のように設計しました。

      ■ソルバの設計

       このソルバは、ボールのポイントに行う回転処理のみを行います。

      ・入力
       ボールのジオメトリ
       中心点の位置と移動ベクトル = Trail SOP で計算した速度ベクトル v@v

      ・処理
       中心点の速度ベクトルとアップベクトル(とりあえず{0,1,0}としました)の外積を回転軸とします。 v@rotAxis
       回転角度はボールの移動距離とボールの半径から計算した角度を使います。 f@angularVelocity
       この回転軸と角度を使ってクォータニオンを作成し、qrotate() VEX関数に与え、回転後のポイント位置を取得しています。

       wrangleで書くとこんな感じです

      vector4 rotQuaternion = quaternion( f@angularVelocity , v@rotAxis );
      v@displacement = qrotate( rotQuaternion, @P );
      @P = v@displacement

      ・出力
       現在のポイント位置を、回転後のポイント位置に更新

       この出力に対し、下流に繋ぐAttribute Wrangle SOPでボールの中心位置を加算し、自然に転がっているように見せています。

       このコメントが、まこさんのお役に立てましたら幸いです。

コメントを残す