0
$\begingroup$

I just created a geometry node to display an object only between two specific frames (I find animating enter image description here a bit less practical as I often need to create two keyframes next to each other to switch the state, and it's also not very clear when looking at the dopesheet if an object is visible or not, and I also can't easily copy/paste this to many objects at the same time):

enter image description here

It is now quite simple to copy paste this to many objects (just select them all, last being the object with the modifier, then I go in the drag down menu and I copy the modifier to all instances). It is also quite clear when selecting an object when it is visible... except that it integrates poorly with the dope sheet: now it not possible anymore to translate my whole animation without going through all the modifiers manually (I often need to do that if I forgot to animate something at the beginning of the animation). So would it be possible to:

  1. "link" the frame number From frame to an actual keyframe that I could move to automatically update the value in the modifiers?
  2. "link" the frame number From frame to a marker. This way, when I move my markers it also moves the animation.
$\endgroup$
4
  • $\begingroup$ AFAIK a keyframe and a marker's positions in the timeline can't be animated $\endgroup$
    – Gorgious
    Commented Mar 15, 2022 at 15:52
  • $\begingroup$ @Gorgious it's not really that I want to animate the marker, but more that I want to get a kind of driver reading the time value of the marker (or a given reference frame). But I guess it's not really possible... So people don't have any robust way to translate a whole animation, taking into account the quick effects? $\endgroup$
    – tobiasBora
    Commented Mar 15, 2022 at 17:07
  • $\begingroup$ @quellenform the question has not been solved, as pointed out by the person that answered in the very first sentence. $\endgroup$
    – tobiasBora
    Commented Oct 25, 2022 at 12:58
  • $\begingroup$ Ah, all right, then the correct answer here should be: No, unfortunately not possible. $\endgroup$
    – quellenform
    Commented Oct 25, 2022 at 13:01

2 Answers 2

0
$\begingroup$

Oh, I just see that I actually completely misunderstood the question. ...can happen.

I'll leave the answer anyway, maybe it will help someone in this context.

This question can be solved with the Scene Time node.

This node returns the seconds or the current frame.

If you then compare this value with a minimum and a maximum value and then check with the node Boolean Math if both values match, you can use it as a switch:

enter image description here

$\endgroup$
0
$\begingroup$

From comments:

I want to get a kind of driver reading the time value of the marker (or a given reference frame)

We can do this, but it's kind of a "stupid Blender trick." It's not practical (what's practical is to store times like this on the times of keyframes, not as GN inputs), but I'll detail it anyways.

Make an empty. Keyframe it at 0,0,0 at frame 0 and 1,0,0 at frame 1. Set interpolation and extrapolation to linear. Now, if we move that second keyframe, we can determine the time of that keyframe by comparing the current time to the X value of the empty:

enter image description here

If we have two frames we want to identify, those frames are on different objects (or at least, on different channels.) The keyframe at 0 cannot be moved.

These particular GN depend on the object reading the frame value to be located at the world origin (and be unparented.) We could do this in an arbitrary space by instead using two additional empties and comparing distances (we want the world space distance from 0,0,0 to 1,0,0 to establish the length of that vector, and then the world space distance from 0,0,0 to our measuring empty to compare.) Or, we could just do our math on an object that we knew was at the world origin, write to an attribute, and transfer that attribute to objects in arbitrary spaces.

However, this really is just a stupid trick, because they way to get what you want is just to set up your GN so that you directly keyframe show and hide, rather than trying to specify "when" with something other than a keyframe time:

enter image description here

We can see that the keyframed value node shows up in the dopesheet, as requested. I designed it this way because I believe that you're interested in the same values for all objects using these nodes; keyframing the value node inside of the GN node tree means that a single set of keyframes will be shared by all objects using that particular GN modifier. (If you would rather that these key-frames be per-object, you can make these inputs to the node tree instead-- yes, they still show up in the dope sheet.)

Of course, these keyframes that I've created on that value node will time shift just fine, along with everything else.

But you might notice that although keyframed GN nodes show up on the dopesheet, they don't show up on the timeline until we select the nodes in GN. We could just disable "only show selected" on the timeline, to make sure we can shift them. But, yes, we could also drive the visibility by location keyframes on some other object:

enter image description here

Here, I'm just using the Z location of an empty to drive visibility; that Z location is keyframed, and of course, it will time shift just fine along with everything else. The same warning (and solutions) I gave above about GN spaces apply.

$\endgroup$

You must log in to answer this question.

Not the answer you're looking for? Browse other questions tagged .