スケルトントラッキングをスキンモデルのボーンに適用してみる(2)

 「OpenNIDotNetSample」(仮称)の調整が進み、問題を減らすことができたようです。スクリーンショットは、前回と似た片足立ちのポーズですが、今回は3Dキャラクター上でもそこそこバランスが取れているように見えます。胴(Torso)のトラッキングを、腰を表すボーンに適用しているので、モデルの都合もあって、見栄え上の問題は起きているようです。


状況

前回の問題点の解消

 トラッキングの情報をボーンに適用の処理では、股関節(Hip)の親は胴(Torso)ではなく、ルートとするのが正解でした。

座標系は補正が必要か

 高めのKinectセンサー設置からでは、なんとなく前かがみのように見えたので、補正が必要なのかどうかが疑問点です。そこで、床平面の情報で座標系の補正を適用してみました。これに伴いカメラ位置も変更しています。

位置の適用

 胴(Torso)の位置を使って移動できるようにしました。モデルに合うよう位置のスケーリングも若干変更しています。処理の仕組み上、完全にとはいきませんが、ある程度合わせることはできます。

ノイズ除去

 スケルトントラッキングにはスムージングを指定するAPIがあります。これも使っていますが、自前の補正処理も試しています。

モーションキャプチャ的な利用としては

MMD + Kinect

 「MMDでもOpenNIに対応した」という話は認識していました。これについても、ここへ来てようやく、MMD本体とDxOpenNI.dllのみをPCに追加して試してみました。ライセンス「LGPL」の都合か、DLLに切り分けて、オープンソース(DxOpenNI.cpp)として対応していますね。

補正

 トラッキングデータに対する補正方法については、以下のようなものが思いつきます。

  • ノイズ除去
  • キーフレームアニメーションとして編集しやすくするための間引き
  • 不自然な結果に対する関節の可動域を考慮した補正
  • ラッキングの情報にある「Confidence」の値を活用した補正
    • あるいは、編集用に目印として残す
    • 「Confidence」は実数ですが、現在見る限りでは0か1のみのようです
課題

 「体に腕を密着させる」「奥行方向に部位を重ねる」などの姿勢は、認識が困難です。死角については、「マルチKinectで」という話題もありますね。
 現在得られない関節があります。今後さらに対応したものが現れるか不明ですが、自然に見せるために足りない部分を「編集する」か「生成する」必要があります。