先日、開発中のエンジンバージョンを5.4.2から5.5.4に引き上げたのですが、それ以降60fps1フレームで出力したアニメーションのインポート時に
<br/>
[ : ‘’, AnimSequence] Animation Payload [RootNode.model.jnt_org.root_scale.root.hip_0_SkeletalAnimationPayloadKey] has unexpected number of Baked Transforms.
<br/>
のような警告がでるようになりました。
5.4.2の時は出ていなかったと担当者が申しておりますが、なにか情報はありますでしょうか。
実際にインポート時に警告が出るアニメーションのfbxを添付いたしました。
よろしくお願いします。
再現手順
60fps1フレームのアニメーションをインポートする
お世話になっております。
ご質問ありがとうございます。
UE5.5では、従来のFBXインポータに代わり、Interchange Frameworkがデフォルトとなりました。
この新しいインポータには、アニメーションデータに含まれる「ベイク済みトランスフォーム数」に対する検証が新たに加わっており、今回のケースはそのチェックに引っかかったものと考えられます。
Interchange Frameworkでは、デフォルトのサンプリングレートに30fpsを想定しており、ここから逆算した1/30秒=0.033秒を、アニメーションの最小長として扱う仕様になっています。
そのうえ、仮に「60fps・ 1フレーム(約0.016秒)」のアニメーションデータをインポートした場合でも、エンジン内部ではこれを最小長である0.033秒へ補正して処理を進めてしまいます。
const double SequenceLengthForAnimationPayload = FMath::Max<double>(AnimationTransformPayload.RangeEndTime - AnimationTransformPayload.RangeStartTime, MINIMUM_ANIMATION_LENGTH)
この補正処理により、インポータが期待するトランスフォーム数(0.033秒ぶん)と、実際のアニメーションデータが持つトランスフォーム数(0.016秒ぶん)とのあいだに不一致が生じ、警告が発生するというのが今回の現象です。
■回避策について
以下のいずれかの対応をご検討ください。
・1. 60フレームで2フレーム以上のアニメーションを出力する
→アニメーションの最小長を満たすため、エンジンの期待するトランスフォーム数と実態の不一致が発生しなくなるはずです
・2. AnimTypes.hを改変し、デフォルトのサンプルレートを60に引き上げる
`- #define DEFAULT_SAMPLERATE 30.f
- #define DEFAULT_SAMPLERATE 60.f
#define MINIMUM_ANIMATION_LENGTH (1/DEFAULT_SAMPLERATE)`なお、エンジン内部ではデフォルトのサンプルレートを30に定義していると述べましたが、インポート時には常に、データで指定したサンプルレートが優先されます。そのため、一般的なアニメーションのインポートでは、このハードコードされたサンプルレートはほとんど何の影響力も持ちません。しかし、今回のようなエッジケース(極端に短いアニメーションデータのインポート)において、思わず影響が出てしまった形です。
(60fpsのゲーム開発において、「固定ポーズを表現する最短のアニメーションデータ」として、60fps・1フレームのデータを制作・インポートするケースは珍しくないことかと思います。エンジン側の対応をお約束できるものではありませんが、本件は開発チームにフィードバックとして共有させていただきます)
以上よろしくお願いいたします。
ご回答ありがとうございます。
了解いたしました、デザイナーと相談して対応を決めたいと思います
> 本件は開発チームにフィードバックとして共有させていただきます)
よろしくお願いいたします。
お世話になっております。
ご確認ありがとうございます。
それでは本件は回答済みとしてCloseさせていただきます。
もし本件に関連したご質問やご不明点がある場合は、一定期間内であればコメントにご追記いただくことで、自動的に再Open状態に戻りますので、ご利用ください。もちろん、新規のご質問としてご投稿いただいても問題ございません。
以上、よろしくお願いいたします。