MovieRenderQueueでLevelSequenceのデルタタイムを制御する方法は無いでしょうか

やりたいこと:

・整数フレームだけでなく、サブフレームをレンダリングしたいです。

・サブフレームの分割数は、一定ではありません。(例:0~70Fは整数、70~80Fは1/2、80~82Fは1/10、82F以降は整数)

・誤差でフレームのズレが発生しないよう、更新ごとにデルタタイムを制御したいです。

試したこと:

・ClockSourceのカスタム > アクター はMRQでは反映されませんでした。

・MoviePipelineSettingを継承して、MRQ中にGEngine->SetCustomTimeStep()して、UEngineCustomTimeStepの中でFApp::SetDeltaTimeしてみました。

→ LevelSequence以外はDeltaTimeが反映されましたが、肝心のLevelSequenceは固定FPSで更新されました。

[Attachment Removed]

Umm… More people will understand in English.

We have stucked on slow motion support in MovieRenderQueue(MRQ).

We don’t know what to do next…

[Question]:

Is there a way to control the delta time of a LevelSequence using MRQ?

[Objective]:

We want to render subframes, not just integer frames.

The number of subframe divisions is not fixed.

(For example,

0-70F is integers,

70-80F is 1/2,

80-82F is 1/10,

82F and above are integers.)

We want to control the delta time for each update to prevent frame misalignment due to errors.

[Tried]:

- Custom ClockSource

> Actor was not reflected in MRQ.

- We inherited MoviePipelineSetting, called "GEngine->SetCustomTimeStep() " during MRQ, and tried FApp::SetDeltaTime within UEngineCustomTimeStep.

> DeltaTime was reflected for everything except LevelSequence, but LevelSequence was updated at a fixed FPS.

MovieRenderQueue support is desperately needed.

[Attachment Removed]

お世話になっております。

Movie Render Queue(MRQ)は、FApp::DeltaTime、CustomTimeStep、ClockSourceなどのリアルタイムのデルタタイムには依存していません。

LevelSequenceは、決定性と再現性を確保するために、フレームベースの時間システム(FFrameTime)を使って評価されています。

そのため、デルタタイムを変更しても、他のシステムには影響しますが、MRQにおけるLevelSequenceの評価方法は変わりません。

MRQには時間を制御するための独自の仕組みがすでに実装されていますが、それでもなおLevelSequenceの評価にデルタタイム制御が必要になる理由は何でしょうか。

また、フレームベースの評価では対応できない具体的なユースケースがあれば、ぜひ教えていただけたら、担当の開発チームに伝えることができます。

お手数ですが、よろしくお願いします。

[Attachment Removed]

お世話になっております。

MRQでは、tickごとにデルタタイムを制御する仕組みはありません。

MRQ実行中、LevelSequenceはFFrameTimeで評価されるため、Custom ClockSource、CustomTimeStep、DeltaTimeを変更しても、Sequencerの再生には影響しません。

スローモーションでサブフレームをレンダリングしたい場合、対応している方法は Sequencer内で時間の進み方を定義することです。

TimeDilationやTime Warpを使えば、MRQの時間管理と正しく連携でき、結果も安定し、エディタ上でのプレビューも可能です。

SequencerのTime Dilationを使わず、レンダリング時だけ時間を制御したい場合は、Movie Render Graphでカスタムタイムステップを実装する方法しかありません。

ただし、この方法はつよく推奨しません。MRQ / MRG の時間管理は、時間サンプリングやモーションブラーと深く関係しており、システム全体の中でも特に複雑な部分です。実装が難しく、問題が起きやすいです。

まとめると、

  • スローモーションには SequencerのTime Dilationを使うのがエピックがおすすめする方法で、弊社のタイトルでも使っているやり方です
  • MRG+カスタムタイムステップは可能ですが、自己責任になっておすすめしません

TimeDilationの利用が厳しいでしょうか?

[Attachment Removed]

お世話になっております。

この行動は仕様通りになっています。​

Sequencerでは、フレームの時間はフレーム開始前に決定されるため、10.5Fに置いたTimeDilationを同じフレーム内の最初の0.5Fに反映することはできません。TimeDilationはフレーム境界でのみ有効になります。MRQ自体はdeterministicですが、フレーム途中でのTimeDilation反映には対応していません。

このズレ(音ズレなど)を許容できない場合は、スローモーションをより高いフレームレートで元データにbakeする必要があります。

完全なサブフレーム制御を行う方法としてはMovieRenderGraphでカスタムタイムステップを実装するしかありませんが、これは高度で強く非推奨です。

元のcontent自体​を編集することがおすすめになります。

お手数ですが、よろしくお願いします。​

[Attachment Removed]

ご返答、有難うございます!​

> MRQには時間を制御するための独自の仕組みがすでに実装されています

こちらについて、どのように利用するのか教えて頂きたいです!

> どうやれば任意のタイミングでレンダリングできますでしょうか。

> また、フレームベースの評価では対応できない具体的なユースケースがあれば、ぜひ教えていただけたら、担当の開発チームに伝えることができます。

こちらについては、UE上でスローモーションをかけているので、サブフレームをレンダリングしたいです。

スローモーションにはTimeDilation/TimeWarpは使っておらず、ClockSourceをカスタムしています。

Thank you for your reply!

> MRQ already has its own mechanism for controlling time.

I’d like to know how to use it!

> How can I render at a desired timing?

> Also, if there are any specific use cases that frame-based evaluation cannot handle, please let me know so I can pass them on to the development team.

In this case, I’m using slow motion in UE, so I’d like to render subframes.

I’m not using TimeDilation/TimeWarp for slow motion; I’m using a custom ClockSource.

[Attachment Removed]

Time Dilation は可変フレームレートで再生した場合に、デルタタイムが正確に計算されないです。

10Fに置いたTimeDilationが10.5Fで発火した場合、遅れた0.5FにはTimeDilationを反映してデルタタイムを計算して欲しいです。

デフォルトのクロックソースでは、この0.5F分はTimeDilationが反映されず、これ以降は音ズレが発生したまま再生されます。

弊社のワークフローでは、この誤差は許容できません。

もし正確にTimeDilationを反映する方法があれば、ご教授いただきたいです。

Time Dilation does not calculate delta time accurately when playing at a variable frame rate.

If a Time Dilation placed at 10F fires at 10.5F, I would like the delta time to be calculated reflecting the Time Dilation for the delayed 0.5F.

With the default clock source, Time Dilation is not reflected for this 0.5F, and playback from this point onwards will continue to be out of sync.

This error is unacceptable in our workflow.

If there is a way to accurately reflect Time Dilation, please let me know.

[Attachment Removed]

ご回答ありがとうございました!

大変参考になりました。追加の質問はありませんのでスレッドは閉じて頂いて大丈夫です。

[Attachment Removed]