問題タブ [skeletal-animation]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票する
0 に答える
683 参照

java - opengl を使用した Android の骨格アニメーション

Androidでopengl es2を使用して骨格アニメーションを実装しようとしています。バインド ポーズの回転、位置、ローカル マトリックス、ワールド マトリックス、逆バインド ポーズ マトリックスを格納する Joint クラスと、回転、位置、ローカル マトリックス、ワールド マトリックス、オフセットを含むキーフレームごとのデータを持つ JointState クラスを作成しました。マトリックス。すべて問題ないように見えますが、私のレンダリングは予期しない結果をもたらします。コードを添付しました。助けてください

ジョイントクラス

JointState クラス

ここに画像の説明を入力ここに画像の説明を入力 フレーム 20 で オブジェクト object のバインド ポーズ状態

私が得ている結果

ここに画像の説明を入力

私はそれを正しくしているデフォルトの形状

ここに画像の説明を入力

フレーム 20 の形状が変形し、修正したい。

シェーダ コードは次のとおりです。

頂点シェーダー

フラグメントシェーダー

0 投票する
1 に答える
1175 参照

c++ - スキニング グローバル トランスフォームのアシンプ

現在、ASSIMP ライブラリを使用して 3D OpenGL ゲーム エンジンにスケルタル アニメーションを実装していますが、残念ながらうまくいきません。私が現在直面している問題は、連結されたボーン トランスフォーム (ボーン間の親子関係) が、1 つの親のみがトランスフォームされている場合にのみ正しく動作することです。

何が起こるかというと、太もものボーンの変換が、骨盤のローカル軸ではなくグローバル軸で実行されるということです。

ここに私のスケルトンクラスがあります:

各ボーンのワールド変換を計算するために使用する関数は次のとおりです。

私の Mesh クラスには、この関数 UpdateSkeleton() があります。

ありがとうございました!

0 投票する
0 に答える
506 参照

animation - 逆運動学: ボール ソケット ジョイントをパラメータ化する方法

逆運動学について学んでいて、人間の骨格シミュレーションを書こうとしています。ボール ソケット ジョイントの回転をパラメータ化する方法を決定するのに苦労しています。

私が考えることができる2つの方法:

  1. おなじみの軸角度 (またはオイラー角度) の方法。回転の順番を変えることで関節の特性を変えることができます。回転行列のみを使用することもできます。 ここに画像の説明を入力
  2. 1 つはボーンの軸に沿って、もう 1 つは方向を決定する 2 つの四元数回転を使用します。関節のシミュレーションに関しては、 こちらの方が直感的だと思います。ここに画像の説明を入力

では、どちらを使用すればよいでしょうか。私が理解できる限り:

  • 軸角度法はジンバルロックしやすい傾向があります。
  • もう 1 つの方法では、ヤコビアン エントリを計算するときにどの軸を使用するかが曖昧vです。この方程式のベクトルのことです。 ここに画像の説明を入力

(出典: https://www.math.ucsd.edu/~sbuss/ResearchWeb/ikmethods/iksurvey.pdf、5 ページ)

ヤコビ疑似逆数の代わりに CCD を使用することで問題を回避できるため、2 番目の方法を使用する傾向があります。しかし、これらの方法のどれが標準として使用されているか (軸角度または四元数) を知りたいだけです。

どんなアドバイスでも役に立ちますが、できれば専門的で、非難解な言語でコードを惜しみなく提供してください:-]

0 投票する
1 に答える
1771 参照

javascript - Three.js スケルタル アニメーションを新しいミキサー ベースのシステムに更新する

ミキサー システムは r73 で導入されました。それ以来、ゲームをこの新しいシステムに更新しようとしてきました。

私は1つのことを除いてほとんどそこにいます。特定のジオメトリを使用した一部のアニメーションのクロスフェードには、r72 には存在しなかったわずかな遅延があります。r72 の BlendCharacter および Animation 関数をハックしてコールバックを許可したところ、うまく機能しました。73 では、イベント トリガーを介してこの機能が組み込まれているため、これは必要ありませんでした。

次のフィドルでは、すべてが意図したとおりに機能します (r72)。

http://jsfiddle.net/titansoftime/a93w5hw0/

これ (r78) はほとんど問題なく動作しますが、1 つのアニメーション (マジック アタック) には、アイドル アニメーションに戻る前に小さいながらも顕著な遅延があります。他のモデルでは近接アニメーションですが、一部のモデルではまったく問題ありません。それらはすべて72で適切に機能するため、非常に混乱しています。

http://jsfiddle.net/titansoftime/2sh95etj/

なぜこうなった?

更新:これは、アニメーション間のブレンドに限定されない問題であることに気付きました。ループしているアニメーションの 1 つに遅延が発生しました。

72: http://jsfiddle.net/titansoftime/8v0pasp5/

78: http://jsfiddle.net/titansoftime/n6apnj3z/

何が起こっている!?ある種の自動修正動作または 72 で削除されたそれらの線に沿った何かがありましたか?

0 投票する
1 に答える
409 参照

c++ - aiNode 名へのアクセス中に Assimp エラーが発生しました

assimp でアニメートされたメッシュ (骨格) を読み込もうとしていますが、いくつかの問題があります。

(ルート ノード)aiNode*の名前にアクセスしようとすると、プログラムがクラッシュします。Visual Studio の出力では、文字列の読み取りに失敗したと表示されます。

(私はこのチュートリアルに従っています。)

0 投票する
0 に答える
2174 参照

c++ - Assimp と OpenGL を使用したスケルトン アニメーション

