日本でハリウッドVFXを制作! 「経産省アイディアボックス」 結果:  
●まとめエントリはこちら ●FAQ ●お問い合わせは左のメールフォームから

2009年5月7日木曜日

MayaLiveのトラックポイントの動きをロケーターの動きに帰る

Myaliveは手軽にトラッキングができるので、いまでもたまに使われている。
利点は、わざわざエクスポートする必要がないこと。3D空間でカメラにたいしてxy方向のみの動きがとらっくできることがある。

自分は使ったことはないが、今回他の人がおこなった、MayaLiveのトラッキングポイントを使ってオブジェクトを動かす必要がでてきた。



Mayaによって作られたトラッキングポイントは "trackedPoint1"という名前がついている。
このノード自体はtranslationは0,0,0に固定されているのでそのままペアレントコンストレインなどをしてもオブジェクトはまったく動かない。

画面内で移動して見えるのは、
LocationX
LocationY
という値でポイントの位置を移動しているからである。

トラッキングポイントの動きは、上記からわかるとりカメラから見て、xy方向のみの2D情報である。
z方向はカメラのmlRotoノードというimagePlaneのような平面上に固定されている。

また、すべてのトラッキングポイントはグループとしてまとめられ、PointとOrientコンストレインされているので、カメラを移動/回転しても、すべてのトラッキングポイントが、そのイメージプレーン上にぴったりくっついた状態を維持する。


まずオブジェクトの代わりにロケ-ターを使うことにした。
上記のLocationX,Yをlocatorの移動情報に置き換えれば良いと思い、
locator1.tx = trackedPoint1.locationX;
locator1.ty = trackedPoint1.locationY;
というエクスプレッションを設定した。
しかしロケ-ターは値はひろっているようだが、動きが小さすぎる。


この問題を解決するためにWEBで調べてみたところ、動きをスケールする必要があることがわかった。
Twiki(MayaAnimation);Converting a maya live track point to a worldspace locator


上記のサイトに書いてあることから必要なことだけを抜き出してまとめると以下の手順になる。
1)まずロケータをカメラにペアレントする。

2)以下のアトリビュートを浮動小数点(float)値で、ロケーターに作ってやる。
scaleTrackX
scaleTrackY

3)エクスプレッションは以下のようにする。
locator1: translateX = trackPoint1.locateX * scaleTrackX;
locator1: translateY = trackPoint1.locateY * scaleTrackY;

4)ロケータをZ方向へ移動する。(mlRotoノードへスナップしてやるとよい。)

5)先程作ったロケータのアトリビュートscaleTrackX,Yに数値を入れてできるだけ目的のtrackPointにロケータを近づけてやる。
今回は、
scaleTrackX = 11
scaleTrackY = 10.9
でほぼ一致した。


ちなみにこのページには
テクスチャーでオブジェクトをコントロールする方法とか、
マウスを使ったモーションキャプチャーなどの
おもしろそうなTipsがあるので、こんどためしてみたい。

 

0 件のコメント:

コメントを投稿