ジョイントとIKの関係

このアニメーションはジョイント及びIKは使用していません、なんだかこのほうが問題なく出来ます。

MAYAでは必ずダグリストを提供してきます、全部のOBJが必ず添付されています,outlinerに定義されているもの全てです、下記画面の右側にある物がです。


VC++の方ではこのように定義してあります、この定義はMAYA側と完全に一致していなければなりません。

注意点はフリーズでリセットせず全て原点はグリッドの中点にします、それさえまもればVC++で問題なく制御できます。

現在の回転角度をMAYAから取得する

下記のコードは指定されたOBJの位置をMAYAから取得する

MAYAから提供される変数

MAYAから取得できる値は角度はすべて±ラジアンで位置情報はかなり複雑です、又移動量も差分で指示しないとダメですからOBJの位置情報も取得が困難です、なのでロケーターを要素に配置しておきますコンストレンのポイントを組み込んでおきます。ロケータの原点は変更せずに使用します。

ロケータの配置状況

この例ではジョイント・IK等は一切使わずに制御していますが、この様にすれば非常に素直に変な動きも無いし又制約も無く制御が可能です

注意が必要な個所はOBJの原点をどう決めるのかが重要になります、制御を考慮して原点を決めて行けばOKです。

どうですかこのコード、見やすいでしょ!これがケアれミスを無くすのです。

MAYAで使う構造体定義

mayaでのプログラムは最短で処理を終わらせる必要がります、又MAYAから添付されてくるデータは一括に全部転送されて来ます、ですから一度は全部アプリケーション側で保持して置く事が重要な処理なのです、そこで使うのが上記の構造体です。私は絶えず使用しています。


IKハンドルは動きの方向性を決めるものです

制御するときに部品の多くがはリロケータブルで配置されています、その為に位置情報を取得しようとした場合に問題が発生します、ですから私の場合多くの部品は絶対位置で画面中心が0で配置してあります。しかしOBJには原点しか位置情報が取得できませんからロケータを適当なOBJにコンストレインして新たにグループ内に組み込んで置きます、そのロケータの位置情報をMFCで取得しています。


ジョイントとIKは確かに便利ですが変な動きに悩まされる事が多いですが皆さんはどうですか?、例としてIKハンドル及びジョイント又スキンニングで特に変な動きが出るようです(私の場合はMAYA-2011でMFCのVC++を使い開発ツールを使いプラグインを作成、その後プラグインエデイターを起動し一括でキーを設定しています)、このD51ですが可動部分の両側で総数97か所動かしています。動輪の回転数は5回転で360フレームで1回転し1800フレームで5回転するようにアニメートしています、そのなかでデバック中に変な動きをするOBJ箇所はジョイントとかIKを使わずに直にOBJを動かしている箇所もあります。振り返りますと中々面倒くさい場面もありました。

今、蒸気吹き出す処理を作成しています、まだ時間が掛かるのですが動輪のアニメーションを今月中にアップします。

参考までに延べますがロケータを各可動部分にコンストレインして組み込みそこから絶対アドレスを取得しています又各OBJはフリーズはしないで置くようにしています、リロケータブルなアドレスだと制御に苦労してしまいますので注意が必要です。

ロッドは複雑な動きをしています