スケルタルアニメーション (パート 2 – ノード階層、補間)

引き続き、Flame Steel Engine に実装されているスケルトン アニメーション アルゴリズムについて説明します。

このアルゴリズムは私が実装したアルゴリズムの中で最も複雑であるため、開発プロセスに関するメモにエラーが表示される場合があります。このアルゴリズムに関する前回の記事では、ボーンの配列がモデル全体ではなく、メッシュごとに個別にシェーダーに転送されるという間違いを犯しました。

ノード階層

アルゴリズムが正しく動作するには、モデルにボーンとボーン間の接続 (グラフ) が含まれている必要があります。 2 つのアニメーションが同時に再生される状況を想像してみましょう。ジャンプして右手を上げる。ジャンプ アニメーションはモデルを Y 軸に沿って持ち上げる必要がありますが、腕を上げるアニメーションはこれを考慮して、モデルがジャンプするときにモデルと一緒に上昇する必要があります。そうしないと、腕は自動的に所定の位置に留まります。

この場合のノードの接続について説明します –体には手が含まれています。アルゴリズムを作成するとき、骨グラフが読み取られ、すべてのアニメーションが正しい接続で考慮されます。モデルのメモリ内では、グラフはモデルのボーンの接続性を反映するためだけに、すべてのアニメーションとは別に保存されます。

CPU での補間

前回の記事では、スケルトン アニメーションのレンダリングの原理について説明しました。 「変換マトリックスは、レンダリング フレームごとに CPU からシェーダーに転送されます。」

各レンダリング フレームは CPU で処理され、メッシュ ボーンごとに、エンジンは位置補間、回転、ズームを使用して最終的な変換行列を受け取ります。最終的なボーン マトリックスの補間中、すべてのアクティブなノード アニメーションに対してノード ツリーを通じてパスが作成され、最終的なマトリックスが親のマトリックスと乗算されて、レンダリングのために頂点シェーダーに送信されます。

ベクトルは位置補間と拡大に使用され、クォータニオンは回転に使用されます。オイラー角とは異なり、補間 (SLERP) が非常に簡単で、変換行列として表すことも非常に簡単です。

実装を簡素化する方法

頂点シェーダーのデバッグを容易にするために、FSGLOGLNEWAGERENDERER_CPU_BASED_VERTEX_MODS_ENABLED マクロを使用して、CPU 上に頂点シェーダーのシミュレーションを追加しました。ビデオ カード メーカーである NVIDIA は、シェーダー コードをデバッグするためのユーティリティ Nsight を提供しています。これにより、複雑な頂点/ピクセル シェーダー アルゴリズムの開発も簡素化できる可能性がありますが、CPU でのシミュレーションだけでは十分な機能をテストできませんでした。

次の記事では、複数のアニメーションの混合について説明し、残りのギャップを埋める予定です。

ソース

https://www.youtube.com/watch?v= f3Cr8Yx3GGA

Leave a Comment

Your email address will not be published. Required fields are marked *