オブジェクトを移動出来ます。位置設定に置き換えてみます。状態なので引っ張れないのですね。おお、引っ張っていますね。他のトラッキング対象が置き去り状態なので、どうもうまくいきません。不要なコンストレイントは無効にしてみます。動かないトラッキング対象からははがせましたが、腕の位置によって圧迫されていて手の形を保てていません。腕の位置には黙っててもらいましょう。腕がぷらぷらと垂れ下がっている状態ですが、一応指先位置に合わせるように手のモデルが移動しています。次に気になるには指の向きですね。位置だけ合っている状態で向きがあっていないので関節も結構安定していない状態です。考えものですね、考えて答えを導きます。エージェントシステムを入れてみてはどうでしょう?研究室にいた頃に先輩の口から出たキーワードでしたが、やっと使う時が来ました。発想を得ただけで、実際どういうものか知りませんがマルチエージェントシステムで調べると、大体考えていることと一致してますので、まぁこう呼んで良いと思います。(そうじゃないと説明出来ませんからね...)エージェントが各々のオブジェクトの未来の姿勢を過去と現在から導き出します。右手親指の未来の姿勢決定機構をエージェントに処理させてみます。エージェントの作成からですね。知覚で必要になるのは1.トラック対象2.親指の指先認識結果3.親指付け根のコンストレイント4.トラック対象と繋がるコンストレイント5.トラック対象がさらに牽引するオブジェクトの5つです。基底となるだろう、エージェントに1,3,4,5を保持するものを作ります。それを継承して2.を保持するエージェントを作ります。今までの作りで続行すると、3Dウィンドウがオブジェクトの情報を保持していることになりますがもう少し公的な場所、コンテキストにてこれらの情報を集めることにしました。一度集めた情報はそこで様々なエージェントから静的にアクセスすることが可能となります。これでエージェントは1.4.を手に入れることができます。保持する必要はないですね、コンテキストから常に取得するようにします。設定するコードを作ってみましょう。そこで、いつエージェントを作成するのか考えることになりますが、次に示す通りモデルをロードし終えた後にエージェントを作成するようにします。]]>いつ知覚するのか?エージェントの知覚、思考、行動は指先認識結果がPerCライブラリから送られてきた時にすることにしました。(暫定で)では、知覚コードを覗いてみます。1.トラックオブジェクト2.認識結果3.トラック対象コンストレイント4.トラックコンストレイント5.トラック対象オブジェクトを集めるわけですから...1.はありますが2.がありませんね。コンテキスト空間に2.にアクセスできる情報を持たせます。2.を受け取れるように作りました。今度は3.が受け取れません。コンテキスト空間に3.を持たせます。3.を特定できるようにしました。4.はもともと手に入っていました、5.も3.を特定する過程で手に入るようになりました。これで知覚できるようになりました。]]>次は簡単な思考を考えてみましょう。トラックコンストレイントの有効性を無効にして、トラッキング対象と全く同じ位置にトラックオブジェクトを移動する思考はどうでしょう?行動ではその移動先にオブジェクトを移動します。]]>はい、自由落下しました。回転を無視してトラックする機構をいれてみて、その通りトラックすることを確認しました。エージェントシステムは便利ですね。監督になった気になって、君はこの情報が来たら周りを見てこうしろ、あーしろと命令するだけ命令に従うロジックを組むのも監督なので、思い通りに動かないエージェントは一人もいません。そんな調整をいくつか仕込むと下図のとおりの結果を得られます。見栄えが良くなるよう、ポイントスプライトを半透明にしました。手のモデルが開いた両手の位置に正しく配置されることを確認できました。準備運動を終えてスタートラインに立ちました。これから行なうほんの少しの工夫を行いたくて行いたくて、何年も努力して作業を続けてきました。失敗する可能性もかなり濃厚ですが、絶対に出来ないならばその結果を確認して諦めようと思います。早くあきらめたい!そのために絶対に不可能であることを確認したいと思います。最近は訪れるお客さんもめっきり減ってしまいましたが細々と作業を続けていきます。タイトルで示した指先追跡ができましたので、ここで話を切りたいと思います。