走ったり歩いたりすることができ、もちろん静止しているキャラクターのフレームワークがあるとします。
アニメーションブレンドは、実行時に動的なアニメーションを生成することにより、これらの間をスムーズに移行するプロセスだと思いますか?
もしそうなら、これがどのように機能するかの基本的な理論は何ですか、どのように実装しますか?
走ったり歩いたりすることができ、もちろん静止しているキャラクターのフレームワークがあるとします。
アニメーションブレンドは、実行時に動的なアニメーションを生成することにより、これらの間をスムーズに移行するプロセスだと思いますか?
もしそうなら、これがどのように機能するかの基本的な理論は何ですか、どのように実装しますか?
回答:
キャラクターアニメーションブレンドはより一般的で、次の用途に使用できます。
基本的な考え方は、異なるアニメーションクリップを持つ2つの同一のスケルトンについて、ジョイントの回転ごとに中間値を計算することです。アニメーションクリップは回転で表されます。したがって、正確な結果が必要な場合(オイラー角を使用している場合でも)、線形補間は使用すべきではありません。たとえば、slerpを使用できますが、より複雑なソリューションが存在します。
これは、複雑なソリューションを伴う複雑な問題です。基本的に、2つのアニメーションクリップAとBがある場合:
興味のある方は、この記事を読むことから始めることをお勧めします。そうすれば、困難が何であるかをよりよく理解できます。http: //graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf
最新のものではありませんが、読みやすいです。
これがお役に立てば幸いです。宜しくお願いします。
最初に、アニメーションのブレンドは骨格アニメーションにのみ適用されるため、骨格アニメーション(特に3Dグラフィックス)について話していると思います。2Dスプライトベースのアニメーションについて話している場合(質問で指定しなかった場合)、アニメーションのブレンドについてはほとんど忘れることができます。
邪魔にならないように...
アニメーションブレンドは、実行時に動的なアニメーションを生成することにより、これらの間をスムーズに移行するプロセスだと思いますか?
それは、その用語が意味することとほとんど同じです、はい。ただし、「動的アニメーションを生成する」というフレーズは、少し誤解を招く恐れがあります。それは手続き型アニメーションを思い起こさせ、それはあなたがやっていることとまったく同じではありません。
「アニメーションブレンディング」とは、両方のアニメーションを少し使用して、一方のクリップの重みを上げ、もう一方のクリップの重みを下げて、2つのアニメーションクリップ間を遷移することです。これは骨格アニメーションで最適に機能するため、各ジョイントの回転は2つの異なるアニメーションクリップのそのジョイントのアニメーションの中間点に設定され、各クリップのウェイトは時間とともに変化します。つまり、各ジョイントの回転を次のように計算します。
rotCombined = weightA*rotA + weightB*rotB
現在、アニメーションブレンドは骨格アニメーションで最適に機能しますが、頂点アニメーション(MD2など)でも最適です。最新のゲームエンジンは頂点アニメーションを使用しないため、これは歴史的なメモですが、2つの異なるアニメーションの頂点位置間の重み付けとして、同じ方法で頂点位置を設定できます。これにより、2つのアニメーションがあまりにも異なる場合、奇妙な見た目の補間(たとえば、メッシュの一部が崩れたり裏返しになったりする)が発生する可能性があります。