blenderのクォータニオン表示に慣れたいと思ったのでまとめてみます。まず、$w,x,y,z$の意味について・・
各変数の意味
これは軸周りの回転表示と関係があります。$w,x,y,z$に値を入れたとき、これはまず、
x^2+y^2+z^2+w^2=1
を満たすように正規化されます。そのうえで、
w=\cos\left(\frac{\theta}{2}\right),~x=\alpha\sin\left(\frac{\theta}{2}\right),~y=\beta\sin\left(\frac{\theta}{2}\right),~z=\gamma\sin\left(\frac{\theta}{2}\right)
となるような$\theta,a,b,c$が求められ(${\alpha}^2+{\beta}^2+{\gamma}^2=1$)、このとき回転は軸ベクトル$(\alpha,\beta,\gamma)$の周りの$\theta$(ラジアン)の回転となります。つまり軸周りの回転表示と関連していて、それを別の形であらわしたものとも言えます。
四元数
ここで四元数の計算について簡単に説明すると、複素数のようなもので、
ij=-ji=k,~~jk=-kj=i,~~jk=-kj=i,~~i^2=j^2=k^2=-1
を満たすような$w+xi+yj+zk$($w,x,y,z$は実数)という数のような感じのものです。計算は実数がすべての文字と掛け算で可換というだけで、複素数と同じように計算できますが、掛け算の順序により結果が異なるので注意が必要です(実は行列演算で完全に表現できる)。
回転
この表示がどういう意味を持つかというと、オブジェクトの各頂点の位置とか軸などがどのように回転するかがこれを使って計算できるということです。たとえばその位置というのを$p=(a,b,c)$として、
p=ai+bj+ck
という四元数であらわします。このとき、$q=w+xi+yj+zk$に対し、共役:
\bar{q} = w-xi-yj-zk
を考え、
p' = q\cdot p\cdot \bar{q}
という積を取ります。これは必ず
p'=a'i+b'j+c'k~~~(a',b',c'は実数)
という形になり、変換の結果得られる位置は$(a',b',c')$となります。
ローカル軸の成分を計算する
これを使うと、オブジェクトのローカル軸(x,y,z軸)が回転によりどんなベクトルになるのかを計算で求めることができます。それには$p$として3つの単位ベクトルを取ればいいです。具体的には、
qi\bar{q},~~~qj\bar{q},~~~qk\bar{q}
を計算すれば出せます。得られる結果は、$w,x,y,z$を用いた計算式で、
(1,0,0) \mapsto (w^2+x^2-y^2-z^2,~2(xy+zw),~2(xz-yw)),\\[8pt]
(0,1,0) \mapsto (2(xy-zw),~w^2-x^2+y^2-z^2,~2(xw+yz)),\\[8pt]
(0,0,1) \mapsto (2(xz+yw),~2(yz-xw),~w^2-x^2-y^2+z^2)
となります。
おわりに
代数計算で軸方向ベクトルの成分が出せるので、内積計算に使うなど、いろいろ応用できそうです。
追記
これ実は平行移動と回転で不変なグラデーションを実現しようとして調べてたのですが、VectorTransformというノードを使えば実現できると知ったので無駄になってしまいました(ドライバとかも組み合わせたのに・・)。でも四元数やドライバの知識は役に立ちそうです(ドライバの応用範囲凄そう)。どうするのかというと、
ジオメトリーの座標から原点の座標を引いて原点ベースのジオメトリーの座標のベクトルを作り、それをオブジェクト座標に変換して、あとは(0,0,1)と内積を取ればどんな向きでもオリジナルな向きに対応したグラデーションになってくれます(座標を使わない色付けならUVがあるのでそっちでも、いろんな選択肢があるということで・・)。いろんなノードのこともっと勉強しないとですね・・。