I am trying to animate in 2d. I do it with planes that have textures on them. I recently came up with the idea of having a plane with an image sequence of mouths because animating actual lip syncing by hand takes too long and isn't really necessary for what I'm trying to acomplish. However, when playing back the animation in textured viewport shading the animated texture stays at the last frame until the animation stops. I can use the arrow keys and it works fine as well as scrubbing through the timeline, just not when playing back the animation with alt+a. Can anyone help me with this problem?
Viewport shaders are optimized for speed and performance for smooth playback and as responsive interaction as possible during animations.
Animated materials and textures require shader re-compilation, and this is a computationally expensive and resource heavy task, that is generally preformed on the CPU rather than the graphics card). Recompiling requires constant re-upload and sending data back and forth from the CPU to the GPU which is comparatively slow.
As such, they are pre-compiled before playback to avoid constant updates or refreshes, and during this process animations are suppressed to achieve faster updates and increased smoothness during playback.
It is a limitation that will likely be overcome in future 2.8 versions of Blender and the redesigned EEVEE viewport engine.
That being said, if you plan on rendering using the OpenGL renderer whether for your final output or animation previews, offline rendering will effectively update the animated materials and correctly render your movie.
If you only have a sequence of images or a movie strip as texture just turn on the option Auto Update in the image texture node
I work with architectural visualizations and set up stills as animations so I can render multiple variations of designs and multiple cameras at once. These are not actually animations, so I don't care about performance, but the lack of this feature would make my life a nightmare, so I use this script that forces Cycles material updates on every frame change:
import bpy def update_materials(scene): for m in bpy.data.materials: m.use_nodes = False m.use_nodes = True bpy.app.handlers.frame_change_pre.append(update_materials)