1

私はフェイシャル アニメーション リグを持っており、これを 2 つの異なる方法で操作しています。インタラクティブ アニメーションで一般的なように Maya ビューポートにアーティスト UI があり、それを FaceShift マーカーレス モーション キャプチャ システムに接続しています。

パフォーマンスをキャプチャして Maya にインポートし、サンプル データをスムージングして削減し、アニメーターが仕上げを引き継ぐというワークフローを思い描いています。

私たちの顔のリグは、3 つのオブジェクト (グローバルな lookAtTarget と左右の目のオフセット) のミニ階層によって制御される視線を持っています。

視線はこの LookAt 設定によって制御されるため、視線を含むモーション キャプチャ データをインポートするときは無効にする必要があります。

モーション キャプチャ データがインポートされた後、視線はモーション キャプチャの回転で設定されます。

次のことを行う短い Mel ルーチンを探しています: モーション キャプチャの目の回転サンプルを行進し、各目の LookAt ターゲット位置を逆方向に計算して設定し、2 つを平均してグローバルな LookAt ターゲットの位置を取得します。

その Mel ルーチンが実行された後、目の LookAt コンストレイントをオンに戻すことができます。目の凝視コントロールはリグに戻ります。視覚的には何も変わっていません。アニメーターは再び Maya ビューポートで目の UI を操作できるようになります。

これは、フェイシャル モーション キャプチャを行うすべての人にとって共通のロジックであると考えています。誰かがすでにこのようなものを手に入れましたか?

4

3 に答える 3

1

モーション キャプチャのアイ トラッキングはどの程度優れていますか? ターゲットが遠くにある場合、問題が発生する可能性があります。データのサンプリングによっては、収束していないように見える「狂った目」や、データが飛び跳ねる可能性があります。その場合は、目のデータを完全にジャンクにするか、リターゲットする前に大幅にスムージングする必要があります。

2つの目の収束を見つけるには、これを試してください(@ julianのように、melですべての計算を行うのは面倒なので、ロケーターなどを使用しています)。

1)一方の軸がルック ベクトルに沿って方向付けられ、もう一方の軸が 2 番目の目の平面内にあるように、ロケーターを 1 つの目に拘束します。目が Z を下向きにし、2 つ目の目が XZ 平面にあるとします。

2) 2 番目のロケーターを作成し、最初のロケーターを親にし、同じ方法で 2 番目の目にコンストレインします: Z を下に向け、最初の目を XZ 平面に置きます。

3) 2 番目のロケーターのローカル Y 回転は、2 つの目の間の輻輳角です。

ここに画像の説明を入力

4)正弦の法則を使用して焦点距離を計算し、最初の眼に対する 2 番目の眼のオフセットをチートします。2 番目の目のローカル X 距離は、直角三角形の 1 つの脚です。三角形の角度は、#3 からの収束角と 90- 収束角です。言い換えると:

focal distance                    eye_locator2.tx
--------------       =            ---------------
sin(90 - eye_locator2.ry)         sin( eye_locator2.ry)

代数的に:

focal distance =   eye_locator2.tx * sin(90 - eye_locator2.ry) / sin( eye_locator2.ry)

解決しようとしている三角形はそれだけ前後にシフトされているため、eye2 のローカル Z を減算する必要があります。

  focal distance =   (eye_locator2.tx * sin(90 - eye_locator2.ry) / sin( eye_locator2.ry)) -  eye_locator2.tz

5)上記で得られた距離で、アイロケータのローカル Z 方向に沿ってターゲットを配置します。実際のコントロールは、クロスアイを避けるために離すことができる 2 つのルック ターゲットを使用しているようです。これは、実際のコンバージェンス距離に対してそれをどれだけ使用するかを判断するための一種の判断です。実世界のデータの多くでは、アニメーターにとっては収束が遠すぎる可能性があります。30 メートル離れたターゲットを扱うのはかなり非現実的ですが、10 メートル離れたターゲットを大きな広がりでシミュレートする場合があります。残念ながら、それに対する経験的な答えはありません - それは判断の呼びかけです.

于 2013-08-19T05:53:23.233 に答える
0

解決策は非常に単純なものになりました。状況は、目の回転ノードのモーション キャプチャ データであり、同時に (非技術的な) アニメーターによる視線のオーバーライド制御が必要です。Maya 内では、コンストレインにはウェイト ファクタがあります。これは、コンストレインの影響を制御するパラメトリックな 0 ~ 1 の値です。解決策は、アニメーターが視線を制御したい場合は目の lookAt コンストレイン ウェイトを 1 にキー設定し、モーション キャプチャされた視線が必要な場合は同じウェイトを 0 にキー設定し、これらのコンストレイン ウェイトのスムーズな遷移を使用することです。トランジションをマスクします。これは、元のモーション キャプチャ データがそのまま残り、参照として利用できるため、必要に応じてアニメーターが前後に切り替えることができるため、上記の私の最初のアイデアよりも優れています。

于 2013-08-23T22:29:33.550 に答える