GafferHQ / gaffer

Gaffer is a node-based application for lookdev, lighting and automation
http://www.gafferhq.org
BSD 3-Clause "New" or "Revised" License
950 stars 205 forks source link

Timeline / Viewer playback controls #4287

Open andrewkaufman opened 3 years ago

andrewkaufman commented 3 years ago

Summary

We'd like user preferences to lock the playback in the a Gaffer 3d Viewer to 24 fps (or some arbitrary framerate which may not necessarily be the script level fps). Having a hud display of the playback fps would also be helpful.

User story

What

When using Gaffer as an animation QC tool, matching fps of the performance is important to judge the motion. When using Gaffer to animate (eg moving lights) this can be similarly important.

Why

Light & mid-weight scenes both compute & draw fast enough for the viewer to progress too fast to accurately judge animation.

The fps HUD gives useful visual confirmation to the artist that they playback is correct. For developers& TDs, it is also a useful heuristic for informally measuring tool or backend optimizations.

johnhaddon commented 3 years ago

or some arbitrary framerate which may not necessarily be the script level fps

What the reason for this part? I would much prefer a single framerate control to rule them all than two settings that apply in different circumstances. The latter seems like a recipe for confusion...

andrewkaufman commented 3 years ago

It came up as part of a Motion Clip preview tool. The clips are captured at 60fps but are being viewed (from a secondary viewer) within a script that is otherwise 24fps. The actual artist wording was "can we get a button to lock the playback to 24 fps or some input framerate". We don't allow artists to change the script fps (its locked to show specs), and even if we did that would result in worse playback in the primary viewer in this case. With multiple viewers within the same app, I think it makes sense to allow different playback rates.

johnhaddon commented 3 years ago

So it seems that at least part of the problem here is that the Playback class used by the timeline makes no effort to lock the playback to the script fps. It simply cycles through the frames as quickly as they can be drawn, which will sometimes be faster than than the script fps, and sometimes slower. We definitely need to sort this out, but I don't think that necessarily implies the need for a second fps setting. Perhaps the following modes :

It came up as part of a Motion Clip preview tool. The clips are captured at 60fps but are being viewed (from a secondary viewer) within a script that is otherwise 24fps.

I'm not sure I understand the use case properly yet. If the clips are being used in a script that is 24fps, why is viewing them at 60fps desirable, since it will show frames that won't exist in the final renders? And if it's about previewing the motion in its source state, why not use a secondary script with the appropriate fps dedicated to that?

I hope I'm not coming across as too argumentative. I'm sure there are things we need to improve here, but I want to make sure we're solving the right problem, and ideally without introducing a setting that could be misinterpreted and confused with the script fps.

andrewkaufman commented 3 years ago

Ok, lets ignore the secondary fps idea, the gist of the user need is what you've identified "Playback class used by the timeline makes no effort to lock the playback to the script fps"

I'm not sure about the proposed modes though.... I don't know that artists would find those modes intuitive. Probably worth surveying some key users when this issue gets into the WIP board.

johnhaddon commented 3 years ago

Sounds good. Perhaps the mode suggestion is overcomplicating things, and EveryFrame mode is sufficient if coupled with an FPS readout in the Viewer to let people know when drawing is too slow to lock to the script framerate?