Is it possible to animate the vertex color of an object?

  • $\begingroup$ perhaps you could clarify on the basis of what you would like to animate it. A morph between two color layers, or something more procedural. $\endgroup$ – zeffii Jun 14 '13 at 8:00
  • $\begingroup$ two possibilities: - or to morph between two vertex colors layer in time - or to change , in same vertex color layer, the colors in time $\endgroup$ – GabrielS Jun 14 '13 at 9:07
  • 1
    $\begingroup$ please update your question with more details. $\endgroup$ – ideasman42 Jun 14 '13 at 11:14


In Cycles Render, it's rather easy. Create your two Color Layers and animate the MixRGB's Fac: value.

enter image description here

I'm not familiar enough with Blender Internal to find a suitable answer for that engine. Luckily, brecht provided an answer

Blender Internal

enter image description here

  • 1
    $\begingroup$ A similar setup works for Blender Internal, using two Geometry nodes for the vertex color, a Mix node to mix them and a Material node to plug the color into. $\endgroup$ – brecht Jun 14 '13 at 11:23
  • $\begingroup$ @brecht I tried and failed miserably, can you show a .blend? $\endgroup$ – zeffii Jun 14 '13 at 11:24
  • $\begingroup$ pasteall.org/blend/22120 $\endgroup$ – brecht Jun 14 '13 at 11:30
  • $\begingroup$ @brecht Thank you! I see, the viewport BI render doesn't seem to update (without switching from Render Preview to Texture Preview and back again), but a f12 regular render works fine. $\endgroup$ – zeffii Jun 14 '13 at 11:38

manipulating Color Layer directly with Python as a function of frame number

We can animate a color_layer vertex by vertex procedurally with frame_change_pre handler, docs for which are here. This assumes that there is a vertex color map called 'Col', and that you know how to render Vertex Colors

import bpy
import random

obj = bpy.data.objects["Cube"]
mesh = obj.data

color_layer = mesh.vertex_colors["Col"]

def set_vcols(frame):
    i = 0
    for poly in mesh.polygons:
        for idx in poly.loop_indices:
            r = 0.5
            g = 255 / (frame % 255)
            b = random.random()
            color_layer.data[i].color = r,g,b
            i += 1

def my_handler(scene):
    frame = scene.frame_current


If you go this route, while developing it might seem that your code is not being executed as you hoped, run the below code from console, then rerun your script:

purge the event list:

f_change = bpy.app.handlers.frame_change_pre
del f_change[0:len(f_change)]
  • $\begingroup$ Thanks but I'm not sure what can i make with this code. What are the steps to use this script? I have creat a cube, asign to it a vertex colors named "Col", run the script, but nothing appears $\endgroup$ – GabrielS Jun 14 '13 at 7:29
  • $\begingroup$ I now how to render the vertex color, i want to animate this propertie: example: all vertex are red at 0s and all are greens at 1s $\endgroup$ – GabrielS Jun 14 '13 at 9:02
  • $\begingroup$ a gradual change ? $\endgroup$ – zeffii Jun 14 '13 at 9:07
  • $\begingroup$ yes exactly a gradual change $\endgroup$ – GabrielS Jun 14 '13 at 9:10
  • $\begingroup$ Blender internal, but if there is a technique juste for cycle, i want to know too for my knoledge $\endgroup$ – GabrielS Jun 14 '13 at 9:12

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.