Motion Blur of Dynamic Meshes in Cycles

Kévin Dietrich has been working on something I didn’t even know was possible: motion blur support for meshes that have a changing number of vertices, like fluid simulations.

We’ve had motion blur support for dynamic meshes in general for a while now, but that was only for things like characters with an armature, or anything where the vertices in a mesh move around.

What this new patch does is add support for cases where the mesh structure itself changes, when new verts and faces are created or removed.

Brecht reviewed the patch earlier this month, and it was committed to master a few days ago (i.e. you can try it out with a nightly build, or wait for 2.78).

From the patch:

This adds support for motion bluring of dynamic meshes (such as meshes from liquid simulation) based on the patch provided by @Daniel Genrich (genscher) in T47069.

The trick here is to properly interpolate motion blur data based on the velocity vector of the current (center) frame unlike for static meshes motion blur where data is interpolated between frames, which will most likely fail for dynamic meshes. To achieve this, for now, the patch makes the very weak assumption that there’s only gonna be two motion times (which
is the case in Cycles currently). A better approach is left for discussion.

Note: It seems for now that adding any modifiers (e.g. subsurf) after the fluid sim or enabling Auto Smooth will break the motion vectors. Maybe this will be improved in future? For the render above I had to do some node hackery to get rid of those nasty black edges that occur when using a glass shader on low-poly geometry.

Update: This only seems to work for fluid simulations for now.

  • Oh wow! that looks like a hugely useful feature. I remember getting headaches trying to do nice motion blur on fluids.

  • add a smooth modifier will give you a better looking fluid and fixes the black edges, and still compatible with the new motion blur.

  • Brent Ancap


  • Mark Snyder

    This is exactly what I was looking for! The missing element of my render was a control for motion with fluids. Thank You!! I managed to hit “smooth” and get the file to render, too :)

  • It would be great if you could pass vertex color data as velocity – this would allow doing proper motion blur for [changing] meshes imported with Alembic

    • Indeed, could probably be done fairly easily with an add-on.