2012-02-02 11 views
1

現在、私の現在のプロジェクトの骨格アニメーションシステムを開発中です。私は読んだ後にどのように動作するのか理解していますが、いくつかの異なるプロジェクトのソースを見ている間に、なぜ骨のスケール、回転、平行移動の値が別々に保存されているのか疑問に思っていました。あなたはそれらをすべて1つのマトリックスに保存できますか?それは効率的ではないでしょうか、それほど効率の悪い別個の値を得るためにもっと数学を必要としますか?骨格アニメーションのSRT値を保存する

また、わたしがいる間は、明らかに行列を使って値を格納する2つの一般的な方法があります。ベクトルや四元数を使用します。後者は、ジンバルロックを避けるためにより頻繁に使用されます。しかし私のプロジェクトはわずか2自由度しかありません。私の価値を保存する最も効率的な方法は何でしょうか?

答えて

1

いいえ、4x4行列を使用しなければならないため、行列は効率的ではないため、16が浮動小数点になります。これは主に、回転+平行移動がマトリックスに格納されるためです。

値をSRT形式で保存すると、9つの浮動小数点数になります。回転四元数のwコンポーネントは、ロード時に他のものから再計算できます。

さらに、多くのゲームエンジンでは不均一なスケーリングがサポートされていないため、スケーリングでは1つの浮動小数点に縮小し、1つのボーンで8つの浮動小数点数にすることができます。

これは圧縮の前です:骨が特定のポイントを超えて移動しない(ボリュームにバインドされている)ことを知っているので、決して到達しない範囲に精度を割り当てるポイントがないので、 16ビットと言うと、ボーンごとに4つの浮動小数点数になります。

これで、私は決して圧縮の最後の部分を実装したことはありません。それは私には少し極端に思えました。私は時間がありませんでした。

しかし、骨当たり64バイトから骨当たり32バイトになるのは50%節約です!

関連する問題