13
$\begingroup$

I know this is a common issue, but I can't believe there isn't a better way to hide/reveal objects in an animation, besides moving them far into the distance from camera, scaling to 0 or keyframing the hide_render value, but all of these pertain to single objects, and require adding animation data to each object. It also appears you can no longer keyframe the viewport hide property either in 2.8 but I need a solution that applies to render and viewport display.

All I want is to make a collection of objects invisible with a single property in 2.8 that can be animated/keyframed, but I cannot find an elegant solution. I could parent all objects to an empty and apply 0 scale/move far away the empty, but this is hacky and inefficent with regards rendering.

Just wondering if there's a simpler, more elegant solution that I've missed.

$\endgroup$
4
  • $\begingroup$ Good question, indeed a basic feature for animation which should be implemented. $\endgroup$
    – brockmann
    Commented Apr 1, 2019 at 11:36
  • $\begingroup$ Again, this may be a hassle and probably a little inefficient for renders but could you add a mix node to your object and hook it to transparency node. Then when you want it to disappear, set the mix to only use transparency, and when you want to see it, the other way. Maybe a little pointless but there you go. $\endgroup$ Commented Apr 1, 2019 at 11:56
  • $\begingroup$ @BigfootBlondy only ideal for very specific scenarios where the objects all use the same material, but when you just want to toggle visibility a load of different objects with different/multiple materials it's even more hassle. $\endgroup$
    – hedgehog90
    Commented Apr 1, 2019 at 13:50
  • $\begingroup$ Is it down to compositing and View Layers, in 2.8x? $\endgroup$
    – Robin Betts
    Commented Jan 10, 2020 at 12:17

5 Answers 5

5
$\begingroup$

You could make a link to object animation data.

First step: Keyframe single object visibility

Select one object and in Object Properties under Visibility keyframe property Show in Viewports. This can be done by hovering cursor over the checkbox and pressing i . Keyframe will be placed in your timeline to current frame. For example you can keyframe object visible at frame 0 by checking the checkbox and keyframing it and make it disappear at frame 100 by unchecking the checkbox and keyframing it.

Second step: Link other objects animation data

Select all the objects you want to keyframe and last select the object that was already keyframed. Press Ctrl + L and select Animation Data. Now all selected objects will appear and disappear at the same frame.

$\endgroup$
1
  • 1
    $\begingroup$ and thus overwrite the pre-existing animation of all of those objects you want to copy this one keyframe to $\endgroup$
    – Branskugel
    Commented Jul 17, 2022 at 17:30
2
$\begingroup$

One solution for this animation behavior with object collections is:

  1. Instance to Scene the collection you want to animate. enter image description here

  2. Insert Keyframes to your new instance in Disable in Viewport or in Disable in Renders from the outliner. enter image description here

Then you can repeat the last step in different frames (changing the visibility before add a new Keyframe)

Also note: you can not animate single objects that were in the original collection, the collection instance is treated as a single object.

$\endgroup$
1
  • $\begingroup$ This seems to work, but the limitation that you can no longer animate single objects seems really strange. Is there really no way to access the individual object's animation data after instancing the collection into the scene? $\endgroup$
    – Bauxite
    Commented Jan 1, 2021 at 9:41
1
$\begingroup$

It's an old question, but I'd like to share my two cents. In my opinion the best solution is to use drivers. Visibility ("Disable in Viewport" and "Disable in Render") is drivenable. It's better than link the whole animation data because with driver on visibility, you can still animate other properties, e.g. location and rotation, independently.

The driver looks like:

enter image description here

$\endgroup$
1
$\begingroup$

I'm surprised that there is no easy solution. Here is my proposition, based on Geometry Nodes (tested on blender 3.1): the idea is just to use a Geometry node to display a collection, otherwise hidden. This way, you can still animate your objects in the hidden collection.

First, create a collection with all your objects, and hide it. Create a second object, make sure its position is (0,0,0) (here called visibility toggle, the object does not matters, but it can't be an empty because empty can't have geometry nodes attached).

enter image description here

Create then a geometry node for this "visibility toggle" (by opening the Geometry Node editor, and clicking New, then play with Add > search) outputting the hidden collection:

enter image description here

Now, you can animate the visibility of the visibility toggle node, and it will apply to the whole collection.

$\endgroup$
0
$\begingroup$

I stumbled upon this exact struggle, fortunately, we can copy animation data from one object to multiple objects. What you have to do is select one object from the objects that you want to animate appear/disappear, scale it down to zero, keyframe it, scale it back up to one, keyframe it, then select this very object that you just animate first then select the other objects that you want to animate (You can select them in outliner). Then go to Object > Link/Transfer data > Link Animation Data

$\endgroup$

You must log in to answer this question.

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