2

スキニングに頂点ごとに 3 つのウェイトを使用する CG ソフトウェアからアニメートされたメッシュをインポートしています。それぞれが他の回転軸 (X、Y、Z) に重みを付けます。それは非常に説得力のある効果を生み出し、GPU でリアルタイムにアプリでこれを実現したいと考えています。

現時点では、アニメーションにデュアル クォータニオンを使用しており、1 つではなく 3 つのウェイトでそれらをウェイト付けしたいと考えています。最初は単純に見えます。i、j、k (またはシェーダー表記では x、y、z) コンポーネントにこれら 3 つの重みを付けるだけです。

q.x *= weight.x
q.y *= weight.y
q.z *= weight.z

しかし、問題は実数成分 (w) にあります。適切な重み付けの仕方がわかりません。

3 つの重みすべての平均を掛けてみましたが、奇妙な結果が得られました。

q.w *= (weight.x + weight.y + weight.z) / 3

軸の周りの回転によって重み付けされた平均は完全に機能しますが、1 つの軸の周りの回転のみです。同時に 2 つまたは 3 つの軸の周りにゼロ以外の回転がある場合、視覚的に完全に間違った結果が得られます。

q.w *= (weight.x * q.x + weight.y * q.y + weight.z * q.z) / (q.x + q.y + q.z)
4

0 に答える 0