アニメーションブレンドの基本


23

走ったり歩いたりすることができ、もちろん静止しているキャラクターのフレームワークがあるとします。

アニメーションブレンドは、実行時に動的なアニメーションを生成することにより、これらの間をスムーズに移行するプロセスだと思いますか?

もしそうなら、これがどのように機能するかの基本的な理論は何ですか、どのように実装しますか?


1
あるアニメーションの最後のフレームから別のアニメーションの最初のフレームまでの各ボーン間の単なる線形補間だと思います。
匿名で

または、加重平均が必要な場合は、smoothstepを使用した線形補間(:
グスタボ

@ Gustavo-Gtoknuはあなたが今言ったことについてもっと説明できますか?
サーヤカロット

ブレンドする両方のフレームのアルファで、他方のフレームの逆で線形補間を行います。両方とも時間の関数です。補間でスムースステップまたは加重平均を使用して、異なる効果を得ることができます。
グスタボマシエル

回答:


18

キャラクターアニメーションブレンドはより一般的で、次の用途に使用できます。

  • 2つのクリップ間のスムーズな移行の計算。
  • 既存のアニメーションから完全に新しいアニメーションを作成します(同時に2つ以上の可能性があります)。
  • IKのような動作を実現します。

基本的な考え方は、異なるアニメーションクリップを持つ2つの同一のスケルトンについて、ジョイントの回転ごとに中間値を計算することです。アニメーションクリップは回転で表されます。したがって、正確な結果が必要な場合(オイラー角を使用している場合でも)、線形補間は使用すべきではありません。たとえば、slerpを使用できますが、より複雑なソリューションが存在します。

これは、複雑なソリューションを伴う複雑な問題です。基本的に、2つのアニメーションクリップAとBがある場合:

  • AとBが完全に異なる(ジャンプと水泳の混合)場合、奇妙な/面白い結果になる可能性があります。
  • AとBが似ている場合(2つの歩行アニメーションクリップ)、たとえば、両方の左足が地面にあるとき、それらを最初に同期してブレンドする必要があります。

興味のある方は、この記事を読むことから始めることをお勧めします。そうすれば、困難が何であるかをよりよく理解できます。http//graphics.cs.wisc.edu/Papers/2003/KG03/regCurves.pdf

最新のものではありませんが、読みやすいです。

これがお役に立てば幸いです。宜しくお願いします。


5

最初に、アニメーションのブレンドは骨格アニメーションにのみ適用されるため、骨格アニメーション(特に3Dグラフィックス)について話していると思います。2Dスプライトベースのアニメーションについて話している場合(質問で指定しなかった場合)、アニメーションのブレンドについてはほとんど忘れることができます。

邪魔にならないように...

アニメーションブレンドは、実行時に動的なアニメーションを生成することにより、これらの間をスムーズに移行するプロセスだと思いますか?

それは、その用語が意味することとほとんど同じです、はい。ただし、「動的アニメーションを生成する」というフレーズは、少し誤解を招く恐れがあります。それは手続き型アニメーションを思い起こさせ、それはあなたがやっていることとまったく同じではありません。

「アニメーションブレンディング」とは、両方のアニメーションを少し使用して、一方のクリップの重みを上げ、もう一方のクリップの重みを下げて、2つのアニメーションクリップ間を遷移することです。これは骨格アニメーションで最適に機能するため、各ジョイントの回転は2つの異なるアニメーションクリップのそのジョイントのアニメーションの中間点に設定され、各クリップのウェイトは時間とともに変化します。つまり、各ジョイントの回転を次のように計算します。

rotCombined = weightA*rotA + weightB*rotB

現在、アニメーションブレンドは骨格アニメーションで最適に機能しますが、頂点アニメーション(MD2など)でも最適です。最新のゲームエンジンは頂点アニメーションを使用しないため、これは歴史的なメモですが、2つの異なるアニメーションの頂点位置間の重み付けとして、同じ方法で頂点位置を設定できます。これにより、2つのアニメーションがあまりにも異なる場合、奇妙な見た目の補間(たとえば、メッシュの一部が崩れたり裏返しになったりする)が発生する可能性があります。


あなたが2Dグラフィックスでこれを行うことができないと言うとき、あなたはスプライトベースのアニメーションを意味しますか?個々の身体部分の位置と回転に基づいてメカニムで作成された2Dアニメーションをブレンドする方法を見つけようとしていますが、なぜ2Dであるからといって不可能なのかわかりません。
マラルズ14年

スプライトアニメーションに新しいフレームを生成する方法がないためです。3Dアニメーションでは、個々の画像は事前に生成されません。
ジョッキング

わかりましたが、2Dアニメーションはスプライト全体の変更のみに基づいている必要はありません。複数のスプライトからオブジェクトを構成し、それらの回転や位置などをアニメートすることができます。答えを読んだときにこれを行う方法を見つけようとしていましたが、最初の行は私を悲しくさせました:(! 。簡単Unityと私自身のエンジンをロールバックする人のためにブレンドしていないより困難な3Dよりも想像の観光
mallardz

1
ああ、ええ、私はスプライトベースのアニメーションを意味し、私は私の答えを編集します
jhocking
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.