Houdiniでフリー回転ソルバを作ってみた 投稿日時: 2016-07-16 投稿者: Yamabe.Michiyoshi ふと、平井氏のTweetに誘発されて作ってみた。 ダイナミクスを使わず、キーフレームによる移動をもとに、正しくボールを転がすソルバです。 思いの外サクッとできたのでちょっと嬉しい。 共有:TwitterFacebookいいね:いいね 読み込み中…
こんにちは。 いつもこちらのブログにて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でボールの中心位置を加算し、自然に転がっているように見せています。 このコメントが、まこさんのお役に立てましたら幸いです。 返信 ↓
こんにちは。
いつもこちらのブログにて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でボールの中心位置を加算し、自然に転がっているように見せています。
このコメントが、まこさんのお役に立てましたら幸いです。