4
$\begingroup$

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?

$\endgroup$
6
$\begingroup$

It is a very, very, very, very well known limitation of the current system.

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

$\endgroup$
  • $\begingroup$ Thank you. I actually do render these animations in OpenGl because ray tracing is pointless for 2d shadeless objects. I found that with textured viewport shading or solid with textures enabled it wouldn't work. After I switched to material I had to turn the objects shadeless but now they're animated! Also, like in the link you sent me, If I pressed alt+a over the preview area it would animate the texture even in solid! $\endgroup$ – Caden Mitchell Sep 30 '17 at 0:10
  • $\begingroup$ Hi @CadenMitchell I'm facing the same problem and I'd like to know how did you solve it. You wrote you turn the objects shadeless and the animation worked? What do you mean with "turn the objects shadeless". Is there an option for it? I need to have some planes with image sequences running on them when I hit alt+A in OpenGl viewport. Thanks in advance. $\endgroup$ – mugnozzo Nov 18 '18 at 17:24
  • 1
    $\begingroup$ @mugnozzo Shadeless just made it visible without lighting. You should use the addon called “Images as Planes” and in the import process open the folder with the images and select them all. You should check the image sequence option and the auto refresh option. If it loops enable cyclic. Cycles Renders viewport cannot display image sequences. You’ll need to be in Blender Render and set the material viewport shading to GLSL. It should work. $\endgroup$ – Caden Mitchell Nov 21 '18 at 6:26
  • $\begingroup$ Ongoing bug in 2.8. In the post you can find some temporary workarounds. $\endgroup$ – 5agado Jan 16 '19 at 12:14
  • $\begingroup$ offline openGL renderer still doesnt update textures for me in 2.79b. $\endgroup$ – user3597862 Feb 8 '19 at 1:58
0
$\begingroup$

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)
$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.