Twitterに上げたものを記事にしてみる。
今や絶滅の危機に瀕しているSoftimageで「特定の軸の回転を解消するICE」を組んでみました。
実際に動かしてるのがこんな感じ。
Y軸の回転がなくなっているのが分かると思います。
これを応用すれば、ねじれ解消のための補助骨なんかに使えますねー。
実際のICEはこうなっています。
(クリックで拡大)
これを3Dビュー上でみるとこんなイメージ。
(クリックで拡大)
ベクトル、内積、外積だ~ってよくわからんのがいっぱいですね!
自分も頭から煙をプスプス出しながらやってました^^;
結果、「難しいことは理解しなくても結果論でいいじゃん!」ということに落ち着きましたがw
要するに。。。
・ベクトルとは
矢印!!
・矢印が2あれば、
内積ってのを使えばその角度が求められるらしい!
・
外積ってのを使えば、垂直な軸が求められるらしい!!
外積で求めた軸を中心に、内積で求めた角度を回転させてやれば
同じ向きを向いてるけど、余計な回転が入ってないものができあがるんじゃない?
という、そういうざっくりしたイメージっすw
自分が概念を理解するために参考にしたサイト
ベクトルとは?
http://www.geocities.jp/k27c8_math/math/vector/what_is_vector.htm
内積の意味
http://kadakun-toudai.seesaa.net/article/120073477.html
内積については、高校で勉強したらしいがこれっぽっちも覚えておりませんでした。
ということでググってわかりやすいサイトを発見しました!
イメージ優先で書いてくれてるのでわかりやすいです。
外積の意味
http://proofcafe.org/k27c8/math/math/vector_analysis/page/meaning_of_outer_product/
二つのベクトルから直角になるベクトルです。
イメージとしては2つのベクトルを平面として考えて、そこに人が立ってる状態と考えれば分かりやすいっす。
上のGIFアニメは赤い矢印が外積の動きを表したものです。ばっちり垂直をキープしてますね。
青矢印が右に行くと赤の矢印が手前から奥に変化しますが、これも重要っす。
↓の項目の3次元の座標(右手系・左手系)が関係しているようですよ。
右手系と左手系
3次元の座標には右手系と左手系ってのがあって、それも関係してます。
最後に外積のベクトルを基準に内積の角度分グリっと回す方向ですね。
なんか見たことあるはず~!
http://d.hatena.ne.jp/nakamura001/20081217/1229502492
内積と外積の使い方
http://marupeke296.com/COL_Basic_No1_InnerAndOuterProduct.html
内積と外積、その使い方についてゲームのプログラミングの視点から記事が書かれているので、具体的なイメージが沸きますね~。
基準となるベクトルを変えてやれば、X軸やZ軸の回転を無効にすることができますよ。
また、今回はSoftimageのICEで再現してますが、Maya様のカスタムノードでもMAXやほかのDCCツール、はたまたいろいろなゲームエンジンなんかでも同じことができるはずです。
例えば補助骨をDCCツール上で動作すればいい場合や、ゲームにもアニメーションデータとして吐き出すとすれば、↓↓↓のようなやり方でも何も問題なさそうです。
http://td-matt.blogspot.jp/2011/02/setting-up-forearm-roll-joint-method-1.html
http://td-matt.blogspot.jp/2011/02/setting-up-forearm-roll-joint-method-2.html
ただ、ゲーム中にリアルタイムで動作させたい場合なんかはこういった方法を使っていくことで実現できそうですねー^^
基本部分を理解しただけで、まだまだ「そうらしい」って理解しかできてませんがなにかのお役に立てれば幸いです。
以上、解説と参考サイトの紹介でした!!