poseコマンド、sequenceposeコマンドと紹介し、これらを根気良く使うと、TVMLで用意された動作以外の好みの動作が作れることがわかりました。
ここでは、その極めつけとも言える、モーションキャプチャーのデータを使う方法を紹介します。
モーションキャプチャーとは、実際の人間の動きをリアルタイムで計測してデータ化することを言います。生身の人間の関節角の動きをすべてデータ化し、このデータでCGキャラクタを動かすと、CGがまるで人間のような自然な動きをするようになります。
最近は、CGをよりリアルに動かすため、このモーションキャプチャーが多用されています。たとえば、よくある格闘技ゲームなどが非常に本物っぽく動いているのは、各々の技の動きがモーションキャプチャーのデータで作られているからです。
TVMLでも、このモーションキャプチャーのデータでキャラクタを動かすことができます。それにはkeyframeというコマンドを使います。
モーションキャプチャーのデータは、通常ひとつのデータファイルになっていて、そのデータフォーマットにいくつかの種類があります。TVMLでサポートしているのは、現在もっとも一般的なBVHフォーマットです。
これを使うには、まずopenkeyframeコマンドで
character: openkeyframe ( name = Bob, keyframename = Yopparai, filename = "data002.bvh" )
と、BVHファイルを指定してオープンし、keyframenameパラメータによりこれに名前をつけます。ここではYopparaiという名前をつけています。
モーションキャプチャーデータを再生するには
character: keyframe ( name = Bob, keyframename = Yopparai )
とすることで動き出し、データを最後まで再生して止まります。
このとき、自動的に動き出す前のポーズからモーションキャプチャーの最初の動作のポーズへと滑らかに補間し、デフォルトの1秒間で移行します。また、動き終わった後は、最後のポーズからキャラクタのデフォルトポーズに向かってやはりデフォルトの1秒間で滑らかに移行します。
この操作は、モーションキャプチャーの動作を複数組み合わせたり、TVMLコマンドの動きと組み合わせたり、ということをするための動作の「つなぎ」のために行います。以上の滑らかな移行の秒数は、preresettime、resettimeというパラメータを使って秒数で指定できます。
たとえば、動き出すのをほぼ一瞬にして、最後の戻しをゆっくりするときは
character: keyframe ( name = Bob, keyframename = Yopparai, preresettime=0.2, resettime=3.0 )
のようにします。これで動き出しに0.2秒、戻しに3秒という動きになります。
また、データの再生が終わった後、デフォルトポーズに戻したくない場合には、stopmodeパラメータを使います。デフォルトはstopmode=resetで、デフォルト姿勢に戻しますが、最後の姿勢のまま止めるにはこれをstopmode=remainとします。

モーションキャプチャーデータの再生はこのように簡単で、やってみると動作があまりに人間そのもので、一見万能な方法に思えたりします。しかし、モーションキャプチャーで一連の動作を作ろうとするとさまざまな問題にぶつかります。
まず、実際に動かして見てみると、ものによって足が滑ってしまったり、床から足が浮いてしまったり、床への接地感のない動きになることがあります。これは、そのデータを測定したときの人間の手足の長さと、CGキャラクタのそれが通常一致しないために起こります。
keyframeコマンドでは、これを簡易的にそれらしく見せるために、yscale、xzscaleパラメータが用意されていて、モーションキャプチャーデータによる体全体の床に対する高さ、それから進行方向への移動距離に係数をかけて、違和感を減らすことができます。この値は、実際に再生してカット・アンド・トライで決めます。ただし、完璧な修正は無理で、あくまで簡易的なものです。完璧に修正するには、モーションキャプチャーのデータ自体を修正する必要があるのです。
また、このkeyframeコマンドでは、動作の前後にのりしろのような移行期間を設けることで動作の不連続さを緩和していますが、これはまだまだ簡易的なものです。
モーションキャプチャーデータを複数使って一連のストーリーのある動きをさせようとすると、動作と動作の間の動作をどう自然に作りこむか、ということが大きな問題になります。
格闘技系ゲームなどですと、だいたい、技と技の間は、体を上下に揺するようなスタンバイ状態になっていますね。この「何もしてないときの動き」というのが、ちょっと厄介なのです。ということで、本当は、動作と動作を単に接続するだけではなく、合成(つまりののりしろではなくオーバラップさせる)しなくてはいけないのです(コラム参照)。
このようにモーションキャプチャーは動きがあまりに自然なだけに、さまざまな問題を生み出します。とはいえ、そう難しく考えずに、あれこれ使ってみるのもいいでしょう。BVHファイルは、インターネットで探せば、どこかしらに落ちていると思います。なんといっても、モーションキャプチャーの人間らしい動きというのは面白いものです。

モーションキャプチャー特有の問題
モーションキャプチャーデータでキャラクタを動かすとき、動作と動作のつなぎをいかに自然に見せるかは重要な問題です。ここ最近のCGアニメーション関連の論文で、この問題を論じたものをよくみかけます。モーションキャプチャーの動作は、普通、単発の動作で、生身の人間の一連の動作から切り取られたものなので、この問題は避けられません。これを避けようとして、一連の長い動作をキャプチャーしてしまうと、今度は、その動作にしか使えず、使い勝手の悪いデータになってしまいます。
このつなぎの問題に加え、重要なのが、動作の合成です。たとえば、走りのデータと、ボールを蹴るデータを合成して走りながらボールを蹴る動作を作る、などの場合です。これもうまく滑らかに違和感なく合成するのは簡単ではありません。また、動作の変形も問題です。たとえば歩行のデータで歩かせているとき、単純に歩幅を少し変えてみようとしても簡単ではありません。元データを手で修正するか、別の歩幅の異なるデータを持って来る、などしないと普通は無理です。
以上、モーションキャプチャーにはさまざまな特有の問題がありますが、最近は、これらの問題が盛んに研究され、かなりの解決を見ています。

|