UMovieSceneSequencePlayer による SetMaxFPS と LyraサンプルのULyraSettingsLocalによるSetMaxFPSの競合について

Lyraサンプル​の

FrameRateLimit_InMenu = 144.0f;

FrameRateLimit_WhenBackgrounded = 30.0f;

FrameRateLimit_OnBattery = 60.0f;

ULyraSettingsLocal::GetEffectiveFrameRateLimit()

等を使用した、SetMaxFPSの処理と​

UMovieSceneSequencePlayer で EMovieSceneEvaluationType::FrameLocked を利用する場合で

void UMovieSceneSequencePlayer::StartTimeControllerAndBroadcastPlayState()

で、現在のMaxFPSを保存して、​

UMovieSceneSequencePlayer::~UMovieSceneSequencePlayer()

void UMovieSceneSequencePlayer::StopInternal(FFrameTime TimeToResetTo)

​で保存した値を用いてSetMaxFPSして復帰する処理がありますが

バッググラウンドで動かしていて、レベルシーケンスなどの再生を開始し、ゲームウインドウをクリックするなどしてフォアグラウンド(アクティブウインドウ)に​してから、

レベルシーケンスの再生が終わると、バックグラウンド処理で設定された30FPSになってしまう​という問題があります。

なるべくエンジン改造は避けたいのですが、

UMovieSceneSequencePlayer 側では

​GEngine->bUseFixedFrameRate

GEngine->FixedFrameRate

​を利用することで、

ULyraSettingsLocal 側の設定と齟齬が起きないことはわかっています。

​UMovieSceneSequencePlayer の 実装と外からのSetMaxFPSの競合の問題を

今後解決する予定は有りますでしょうか?解決予定でない場合、

今回の対応方法で問題ないでしょうか?

よろしくお願いします。​

[Attachment Removed]

いつもお世話になっております。

ご質問ありがとうございます。

現在のところ、ご指摘いただいた件に関して、UMovieSceneSequencePlayerの実装等を変更する予定はございません。

今回のご指摘が本件に関する初めての報告であるため、問題として認識し始めるのもこれから・・・というのが正直な状況です。

今後の対応をお約束できるものではありませんが、本件については開発チームへ確実にフィードバックさせていただきます。

また、お手元でご検討されている bUseFixedFrameRate と FixedFrameRate を使用する方法は、シーケンサー側とゲーム側でFPS値を二重化できるため、ご指摘の競合問題を回避できる合理的な解決策であるかと存じます。一方で、PC版などでスペックが不足するローエンド環境では、固定フレームレート方式ならではのスローモーション現象が(フレームスキップの代わりに)生じてしまうリスクが生じ得ます。

スローモーション現象を避け、なおかつエンジン改造も避けたい場合、シーケンス再生完了後に「適正なFPSの再設定」を実施する(ULyraSettingsLocal::UpdateEffectiveFrameRateLimit()を呼び出す)ヘルパー関数をプロジェクト側に整備して利用するというアプローチも考えられます。

以上、よろしくお願いいたします。

(※1/22 16:30 誤字・脱字修正のため編集)

[Attachment Removed]

ご回答ありがとうございます。

FixedFrameRate を使用する方法にはそのようなリスクもあるのですね。

いただいた代替案含め検討し直したいと思います。

ありがとうございます。引き続きよろしくお願いいたします。

[Attachment Removed]

ご確認ありがとうございます。

ご指摘の件、社内にフィードバックを行っておきました。

それでは本件は回答済みとしてCloseさせていただきます。

以上、よろしくお願いいたします。

[Attachment Removed]