Deformations are based on moving vertices around. However, in this particular case, it would be nice if the deformation was localized to each arrow individually, without the chance of two arrows close to each other getting distorted because their vertices happen to be in a proximity of some local field area that points elsewhere…

So I hacked something using a pre-bent animated arrow, and just dialed the right timing using Magma based on the change in the Velocity vector over time.

Here is what I did:

- I created a Stoke Field Magma with some VectorNoise field as Velocity (I made it 2D with Z component of 0.0, so all motion is in XY space)
- I simulated a 1000 particles emitted on frame -1 using Stoke Particle Simulator and the Stoke Field Magma as the vel.source
- I created two PRT Loaders from the Stoke sim - one set to Offset 0, one to Offset 1 (reading one frame ahead)
- I made a Frost from the first PRT Loader, set to Custom Geometry, and picked a custom arrow mesh I made.
- I set the Orientation to Velocity.
- On that Arrow, I added a Bend modifier and animated it from -180 degrees to 180 degrees over 101 frames.
- I added a Magma modifier to the PRT Loader used as source of Frost, and set up a flow where I calculate the Vector Dot product of the normalized Velocities of the current PRT Loader and the offset PRT Loader. The Dot Product is 1.0 when the two are parallel, 0.0 when they are orthogonal to each other, and -1.0 when they are parallel and pointing in opposite directions.
- I also calculated the Vector Cross product and used the Z axis sign to multiply the Dot Product by either 1 or -1 as it changes (to determine when the vector is bending CW vs CCW).
- I subtracted the Vector Dot from 1.0, so when it is 1.0 (parallel vector), it produces 0.0. When it is 0.0 (orthogonal), it produces 1.0. I assumed that a velocity would never change more than 90 degrees over a single frame, so no precautions for negative Dot Products.
- I scaled by above result by half of the frame range of the arrow animation (50), and offset by 50. So when the Dot Product is 1.0, you get (1.0-1.0)*50+50 = 50, and the arrow is loaded with no Bend (middle of arrow animation). When the Dot Product is 0.0, you get (1.0-0.0)*50+50 = 100, and it loads the +180 Bend arrow. When the value is multiplied by -1 due to changed direction, it loads from the opposite side, from 50 to 0 to bend CCW…
- I added a multiplier to boost the effect as the angle between the two velocities is in fact tiny over a single frame.
- I output the resulting value as GeomTime channel
- Then I switched the Frost to use Base Time 0 and Offset Time from GeomTime channel. This way, each arrow loads a pre-bent mesh from the frame specified in the GeomTime channel.

The result is quite convincing, despite being driven by the change in velocity direction and a pre-animated bend instead of by deforming the actual Frost vertices by the actual field. The latter might be possible, but it would be rather complicated…

STK_BendFrostArrowsByVelocityField_v001.zip (51.1 KB)

Attached is a Max 2015 version of my 2017 scene. You must re-sim the Stoke Particle Simulator, and re-point both PRT Loaders to its cache data.

STK_BendFrostArrowsByVelocityField_v001.zip