Transferring Velocity Data From Houdini to Maya

As stated in the Arnold documentation:

By default, MtoA will not motion blur an alembic cache of a mesh that has a changing topology. However, MtoA can use the velocity attribute as a source to derive motion blur data from a mesh that has a changing topology using a motion vector. 

Using velocity data from a simulated mesh, i.e a fluid simulation, with changing topology, to render motion blur is a common yet fiddly task, which I recently encountered an issue with on a project.

When doing some early render tests on some fluid sims I was seeing artefacts in the shading of the sim. As it had a complex translucent shader with displacement applied to it I couldn’t tell if there was a problem with the displacement/shading or if there was something wrong with the mesh itself. Using a combination of debug shading and testing settings, I narrowed down the issue to motion blur, with the geometry only appearing distorted when enabling motion blur.

Debug shading mode with (Left) and without (Right) motion blur enabled

After running through the attribute creation process outlined in the documentation again, testing all of the ROP Alembic Output nodes motion blur settings, recreating the issue using the example alembic file and testing my cache on a separate machine and version of Maya (thank you Harvey), the problem was still persisting, so I decided to go back to the drawing board (i.e Houdini) to work on the export process again.

When exporting an alembic cache from Houdini the UV point attribute needs to be promoted to a vertex attribute to be read in Maya so I decided on a hunch to try promoting the created velocity point colour attribute to a vertex attribute, against the advised setup in the documentation and found that when exported as a vertex attribute rather than a point attribute, the motion blur on the fluid mesh behaved correctly. After a number of hours of testing, to find such a simple solution was both frustrating and a relief, and I was able to move on with testing the render pipeline for the shots.

To avoid having to go through working this issue out again, I set up a very simple HDA to handle the creation of the velocityPV attribute, with a toggle to switch between exporting as a point or vertex attribute. To cover all bases I also threw in a toggle to control normalisation of the velocity vectors and a simple visualiser to check that everything is working correctly (and it always looks cool).

JS_VelocityPV Tool

You can grab the tool here: Direct Download


Controls

Attribute Class The class which the velocityPV attribute will be applied to, either point or vertex
NormaliseIf enabled, the incoming velocity attribute will be normalised before being converted to a colour attribute and exported
VisualiseToggles a visualiser to see the velocityPV colour attribute applied to the mesh

Inputs

Input Geometry

Can be any geometry with a v point attribute.

Leave a comment