WPO animated instanced static mesh smearing

To call this a solution is a bit of a stretch, but given the current state of things and the engine version we’re working with, we managed to get this working.

We found that setting the cvar r.Velocity.ForceOutput to 1 made our instanced static meshes output motion vectors, even though they had WPO animation as well (digging through the source code, this seemed to be a factor why that was being skipped perhaps.

Forcing these motion vectors to be generated made things look much better, as long as our enemies moved. When they would stop moving, they maintained their previous motion vectors, looking as though they were swirling around when their last movement was a roation, or blurred directionally if their last movement was a translation.
This gave us the hint to look for any suggestions of the update being skipped in code for optimisation purposes. We found cases of this, so we opted to force a tiny bit of movement on the enemies each frame, so we just have them all move 0.01f in the x direction each frame in order to trick the engine to generate the motion vectors for us still.

It worked and our enemies look a lot clearer and better. The small movement is irrelevant in gameplay as our players nor enemies will not be in the same place for long enough for that displacement to matter.

3 Likes