問題タブ [skeletal-mesh]
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.
javascript - Three.js - スキニングされた骨格メッシュ インスタンス、アニメーション、ブレンド
私は、それを使用している多くのプレイヤーと単一のスキン プレイヤー メッシュを持つ小さなマルチプレイヤー ゲームに取り組んでいます。いくつかの背景: Maya と Blender の collada エクスポートを介してロードしようとしました。どちらも何らかの形式のアニメーション データを参照しているようですが、動作させることができませんでした。私は Maya JSON エクスポーターを試してみました。このエクスポーターは、マテリアル ラインのみで小さな 1k ファイルを吐き出しました。最後に、ブレンダーの JSON エクスポーターが機能しました。スキンメッシュを読み込もうとしている人には、これが非常に役立つことがわかりました: Model with bone animation (blender export) animating correctly in three.js
これで、JSON ローダーからのgeometry
オブジェクトとmaterials
配列が得られました。
skinning=true
マテリアルを設定し、 を作成THREE.SkinnedMesh
し、シーンに追加し、アニメーションを追加しTHREE.AnimationHandler.add
(が実際に何をするかはよくわかりAnimationHandler
ません)、 を作成しTHREE.Animation
、 を呼び出し、 を呼び出すplay()
ことができますupdate(dt)
。最後に、単一のメッシュとアニメーションをシーンで再生しています。
今私が欲しいのはこれらです...
多くのインスタンス- シーン内で複数のプレーヤー モデルを実行したい。
- 同じメッシュとアニメーション データを何度もロードしたくありません。
- アニメーション時間はインスタンスごとにする必要があります (したがって、すべてが同期してアニメーション化されるわけではありません)。
同じモデル
THREE.SkinnedMesh
を多数作成する必要がありますか?THREE.Animation
どこに入ってTHREE.AnimationHandler
くる?多くのアニメーション- アイドル/実行サイクルを個別に再生できるようにしたい。
私の知る限り、アニメーション キーフレームのタイムラインは 1 つしかありません。Three.js はこれをどのように分割しますか、それとも手動で行う必要がありますか?
アニメーション ブレンディング- キャラクターが実行を停止し、アイドル アニメーションで静止している場合、一方から他方への瞬時のスナップは必要ありません。実行アニメーションを一時停止し、その状態をアイドル アニメーションにブレンドしたいと思います。
これは現在、スキン メッシュ (モーフ ターゲットではない) で可能ですか? これに関する例やドキュメントはありますか?
正しい方向への微調整であっても、どんな情報でも大歓迎です。私は完全なチュートリアルではありません。これらの機能に関するより高度な情報が必要です。
私は喜んで2と3を実装することができましたが、threejs のスキニングとアニメーションのフレームワークに関する情報/説明文書が必要です。たとえば、これはあまり続きません。
[編集]
ありがとう、@NishchitDhanani、このページは非常に優れていますが、複数のアニメーションや骨格アニメーションのブレンドについては言及していません: http://chimera.labs.oreilly.com/books/1234000000802/ch05.html#animating_characters_with_skinning
このページには、複数のアニメーションがまだ現在の問題であると書かれていますが、それ以上のものではありません (コメントで少し議論されています): http://devmatrix.wordpress.com/2013/02/27/creating-skeletal-animation-in-blender-and -exporting-it-to-three-js/
現在の答えは...
- 多く
THREE.SkinnedMesh
を使用し、まだ確信が持てないTHREE.AnimationHandler
. - わからない。で開始/終了キーフレームを手動で変更する方法があるかもしれません
THREE.Animation
。 - 私の知る限り実装されていません。
THREE.Animation
2 つの を取り、その間を補間できるカスタム シェーダーを作成してみるかもしれません。
animation - Windows での WebGL ThreeJs スケルタル アニメーションの問題
プロジェクトの WebGL レンダラーでthree.js (バージョン 61)を使用して、Kinect によって検出されたデータを使用したライブ アニメーションを作成しています。
THREE.SkinnedMesh
オブジェクトを使用して、骨格アニメーションをサポートする 3D モデルを作成しました。
次のシナリオで、ライブのスケルトン アニメーションをテストしました。
- Windows 7 でのテスト 1
- Mac OS X 10.9 でのテスト 2
...そして私はこの結果を持っています:
https://docs.google.com/file/d/0B6yEkHWd_4nEVkJ4RzZuMENmZUE/edit?pli=1
Windows では、一部の頂点の最終位置が適切に計算されないという問題があります。
私はこれらのブラウザを使用しました:
- Google Chrome バージョン 31.0.1650.63
- Firefox 26.0。
...結果は同じです。
問題は、異なる GPU ドライバーと WebGL を扱うことですか?
私はこのトピックについて十分な知識がありません。
Windows システムで THREE.SkinnedMesh オブジェクトを使用してアニメーションを実行するときに、同様の問題に遭遇して解決した人はいますか?
テスト シナリオの
メモ
- Kinect のモックがあります。Web アプリは、ローカルで実行されているサーバーからデータを受信します。
- リギング モデルを Blender から three.js にエクスポートし、スキン メッシュのすべてのパラメータが適切にエクスポートされました (2 番目のテストで示されているように)。
c++ - OpenGL で MD5 モデル Bob からノードにボーン名をロードしない assimp
現在、ASSIMP を使用してアニメーションをテストするための MD5 モデルをロードしています (次のチュートリアルから: http://ogldev.atspace.co.uk/www/tutorial38/tutorial38.html )。これまでのところ、すべて問題なくロードされているように見えます (静的モデルは問題なくレンダリングされます) が、何らかの理由で Assimp のノードにボーン名が表示されません。各ノードの名前は<MD5_Root>
or<MD5_Mesh>
であり、表示すべきボーン名ではありません。
以下は、ASSIMP 内のすべてのボーン名をノード名でチェックするコードのスニペットです。文字列が になるポイントに到達することはありません"HOI"
。nodeName は「pubis」や「upperarm.L」などのボーン名にする必要があります。
また、.MD5 ファイルの一部で、何か役立つことがわかります。
何らかの理由で名前が正しくロードされていないか、MD5 ファイル自体にエラーがあるのでしょうか?
c++ - bindPose マトリックスの計算 (スケルトン アニメーション)
Ive は iqe (Inter Quake Exporter) 形式の解析に成功しましたが、今は bindpose での表示に固執しています。
すべての頂点には奇妙な変換があり、ルート ボーン (向きのために完全なメッシュをカバーする) がその頂点に影響を与える唯一のボーンではありません。メッシュの腕・肩・首部分に見られます。このメッシュには 3 つのボーンがあります。メッシュ全体を覆う 1 つのルート ボーンと 2 つのアーム ボーン。バックグラウンドでメッシュがどのように見えるかを確認できます (obj としてエクスポート)
理解を深めるために、次のシステムがあります。
1.すべての頂点データを 1 つの大きな vbo (頂点、UV、法線、タンジェント、バイタンジェント、boneIndicies(4) (ジョイント リストのインデックス)、および boneWeights(4)) にロードします。
2.すべてのジョイントをジョイント リストに追加し、ツリー システムを作成します (位置、回転、および親ポインタを含む単純なリンク リスト)。
3.ボーンマトリックスと呼ばれる個別のリストがあり、ここにボーンマトリックスが格納されています。現在はすべてのフレームですが、後で各アニメーション フレームの行列を事前に計算します。
次の方法で骨マトリックスを計算しようとします。
転置されたジョイント (そうでなければメッシュが逆さまになる) を boneMatrices に格納し、それをシェーダーに送信します。
boneMatrix は、matrix4 の std::vector です
ルート ボーン バインドの計算は正しくなければなりません (少なくとも私はそう思います)。これは、頭が適切な場所にあり、目も (現時点ではボーンの影響を受けていないため) あるためです。
c++ - マトリックスを組み合わせる (Collada ファイルの DirectX 11 を使用した C++ のスケルタル アニメーション)
C ++で骨格アニメーションを行うには、複数のマトリックスを組み合わせる必要があります。
私はすでに次の行列を取得しています:
- COLLADA ファイルから Shape Matrix をバインドします。
- COLLADA ファイルのすべてのボーンの Bone Matrix。
- COLLADA ファイルのすべてのボーンに Pose Matrix をバインドします。
- 計算されたすべてのボーンの逆バインド ポーズ マトリックス。
- COLLADA ファイルからのアニメーションのボーンごとのすべてのフレームのフレーム マトリックス。
これらの行列を呼び出しましょう:
- bindShapeTrans (XMFloat4X4)
- localBoneTrans (XMFloat4X4 のベクトル)
- bindPoses (XMFloat4X4 のベクトル)
- invBindPoses (XMFloat4X4 のベクトル)
- アニメーション (XMFloat4X4 のベクトルのベクトル)
次に、これらから行列の配列を作成して頂点シェーダーに渡す必要があります。頂点シェーダーは、それを使用して、重みを考慮して頂点の最終的な位置を計算します。
そしてここで迷子になりました。私はすでに多くのチュートリアルを読みましたが、マトリックスを結合する順序についてはすべて異なることを言っています。また、マトリックスに異なる名前を使用しているため、今では完全に混乱しています。
では、正しい最終的な行列を取得するには、これらの行列をどのように組み合わせる必要がありますか?
ご協力ありがとうございました。
c++ - 頂点シェーダーでスケルトン ウェイトを転送する方法は?
C++ コラーダ リーダーを作成しましたが、opengl ダイレクト モードを使用して 4ms で 3K アニメーション メッシュを描画します。それは遅すぎる。
そこで、頂点シェーダーを使用することにしました。スケルトンでは、各頂点には各ボーンの重み (ゼロ以上) があります。40 個のボーンを持つ 3K メッシュの場合、オブジェクト全体に 120,000 のウェイトがあります。
唯一の問題は、GLSL では大きなサイズの均一な配列を宣言できないことです。
たとえば、これはコンパイルされます (頂点シェーダー):
/////////////////////////////////////////
/// これではありません:
////////////////////////////////////////
glVertexAttribPointer() を使用して各頂点の属性を設定できるいくつかのページを見てきました。これは、1 ~ 4 個のボーン (vecX 属性を使用できます) がある場合に実行されますが、GLSL (私の場合は 1.20) は属性配列を受け入れません。
opengl - Assimp Skeletal Animation : 頂点に関連付けられたボーン
Assimp スケルトン アニメーションを統合しようとしています。このチュートリアルに従ってください。
私がしようとしている変更は、固定機能パイプラインを使用することです。
問題: 位置、テクスチャ座標、および法線データは問題ありませんが、チュートリアルで説明されているように、頂点ごとに 4 つのボーンとウェイト データがどのように取得されるかわかりません。