見出し画像

クオタニオン回転(初心者向け)

すこしは技術的な話を。

HoudiniのSOPで回転をするには、一般的にはtransformノードを使います。

では、wrangle内のVEXの計算結果に基づいて回転をするにはどうすればよいか、という問題です。

transformノードのパラメータフィールドから、wrangleの計算結果が格納されているアトリビュートを参照する、という方法も、ないわけではありません。

ただ、transformノードには、@P以外のvector3型のアトリビュートの値も回転してしまう、という困った問題があります。これは、たとえば、カラー値をvector3型のアトリビュートに格納しておいたものをtransformノードで回転すると、カラー値まで回転してしまって、予期しない色になってしまう、というようなことです。

なので、wrangle内のVEXで回転する、ということにアドバンテージがあります。

さて、高校大学の数学で落ちこぼれた僕が思いつく方法は、sinとcosを使ったオイラー角による線形代数的な回転です。中学校で習いました。

x = x * cosθ + y * sinθ
y = -x * sinθ + y * cosθ

次には、matrix3で回転する方法があります。これは、オイラー角からVEXの関数でmatrix3を作って、@Pに乗じる方法です。計算式は超簡単です。

@P *= m

そして、もうひとつ、クオタニオン回転を使う方法です。

これは、特定のベクトルを、軸となるベクトルを中心にして回転する、というような処理をしてくれます。

オイラー角s と軸a(単位ベクトル)から、クオタニオンqを計算し、ベクトルvを回転します。

q = quaternion( s , a )
v = qrotate( q , v )

僕は、今はほとんど、クオタニオン回転を使います。3DCGの制作現場においては、軸回転はよく親和する、というのが理由です。きわめて現場的な理由です。


この記事が気に入ったらサポートをしてみませんか?