3Dアニメーションの特殊なTrackTypeとInterpolationType

Godotバージョン

4.3 stable

OSとそのバージョン

-

使用言語

GDScript

内容

Animationをコードから作成すると、TrackTypeInterpolationTypeがいろいろあることに気づきました。

GLTFのアニメーション読み込んだ時にも使われるトラックだったので
最適化されているんだなということはなんとなくわかります。

ドキュメントにはふつうのValueトラックよりもパフォーマンスが良いという記載がありました。

For 3D position/rotation/scale, using the dedicated TYPE_POSITION_3D, TYPE_ROTATION_3D and TYPE_SCALE_3D track types instead of TYPE_VALUE is recommended for performance reasons.

一方で、インスペクターからPositionやRotationでアニメーションのキーを打つと、Valueトラックで登録されてしまいます。

質問です。

1.「 パフォーマンスが良いよ」ぐらいの認識で良いのでしょうか?
2. エディタ画面操作で、InterpolationTypeのトラックを他のものに変更することはできますか?
3. そのうち3DのPositionキーを打つと自動的にPositionトラックになるような予定はあるのでしょうか。

エラーメッセージ

-

スクリーンショット

内容に記載。

1.「 パフォーマンスが良いよ」ぐらいの認識で良いのでしょうか?

パフォーマンスに関して補足すると以下の3点が Value トラックよりも推奨される理由です。

  1. Animation.optimize() による最適化が可能(前後キーの加速度比較による不要なキーの削減)
  2. Animation.compress() による圧縮が可能(Vector3 データを八面体展開図の UV として Vector2 に変換することによるビットパッキング)
  3. 再生時に Node3D として参照をキャッシュしてプロパティに直接アクセスするため、プロパティを逐次検索する ValueTrack よりも値の適用が高速

Animation.optimize() については GUI からの操作は可能でしたが、なぜかいままで GDScript の方には expose されていなかったため、これは 4.4 以降で有効になります(#96835

  1. エディタ画面操作で、InterpolationType のトラックを他のものに変更することはできますか?

できます。ただし、Value トラックが持つ Update Mode オプション(Discrete、Capture)については利用できず、Continuous モードのみ利用可能である事に注意してください。

  1. そのうち3DのPositionキーを打つと自動的にPositionトラックになるような予定はあるのでしょうか。

Todo としては存在していますが、他に優先度が高いタスクが多いのでどなたか Pull Request を出して頂けると助かります。

ちなみに、Skeleton3D の Bone Pose は独自のインスペクタプラグインで実装しているため Pos/Rot/Scl トラックを挿入するようになっています。それ以外の場所ではキーイングを行なっている場所がインスペクタの深い所でハードコーディングされてしまっているため、それなりの作業が必要になるというのが個人的な所感です。

実装の方向性としては恐らく PropertyHint などにトラックタイプを指定するようなヒントを追加するという形が適切かと思います。また、BlendShape トラックについても同様に適切なトラックタイプを挿入できるようにする必要があります。

1 Like

ありがとうございます!
良さそうなので優先的に使うようにしてみます。

このトピックは最後の返信から 60 分が経過したので自動的にクローズされました。新たに返信することはできません。