Blender – Python – Access animated vertices data

Blender 2.83

The following is simple example of reading a mesh’s animated vertices data.

This example code gist

Note that accessing an model’s animated vertex locations requires reading the model’s evaluated (deformed) mesh state per frame.
For that reason a new bmesh object is initiated per each frame with the the model’s updated dependency graph.

import bpy
import bmesh
obj = bpy.context.active_object
frames = range(0,10)
get the object's evaluated dependency graph:
depgraph = bpy.context.evaluated_depsgraph_get()
iterate animation frames:
for f in frames:
    # define new bmesh object:
    bm =
    # read the evaluated mesh data into the bmesh   object:
    bm.from_object( obj, depgraph )
    # iterate the bmesh verts:
    for i, v in enumerate(bm.verts):
        print("frame: {}, vert: {}, location: {}".format(f, i,

Blender – Basic time-dependent animation driver examples

Blender 2.82

To setup a time-dependent Driver in Blender, simply use the built-in frame variable.
In this example the expression:


Set as a Z axis location driver for the cube causes it to oscillate up and down:


Changing the expression to:

sin( frame * 0.1 ) * 2

Causes the motion to be twice as high and 10X slower:



In this example, the expression:

( pow( -1 ,  floor( frame / 30 ) )  *  0.5 ) + 0.5

Set to the cube’s Emission shader’s Strength attribute causes it to alternate between values of 0 and 1 every second (30 frames in this case):



Blender – Create constraints quickly

UE4 – Create and Play a Level Sequence

Unreal Engine 4.24

To create animations and trigger them to play on game start:

First create a Level Sequence containing the animation:

  1. Create a new Level Sequence actor:
    Annotation 2019-12-23 164745
  2. Name the new Level Sequence and drag it to into the level:
    Annotation 2019-12-23 165833.jpg
  3. Select the actor you want to animate in the level and double click the Level Sequence in the Content Browser to open it in the Sequencer window:
    Annotation 2019-12-23 170453.jpg
  4. In the Sequencer window, press the +Track button to add a sequence track, choose the upper most option Actor To Sequence, the option to Add the selected actor will automatically appear first on the menu that will open on the right:
    Annotation 2019-12-23 170622
  5. Add the selected actor as a sequence track, expand the track’s Transform channels to reveal the Transform property you would like to animate, and click the + button for that channel to create the first key-frame:
    Annotation 2019-12-23 171623
  6. Activate the Create when channels/properties change option button:
    Annotation 2019-12-23 171932
  7. Move the time slider to a desired time for the motion and move/change the actors transform to create a new key-frame:
    Annotation 2019-12-23 172115.jpg

The Level Sequence now contains animation for the Actor, but when we play the game, the animation doesn’t play.
For the animation to play in game, we must trigger it fro a Blueprint, in this case the Level Blueprint:

  1. From the Editor Blueprints menu, choose Open Level Blueprint:
    Annotation 2019-12-23 173450
  2. In the Level Blueprint, drag the Event BeginPlay execution graph and create CreateLevelSequencePlayer node that will follow it:
    Annotation 2019-12-23 173759
  3. Drag the CreateLevelSequencePlayer node’s Return Value output and create a Play node that will be executed after it and receive it’s output:
    Annotation 2019-12-23 173854
  4. The Level Blueprint now has instructions to play a Level Sequence,
    but it’s not yet specified which Level Sequence to play:
    Annotation 2019-12-23 173929
  5. In the Variables list on the left, press the +Variable button to create a new variable and name it:
    Annotation 2019-12-23 174757
  6. With the new variable selected, in it’s details on the right, press the Variable Type button, and locate Level Sequence – Object Reference type:
    Annotation 2019-12-23 174932.jpg
  7. The Level Blueprint now contains a variable named seq of type: Level Sequence – Object Reference:
    Annotation 2019-12-23 175200.jpg
  8. Drag the new variable to the Blueprint and choose Get when placing it:
    Annotation 2019-12-23 175536
  9. Connect the variable’s output to the Level Sequence input of the CreateLevelSequencePlayer node:
    Annotation 2019-12-23 175609
  10. With the variable selected, in the details panel on the right, select the Level Sequence object it will be referencing:
    Annotation 2019-12-23 175627
  11. Press Compile and save the Level Blueprint:
    Annotation 2019-12-23 175646

The Level Blueprint now has instructions to play the desired Level Sequence when the level begins playing so a the animation we created plays when we hit play game in the editor:
Annotation 2019-12-23 180500



UE4 Camera Animation

Blender Skeleton (Armature) Mirroring

Blender 2.8

To mirror a skeleton (Armature) in Blender:

  1. Create bones for one side of the rig and name them with “.L” for Left or “.R” for right.
  2. Select all the bones on that side.
  3. In Armature Edit Mode choose:
    Armature > Symmetrize

Blender will create mirrored copies of all the bones with respect to the Armature origin and flip their names to names ending with the opposite side.

  • When editing properly symmetrized bones,
    The X-Axis Mirror tool option will simultaneously update both sides of the Armature to maintain symmetry.






3ds max – Use the Particle-Flow Lock/Bond test to have particles move on a surface in

3ds max 2019

The Lock/Bond Particle Flow test can be used to have particle movement restricted to a surface.


This example shows a simple setup in which the particle teapots have a Speed operator set to Random 3D mode that causes them to move in random directions,
While at the same time the Lock/Bond test forces them to ‘stick’ to the surface:



Python for 3ds max – Animated Mesh

3ds max 2019

This is an example of procedurally animating a mesh’s vertices via Python script.


1. The model has to be converted to Editable Mesh before the script is run.
* unless the scrip will be extended to do it.
2. The model must be selected for the script to work.

import MaxPlus
import math
from MaxPlus import INode
from MaxPlus import TriObject
from MaxPlus import SelectionManager
from MaxPlus import Factory
from MaxPlus import Animation
from MaxPlus import Point3
from MaxPlus import Control

ticks_frame = 160

sel = []
for n in SelectionManager.Nodes:
node = sel[0]

#Setup Controllers
obj = node.GetObject()
Tri = TriObject._CastFrom(obj)
mesh = Tri.GetMesh()
num_verts = mesh.GetNumVertices()
mesh_anim = obj.GetSubAnim(0)
pnt_ctrl = Factory.CreateDefaultMasterPointController()
for i in range(num_verts):
    bezp3 = Factory.CreateDefaultPoint3Controller()

for t in range(100):
    time = t * ticks_frame
    for i in range(num_verts):
        vert_anim = mesh_anim.GetSubAnim(i)
        vert_ctrl = Control._CastFrom(vert_anim)
        vert_val = mesh.GetVertex(i)
        vert_val.SetZ(vert_val.GetZ() + math.sin(((Animation.GetTime()*0.5)/(ticks_frame))+i))

* note that when copying and pasting a script from this example, the indentation may not be pasted correctly.

Python for 3ds max – Mesh manipulation

DJV Player

DJV View 1.2.3

A highly effective and useful open source frame sequence player, indispensable in an animation studio.

DJV allows smooth cached playback of float EXR file sequences (and many other formats) at a variaty of frame-rates, image / pixel diagnostic tools, view EXR layers, quick mp4 export, and more.

Download DJV here:


Blender – Bake NLA animation

Blender 2.79

When you wish to bake your NLA animation mix into one Action,
The Bake option in the Animation tab will not work.
The way to do this is to:

  1. Select the object in Object Mode.
  2. Press Space and type ‘bake
  3. Choose Nla: Bake Action
  4. In the Bake dialog, select Pose, deselect Only Selected, and press OK.
  5. After the process, the Armature will have a new action that is the baked animation.



Blender – Bake rigid body physics to Keyframes

Blender 2.82

  • I always forget this, try to do it through the regular animation baking option and get frustrated that it doesn’t work…

When you want to bake an object’s Rigid Body physics simulation to regular Keyframes:

  1. Select the wanted objects.
  2. Press F3 to open the command search floater,
    Begin typing: bake to keyframes to Locate the command:
    Rigid Body: Bake To Keyframes and select it.
    The command will appear only if objects with rigid body physics properties are selected.
    Annotation 2020-05-17 154351
  3. Set a frame range for the bake and press OK:
    Annotation 2020-05-17 154413
  4. The physically simulated motion is recorded to keyframes:
  5. Annotation 2020-05-17 154458



  1. Bake NLA animation
  2. Cloth to shape keys

Maya Python scripting – Iterate through the timeline frames

Maya 2018

The following Python script iterates though Maya’s timeline frames, and for each frame creates a new cube, and aligns it’s position to the selected animated locator.

* There is probably a nicer way to set one object’s position according to anothers but haven’t found it yet (not finding enough examples of the cmds.xform command…) so sorry for that..

import maya.cmds as cmds

selection =,sn=True)
for frame in range(1,80):
    newCube = (cmds.polyCube( sx=1, sy=1, sz=1), long=True)
    posX = cmds.getAttr(selection[0]+'.translateX')
    posY = cmds.getAttr(selection[0]+'.translateY')
    posZ = cmds.getAttr(selection[0]+'.translateZ')