# Build animation modifier build up and then reverse

I have a plane which I have applied the build modifier. I'm trying to make the build go to 50th keyframe (without a complete build up of the squares), and then reverse, so the modifier doesn't fully complete the plane. I also added another plane, which has it going into reverse, but the build is colliding and cannot see each individual square.

You can reverse without using the Reversed option simply by increasing the Start Frame property faster than the current frame number. So you may find using a driver solution more intuitive: max(0, frame-50) *2

Explanation of the formula:

1. frame is a global variable holding the current frame number - you can drive the field: Start Frame to be the same as the current frame number; this means that each frame becomes the first frame of the modifier, effectively making the object invisible throughout whole animation (because the first frame of Build modifier is empty)
2. * is a multiplication: by multiplying the frame by 2: frame * 2 you can make the driven field to be twice higher than current frame, e.g. on frame 15 the Start Frame will be 30; this is not very useful as the modifier makes the object invisible before the Start Frame.
3. (frame-50)*2 substraction is used to offset the animation so that on frame 0 the Start Frame is (0-50)*2 = -50*2 = -100, on frame 25 it's (25-50)*2 = -25*2 = -50 and on frame 50 it's (50-50)*2 = 0 * 2 = 0 and on frame 100 it's (100-50)*2 = 50*2 = 100 This finally shows the animation, in reverse, as the Start Frame starts at a value 100 lower than current frame, but increases twice as fast, so after 100 frames surpasses the current frame. Think of it as two runners holding a tape measure: a slower runner begins at the start, a faster runner begins with a handicap and is put 100 m before the start: so the tape is extended by 100 m at first, but as the faster runner comes closer and closer to the slow runner, the tape retracts to 0 length.
4. max is a function that returns the biggest of passed values. It's typically used to clamp values, to make sure they don't go below a certain limit. Here by using max(0, x) I make sure to get a value of x but no less than 0. This means that Start Frame will never be below 0. Looking at the runners analogy, imagine that the faster runner doesn't hold the tape from the beginning, it waits for him at the line marking 0 m of the racing track. So now as the slower runner starts the race, the tape extends, but only until the faster runner reaches the 0 m mark, grabs the tape and approaches the slower runner, decreasing the tape length.

Hopefully that clears things up. 😉

• Yay! Cracked it! This should be the one? Commented Jul 4, 2021 at 17:56
• really cool solution! Commented Jul 4, 2021 at 18:14
• Hi Markus, thanks for your information, I never knew about a driver solution. It worked well, and what I was after for my project. What I'd like to understand is, what's the: *2 value do? Thank you. Commented Jul 5, 2021 at 7:27
• @blenderbreath see the edit. Commented Jul 5, 2021 at 8:11

This (slightly unexpected?) keyframing works for me, for an animation to build to 50% and back, over frames 1-100.

In the Build modifier:

• At frame 1 - Start Frame:1, Length:99, Reversed:True, Randomize:True
• All fields keyfamed.
• At frame 49 - Start Frame:1, Length:99, Reversed:False, Randomize:True
• Reversed only keyframed.
• At frame 100, All keyframed, as 49.

I suspect this is a hack.

• Thank you for your reply Robin. But your modifier builds up, and covers up the whole plane. I've uploaded a rough video so I can show more precisely what I'm after. See how the squares build up but don't become a whole square, then they become less again as if they're looping? streamable.com/4nnwno Commented Jun 28, 2021 at 12:03
• @blenderbreath just multiply the length, so the animation doesn't reach the end before reversing. You won't get more reputable source than Robin, I'm afraid :). Commented Jul 4, 2021 at 15:06
• @MarkusvonBroady 'Reputable' or not, I still can't get my head round achieving exactly what blenderbreath wants, this way :D Commented Jul 4, 2021 at 17:53

You need to keyframe only the Reversed property to be unchecked at frame 1 and checked at frame 50 with a constant interpolation in the dope sheet.

• +1 with the caveat it won't work if you want to reverse at a different point than half of the length. Commented Jul 4, 2021 at 15:29

and here is a geometry nodes solution, which is pretty flexible. You could easily change the frames, fill rate, size of grid etc.

Node tree:

• HI Chris, thank you for the node tree set up, I might use it in the future. I'm still on previous Blender version currently, and get an alert when opening up your file, that some nodes are undefined appearing in red. Commented Jul 5, 2021 at 7:29
• @blenderbreath: no problem. You are right, i used version 3.0 alpha for that. But you didn't write that there are version restrictions ;) Commented Jul 5, 2021 at 7:31
• Nice. I still managed to not learn geonodes by now, so I need to ask: does this work only for this particular case (squares), or does it recreate the Build modifier? Commented Jul 5, 2021 at 8:14
• Thank you! Since geonodes works with instances and not with faces - it cannot recreate the build modifier. But of course you could do the same to every mesh/model, it would work, but if you use planes or whatever instance…your model wouldn’t look perfekt so…😱 Commented Jul 5, 2021 at 8:19
• Second Markus' 'Nice' :) Just been playing... You can put a Weld modifier below the Geonodes... Commented Jul 5, 2021 at 9:21