Can a material be keyframed on a per-object basis? I saw some similar questions to this, but nothing that quite fit.  For example, suppose I have a material that is used by a number of objects, e.g., two shaders feeding a mixer.  I want to animate the mix factor, but with different (non-random) keyframes for each object.  I'm using Cycles.

If I keyframe the factor directly, it will use the same keyframes for all for all objects.  I can duplicate the material for each object, but that's hard to maintain.

Node groups come close.  I can encapsulate the material in a group and bring the factor out as an input, so I only have to maintain one material.  But it appears that I still need a separate "wrapper" material for each object in order to set the keyframes.  This is kind of cumbersome.

I thought a driver might help, with a keyframed custom property on each object; I had hoped that there was a way to tell it to use the custom property on the "current" object, but it requires a specific object.

I was also hoping the attribute node would give access to custom properties, but apparently not.

Any other ways?

Thanks.
You can get a random value that is unique to each object using the Object Info node.



You can also use a math node if you want to add the random value to a keyframed value change. The random value will be between 0.0 and 1.0 so you may also find multiplying helpful if you want a larger range.