問題タブ [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.
graphics - ボーンのエクスポート ブレンダー
Blender で作成した単純な骨格メッシュがあり、OpenGL でレンダリングするためにエクスポートしようとしています。
私の質問は、メッシュ (特にアーマチュア/ボーン) を分析して C/C++ プログラムでレンダリングするために使用する最も簡単なエクスポート形式は何ですか?
メッシュ内のオブジェクトをレンダリングすることができたので (多くの問題はありませんでした)、これは問題ではありません。いろいろ検索していろいろなフォーマットを試してみましたが、実際にはどれも難しそうです。使用するのは素晴らしいことです.obj
が、私の調査によると、骨をサポートしていません。
したがって、ボーンを (簡単に) 解析するには、どの形式を使用すればよいでしょうか?
c++ - DirectX - スケルタル アニメーション メソッドが正しくない
DirectX 9 で骨格アニメーション用のプログラムを作成しようとしています。LoadMeshFromHierarchy 関数を使用してアニメーション メッシュをロードしました。アニメーション メッシュからキーフレームを読み取ってアニメーションを指示できるように、animController をバイパスしたいと考えています。ファイル (ex. tiny.x) を読み込んで、これらのキーを自由にループします。
これが私がこれまでに持っているものです...この時点で、.xファイルを正常に解析し、各アニメーションと、クラス(Anim)内の唯一のアニメーションセットのanimationkeyを保存しました。この更新機能を実行すると、アニメーション化されたメッシュが変形します。理由がわかりません...各フレームの変換マトリックスを更新するプロセスだと思います...ここに私のコードがあります:
私の方法は正しいですか?各フレームに対して最初に行うことは、変換マトリックスを恒等にリセットすることです。次に、各キー (移動、スケール、回転、およびマトリックス) の補間値を計算し、それを変換マトリックスに適用します。次に、フレームを更新します。マトリックス、そしてスキニングされたメッシュ。
何か案は?
c++ - 骨格アニメーション
私は骨格アニメーションの用語に不慣れで、骨格を使用してメッシュをアニメーション化するには、シーングラフで各ボーンノードを作成したボーンの階層を使用する必要があることを読みました。次に、メッシュを変形する必要があります補間前にボーンの逆絶対行列を取得します(これは彼らがポーズと呼んでいるものだと思います)。補間されたボーンの絶対行列を乗算して遷移行列を取得し、メッシュを変形するには、頂点に乗算する必要があります。トランジション マトリックスに重みを掛けて、このすべての結果を、同じ頂点を変形する他のボーンと合計します。
各ボーンの絶対値を取得するために、より具体的にするには、これを行います
今、relativeMatrix を 1 回だけ変更する補間の前に、この absMatrix 行列の逆を取得するので、頂点の変形を行うには、この関数を使用します。
頂点を変形させるボーンの親ではなく、すべての頂点がメッシュ軸の中心を中心に回転するため、これは機能しません。transition = InverAbs *absoulteMatrix が量を取得することを考えると、論理的だと思いました。補間によりボーンの回転が増加するため、20 度回転すると、頂点は頂点の原点から 20 度回転するので、頂点を変形しているボーンの親の周りで頂点を回転させるための何かが欠けていると思います。助けて。
これは、絶対行列ではなく、relativeMatrix に対する補間を行う方法です。絶対行列を更新するコードは上記のものです。
はい、私はこれを行い、骨を逆絶対値で乗算し、次に絶対行列で乗算し、完全に機能しますが、多くの乗算が発生しています。
animation - Maya から three.js へのアニメーション
Maya にリグ (スケルトンおよびソフト バインド) モデルがあります。モデルはすべて 1 つのシームレスなローポリで、単一の jpeg テクスチャがマッピングされています。スケルトンの簡単なアニメーションがあります。(関節回転)。ThreeJs(webGL)で動作させる必要があります。
モーフ ターゲットを使用して OBJ をエクスポートするにはどうすればよいですか? OBJ はできますが、モーフ ターゲットを取得するにはどうすればよいですか? 私が一緒に働いている開発者は、webGL で Maya のベイクされたアニメーション ファイル (.MC または .XML) を読むことができますか? Collada DAE をエクスポートしますか?
私たちを正しい方向に導くことができる助けがあれば、大歓迎です。
ありがとう
opengl - シェーダーにアップロードするときにクォータニオンを 4x4 マトリックスに変換する必要があるのはなぜですか?
OpenGL での骨格アニメーションに関するいくつかのチュートリアルを読みましたが、それらはすべて、回転にクォータニオンを使用し、変換に 3d ベクトルを使用しているため、行列ではないようです。
しかし、頂点スキニング プロセスになると、すべてのクォータニオンと 3D ベクトルを 4x4 マトリックスに結合し、マトリックスをアップロードして残りの計算をシェーダーで行います。4x4 マトリックスには 16 個の要素がありますが、クォータニオン + 3d ベクトルには 7 個しかありません。では、なぜアップロードする前にこれらを 4x4 マトリックスに変換するのでしょうか?
opengl - OpenGL : ボーン アニメーション、GPU で作業するときにバインド ポーズの反転が必要なのはなぜですか?
ソフトウェア スキニングを使用して MD5 ローダーを実装しました。md5 のバインド ポーズは、最終的な絶対位置と回転です。ジョイントに依存するウェイトの計算を行うだけで済みます。
GPU スキニングを実装しようとしましたが、行き詰まっています。これらの座標は最終的なものなので、3D ベクトルと四元数をマトリックスに変換してシェーダーにアップロードできないのはなぜですか? 私がここで読んだように: http://3dgep.com/?p=1356、バインド ポーズの逆でスケルトンを乗算する必要があります。しかし、私がする必要があるのは、最終的な行列を GPU にアップロードし、そこで残り (重みの合計など) を計算することだけだといつも思っていたので、この部分を理解していません。
インバース バインド ポーズの動作について教えてください。
r - Rでスケルトンまたはポリゴンオフセットアルゴリズムを探しています
この SO question An algorithm for inflating/deflating (offset, buffering) polygonsでいくつかの有用なリンクを見つけました。申し訳ありませんが、「ネット アクセスがないのでsos
機能しません。R でスケルトン アルゴリズムを実装している人はいますか?」
編集: StackOverflow リンク (上の画像) のように収縮したポリゴンを生成したいと思います。またはhttp://en.wikipedia.org/wiki/Straight_skeletonで見られるように。
animation - WebGL / GPU スキニング / 骨格アニメーション
私はイライラするほど、WebGL での骨格アニメーションの作業に近づいています。
バックグラウンド
無料で入手したゾンビウォークアニメーションのモデルがあります。すべてを 1 つの Collada ファイルにまとめてダウンロードしました。すべての頂点、法線、ジョイント インフルエンス インデックス/ウェイト、およびジョイント マトリックスを取得するためのパーサーを作成しました。次のようにして、キャラクターをバインド ポーズでレンダリングできます。
ここで、ジョイントのワールド マトリックスは、ジョイントの bind_pose_matrix に親のワールド マトリックスを掛けたものです。次のようにして、inverse_bind_pose_matrix を取得しました。
つまり、キャラクターをバインド ポーズでレンダリングすることは、アイデンティティ マトリックスをシェーダーに渡すだけなので、その部分をまったく正しく行っていない可能性があります。しかし、私が計算した逆バインド ポーズ マトリックスは、Collada ファイルによって提供されたものとほぼ同じであるため、それらが適切であると確信しています。
バインド ポーズのモデルは次のとおりです。
問題
先に進み、アニメーションの 1 つのフレームを使用してスキニング マトリックスを計算しようとすると (フレーム 10 をランダムに選択しました)、それでも男性に似ていますが、何かが明らかに間違っています。
最初に計算したのと同じ inverse_bind_pose_matrix を使用しています。代わりに、各ジョイントのキーフレーム/アニメーション マトリックスをその親の新しいワールド マトリックスで乗算することによって計算された、新しいワールド マトリックスを使用しています。
コードベース全体のどこでも転置を行っていませんが、マトリックスのほとんどすべての組み合わせを転置しようとしても無駄でした。
これが彼のアニメーション フレーム 10 ポーズの私のモデルです。
関連するコード
頂点シェーダー:
私のパーサー全体をGitHubで見ることができます (本当に必要な場合は...) 。モデルはここでライブで見ることができます。
opengl - 骨格アニメーション、変形乗算
スケルトン アニメーション システムを実装しましたが、適切に機能させるために最後の 1 つの詳細が欠けているようです。
キャラクターの一部だけに骨があるアニメーションを作りました。この画像では、スティックマンは腕を振っていますが、他のスティックマンと比べて腕が間違った場所で振っています。(彼の足の間はほとんど見えません)
行列計算の基本を概説して、何か間違っているかどうかを確認します。
ボーン固有の絶対および相対アニメーション マトリックスの計算 (キーフレーム マトリックス データに基づく):
GPUに送信するskinningMatrix。これにより、次のように出力されます。
ここで、offsetMatrix はバインド ポーズでメッシュ空間からボーン空間に変換する変換です。
私のシェーダーでは、次のことを行います。
私の計算で何が間違っている可能性があるかについてのヒントはありますか?