最近、 OglDevEphenation OpenGLなどのいくつかの異なるチュートリアル/ソースに従って、Assimp ライブラリを使用して OpenGL でスケルタル アニメーションの読み込みと再生に取り組んでいます。私はまだそれがどのように機能するかを100%確信しているわけではないので、明確にするために:

  • キーフレームはaiNodeAnimmChannelsメンバーの からロードされますaiAnimation
  • これらのキーフレームは、親からのボーンの変換を表すボーンごとのマトリックスを生成するために使用されます
  • 各ボーンのマトリックスは、その親のマトリックスで乗算されます
  • 次に、この行列に、対応するボーンのオフセット行列 from が乗算されaiMesh->mBones[BONE]->mOffsetMatrixます。このようにして、キーフレームから生成されたボーンのマトリックスは、そのボーンのバインド ポーズのデフォルトの変換を置き換えることができます。
  • この最終的なマトリックスは、描画時に頂点シェーダーで使用されます (ボーンごとに 1 つ)。

私の質問の最初の部分: これは正しいですか? 私の知る限り、私の理解が正しいと仮定すると、論理的に機能するはずです。これに反対するソース/投稿/質問はまだ見ていません。

これの実装を (C++ で) 書きましたが、期待どおりに動作しません。メッシュの部分は想定どおりに見え、予想どおりのポーズになっていますが、ほとんどのメッシュはくしゃくしゃに見えます。大部分は区別可能で、ほとんどのメッシュを識別できますが、ほとんどのボーン マトリックスは正しくないようです。モデルをブレンダーで開くと、すべてのキーフレームが正しく、モデルが完全にアニメーション化されます。アプリケーションのスクリーンショットを投稿したいのですが、投稿する場所がありません (imageshack アカウントなどを持っていません)。

一部の骨だけが機能し、他の骨が機能しない理由はありますか?

これが私のコードの中で最も疑わしい部分です。クラスは LearnOpenGL.comjawSkeletonのクラスに基づいています。Model(接頭辞は無視してjawください。これは私が個人的に行うことです。)

のクラス プロトタイプjawSkeleton.h:

でのキーフレーム データのロードjawSkeleton.cpp:

個々の行列の準備jawSkeletal.cpp:

各ボーンのマトリックスをその親のマトリックスで再帰的に乗算し、それらをオフセット マトリックスで乗算するなど、示されていない他のいくつかのことを行います。個々のボーン マトリックスの代わりに単位マトリックスを使用すると、メッシュは通常のバインド ポーズで描画されるため、これがメッシュのインポートの問題ではないことはほぼ確実です。先ほど言ったように、メッシュの部分は正しく見えるので、スキニングの問題でもないと思います。この 1 つの問題について、約 1 週間調査してきました。何が起こっているのか手がかりはありますか?どんな助けでも大歓迎です。

0 投票する
0 に答える
658 参照

javascript - Three.js 間違ったボーンの向き

three.js スキンとリギング モデル、および bvh モーション キャプチャ アニメーション ファイルをロードしています。

モデルに bvh アニメーションを適用しようとすると、一部のボーンの方向が間違っています。

間違ったボーンの方向

ご覧のとおり、腕の向きが間違っています。

これは、モデルと bvh ファイルをロードする方法です。

bvh ファイルとモデル ファイルのスケルトンはまったく同じです。それがどこから来るのか、あなたには分かりますか?

ありがとう

0 投票する
1 に答える
1441 参照

assimp - Skeletal Animation: Assimp ボーン オフセット マトリックスを手動で導出する方法

http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.htmlからこのチュートリアルに取り組んでいます。 残念ながら、Assimp がどのようにボーン データを導出するかについては説明していません。グローバル逆変換は、ブレンダーが y 値を z 値に、z 値を -y に設定するために使用するデフォルトのマトリックス値であることを知っています。(または、少なくともそれが私のテスト md5 モデルが使用するものです)

Assimp が MD5 ファイルからオフセット マトリックスまたは逆バインド ポーズを導出する方法を理解しようとしています。たとえば、BobLampClean.md5meshには 32 個のジョイントと 32 個のオフセット マトリックスがあります。

オフセット行列を計算する他のサンプルを通じてオンラインで見たものから、次のようになります...

これらの各オフセット マトリックスを出力して、Assimp のボーン マトリックスと比較しましたが、役に立ちませんでした。何が間違っているのかよくわかりません...

編集の更新: わかりましたので、操作を間違って行っています。Assimp を使用しない実際のコード例をデバッグしており、Assimp のデータと同じ値を複製できます。データを正しく計算する方法について更新します。

0 投票する
2 に答える
348 参照

android - OpenGL ES2 骨格アニメーション

「骨格アニメーションを学ぼうとしているので誤解が多い」 Blender からエクスポートされた非常に単純な JSON 形式のファイルがあり、1 つの立方体と 1 つのボーンが 4 フレームだけ回転しているので、位置 vec4 の 4 つの属性を持つ VBO をロードします。通常の vec4、重み vec2、正しくレンダリングされたボーン インデックス vec2、ボーンには pos、rotq、scale があるため、次の関数を使用してボーンの変換マトリックスを作成しました

そのため、「私が理解しているように」バインドにその逆数を掛けてボーンの最終マトリックスを計算します。フレームごとに、このマトリックスに、以前の方法でpos、rotq、およびsclから生成したキーフレームマトリックスを掛けて、最後にアップロードしますこれらの行列を mat4[] uniform によって GPU に変換します。これが頂点シェーダーです。

レンダリング結果が予期しないものである場合、一部の面が消え、頂点がランダムに移動します。 アニメーションのレンダリング ここに画像の説明を入力