Hi Victor,
Sorry for the delayed reply, and a belated happy new year!
One slight oddity in your setup is the CustomAttributes->AttributeQuery step used to get the pupil size into the ramp. The AttributeQuery is done at scene generation time rather than at render time, so the whole thing is equivalent to just keyframing the position of the ramp directly. But that's not the reason why this isn't working - that's because Gaffer can't currently export animated materials. Gaffer materials don't have an identifier in the same way a USD material does (.e.g. `/materials/metal`), so we make identifiers on export based on the contents of the material - those are the awkward hashes you see in the material names in the USD file. Which means that an animated material gets exported as a series of individual materials, with only the last one actually getting bound to the object. We'll need to sort this out, but it's not straightforward.
What should work in the meantime is to actually take advantage of the CustomAttributes node by querying the value in the shader using a `user_data_float` shader. That way the material isn't animated as far as USD is concerned, but does get an animated value for the pupil at render time by querying the animated attribute. I've attached an example of doing this that is definitely working pre-export. The exported version looks good to me as well, but I haven't built a USD composition to verify that. Let me know how it works for you...
Cheers...
John