← All ideas
  • Published 7 Jul 2024

Markers = Named frame numbers, and more!

Have you ever been in this situation? You're working on a VFX explosion that needs to render on top of some footage, starting on frame 571 . So you:

  • import your scene footage (camera background + compositor setup)
  • set your rendering range from frame 571 to 800
  • have a particle system that emits at frame 571 and stops at 591
  • have a fluid simulation domain with a cache range from frame 571 to 800 )
  • you add a marker on the timeline called BOOM at frame 571 to remind yourself where the explosion starts

Then the director asks you to start the explosion a second later, so now you need to move everything 24 frames later. Sigh.

Here's what I'd like:

  • anywhere you can type a frame number, you can type a marker name, optionally with a math expression. This makes markers named frames .
    • Now you can make your fluid sim cache range start at frame BOOM and end at frame BOOM+179
  • anywhere you can type a frame number, you can refer to the start and end of VSE strips ( foobar.mpg[start] and foobar.mpg[end] ) optionally with expressions. This makes VSE strips named frame ranges .
    • So if I have a sound effect like explosion.mp3 I can have my particles start emitting at explosion.mp3[start] and if I drag my sound effect earlier or later on the timeline, my particle system updates too
  • anywhere you can type a frame number, you can refer to the start and end of NLE actions. This makes NLE actions named frame ranges .
    • So if I have an action called pull-trigger on the NLE, I can define my smoke sim as starting at pull-trigger[start]
  • as a happy side effect of all this, an action on the NLE "Frame Start" can be set to match a VSE clip.
    • So if I have a dialog audio clip called one-liner.mp3 and I'm making a lip-synch action for a character, I can have the action on the NLE start at one-liner.mp3[start] and then if I drag my dialog a little bit later in the VSE, the corresponding lip-synch action moves too

Hope you like this idea, please vote for it if you do!

100%

Development Status: Open

Upvote 4 Downvote 0
Threedio
7 Jul 2024

3 Comments

Lauloque

Interestingly, it is possible to use a VSE strip's start frame as a driver to another value:

  1. copy data path:
    demo pic
  2. create driver:
    demo pic
  3. enjoy:
    demo gif

Though, the missing thing here is that the scene's start/end frames can't be driven. So are the markers' frame properties. In fact, those data paths can't even be copied from the menu:

demo pic

But you can access them from python:

demo pic

That's a lot of inconsistencies there. I would understand the current frame not being driveable, but not the rest.

2
Threedio Author

A Blender-like Approach?

I've been thinking about what this would look like if it was implemented as a native feature in the most Blender-like way possible. I'm not making a proposal, just engaging in a thought experiment, but who knows, it might capture someone's imagination. Here's my fantasy, let me know what you guys think:

Temporal Parenting

Design a feature called "temporal parenting" (I'll abbreviate it as T-parenting ) which is analogous to Blender's existing parenting. T-parenting links an object relative to another object in the t dimension the same way that parenting links an object's transform relative to another's in 3D space.

Relevant objects are things like actions in the NLE, clips in the VSE, animation frame start/stop, simulation start/end. An exhaustive list would include some of the less obvious things like the start/offset of a camera's background image sequence, and the start/offset of a compositor image sequence node. Markers would be the equivalent of "empties", points in time with no functionality but still useful in T-parenting. As a special case, it should be possible to "hook" an object to an individual keyframe, analogous to hooking to a vertex.

As with regular parenting, if an object has a T-parent, you can still drag it around on the timeline (it's not "locked" in absolute time), but you'll be dragging it relative to its T-parent.

"Start" & "End" T-Parenting

One nuance is the relationship of "Start" and "End" T-parenting. In some cases (like Simulation Frame Start and Frame End) the start and ends should clearly have separate T-parents, so sim start is T-parented to a marker called Boom indicating the start of an explosion, and the end is T-parented with a marker called SmokeClears . But if you want the simulation length to always be 50 frames long even when it is moved relative to its T-parent, you could just T-parent the Simulation End to the Simulation Start ( +50 frames, for example).

An Action in the NLE would be the opposite - by default the End should be T-parented to the Start based on clip length, so that generally the Action might be moved relative to its T-parent, but the timing should not be changed. But it should be possible to T-parent the Action's start and end separately, so the timing of the action is slower or faster.

A very thorny detail is Image Sequence nodes in the Compositor and Shader Editor. What is the "start" of an image sequence? It's the first frame (for a PNG sequence, that could be frame 500 - the first file might not be 1 ). But what if some frames are later prepended to the PNG sequence (say, you start your simulation earlier in Houdini). Now what happens to the parenting? This would need some Deep Thought.

UI Elements

On the UI front I see two things needed, one small and one big:

  • if an object is T-parented, any relevant fields (e.g. Frame Start ) would need an indicator, like a color, showing that the field is T-parented, and might contain the offset from the parent (so Frame Start: +25 or something like that)
  • A new view called Universal Timeline, which shows all temporal objects (actions, VSE, markers, and everything else) on a multitrack grid. Dotted lines would indicate T-parenting relationships, similar to how a dotted line shows regular parenting relationships in the 3D viewer. In the Universal Timeline, selecting some objects and pressing p would establish a T-parenting relationship from the selected objects to the active object. This would make it easy for an animator to visually organize the timing of various elements in a hierarchy of relative relationships.

Feedback?

I think an approach like this would be immediately intuitive to Blender users. It would be very hard to implement, especially for things like image sequence nodes which have an unintuitive way to represent a position in time. But I enjoyed this thought experiment -- join me with your thoughts and let me know what you think.

ManBlender

This can be combined with other: blender.community/c/rightclickselect/m2Qr/ KSP - Keyframe Script Python (new type key on time line - with python)