アニメーションの圧縮

アニメーションは、大量のメモリを消費する可能性があります。コストを削減するために、Stingray では不可逆的圧縮スキームを使用します。書き出されるときに、アニメーションは 30 Hz でサンプリングされ、キー フレームが記録されます。データのコンパイル中、エンジンはこれらのキー フレームと一致するカーブに合わせようとします。その後、これらのカーブの制御点が圧縮され、精度がやや失われます。最後に、再生中、エンジンはカーブを補間して、特定の時間値のポーズを探します。エンジンが補間に使用するカーブは、DCC ツール(MotionBuilder など)で使用されるカーブとは異なることに注意してください。エンジンは圧縮専用の独自のカーブ形式を使用し、これは DCC カーブとは一致しません。

圧縮するとアニメーションにわずかな変化が生まれ、DCC ツールのゲームとまったく同じではなくなります。クリップ設定を使用して、圧縮量をコントロールし、エラーを削減できます。位置、回転、またはスケールに対して、いつでも(クリップごとに)圧縮をオンまたはオフにできます。

Stingray の不可逆的なアニメーションの圧縮は、 2 つのメカニズムに基づいています。第 1 に、カーブはデータにフィットされます。これらのカーブは、元のアニメーション キーより少ないデータで表現できます。カーブは元のアニメーション キーに正確にフィットしない可能性があり、これによってアニメーションにエラーが発生することがあります。

第 2 に、カーブをコントロールするパラメータは、できるだけ消費するメモリが少ないように、少ないビットにパックされます。たとえば、パックされた回転値は 4 バイトしか使用しません。完全な回転値は 16 バイトを使用するため、メモリ消費が 4 分の 1 に削減されています。ただし、このパッキングでも多少の情報は失われるため、アニメーションに別の変化が発生します。

これらの変化の結果、アニメートされたボーンは、予想した位置からやや外れることがあります。ノード チェーンの各ステップには追加のエラーが発生するため、これらのエラーは末端(手および足)でよく見られます。親に多くのボーンがあるほど、変化は大きくなります。

リンク ノードが 100 のむちなど、途方もなく長いノード チェーンを作成した場合、違いがはっきりと見えます。

通常、変化は非常に小さいため、実際に気づくのは、アニメートしたオブジェクトが他のオブジェクトと相互作用するときのみです。たとえば、ウォークスルー アニメーションでは、このエラーによって、足が地面に対してスライドすることがあります。プレイヤーが両手武器を持つアニメーションでは、2 つの手が互いにスライドすることがあります。

このような問題を解決する方法の 1 つは、エラーが小さくなるように圧縮の量を減らすことです。別のアプローチは、コンストレイントを使用することです。たとえば、、両手武器の場合、常にグリップ形状のままになるように、1 つの手をもう 1 つの手によって制限できます。

関連項目