And most importantly, 3ds Max modifiers are only executed for a single time instant and have no knowledge of the base object and modifier stack below itself at any other time.
Here is a sample of what Chad was talking about:
GenomeVelocityExample.max (200 KB)
This scene has a teapot with an animated bend modifier on it. I made two mesher objects pointing at the teapot and gave one of them a -0.5 offset (That seems to mean it will have the mesh from a half frame in the future). The mesher object with offset 0.0 is what we will consider the final result I’m going to call it the output object.
On the output object, I added a genome modifier that looks like this:
As you can see it is filling in the color channel using the magnitude (clamped to 0,1) of the velocity I calculate using forward finite differences. The velocity of a point is the change in position divided by the change in time. So subtract the position from the original mesh from the position in the time offset mesher and divide by the time offset. That gives me the velocity in units per frame.
Since I’m iterating over the color channel, I don’t have a simple way of determining which vertex I’m looking at so I use the index [0,3) of the face vertex to pick the barycentric coordinate for using the FaceQuery operator.
This method will work for any mesh that isn’t changing topology. For kicks I added VolSelect and MeshDelete modifiers so that the vertex count would change as some enter the volume. The velocity becomes garbage after that occurs.
EDIT: It occurred to me that its kind of a waste to use Teapot001 & the FaceQuery to get the position, when I could have just used InputChannel -> “Position” to accomplish the same thing. Oh well.
As an aside: Given that the channel is called VertexIndex I suppose it might make more sense to have it return the index of the actual geometric vertex index in the current iteration instead of having it return the [0,3) index of the current corner of the triangle. What do you guys think?