Automatic Texture Animation

It’s possible to generate a model that automatically rotates through a sequence of textures when it is in the scene graph, without having to run a special task to handle this.

To do this, use the egg-texture-cards command-line utility. This program will accept a number of texture filenames on the command line, and output an egg file that rotates through each texture at the specified frame rate:

egg-texture-cards -o flip.egg -fps 30 explosion*.jpg

This actually creates a model with a different polygon for each frame of the texture animation. Each polygon is put in a separate node, and all the nodes are made a child of a special node called a SequenceNode.

The SequenceNode is a special node that only draws one of its children at a time, and it rotates through the list of children at a particular frame rate. You can parent the model under render and it will automatically start animating through its textures. If you need it to start at a particular frame, use something like this:

flip = loader.loadModel('flip.egg')
flip.find('**/+SequenceNode').node().pose(startFrame)
flip.reparentTo(render)

By default, all of the polygons created by egg-texture-cards will have the same size. This means that all of your textures must be the same size as well. While this is a simple configuration, it may not be ideal for certain effects. For instance, to animate an explosion, which starts small and grows larger, it would be better to use a small texture image on a small polygon when the image is small, and have a larger image on a larger polygon when it grows larger. You can achieve this effect, with the -p parameter; specifying -p scales each frame’s polygon in relation to the size of the corresponding texture:

egg-texture-cards -o flip.egg -fps 30 -p 240,240 explosion*.jpg

There are several other parameters as well; use egg-texture-cards -h for a complete list.