I’ve investigated a bit further now. The mesh is certainly getting rendered to the velocity buffer.
With the default setup, when the character and cloth are stationary, motion blur is rendered correctly even with the camera orbiting. When the character and cloth are moving (camera fixed, with the character in the center of the screen, and a fixed view direction independent of character orientation) the cloth motion blurs out even though its velocity should be zero with respect to the camera.
Looking at everything in the shaders, it all seems correct so I don’t know what’s going on. Interestingly, even though it’s obviously incorrect, if I modify VertexFactoryGetPreviousWorldPosition inside GpuSkinVertexFactory.usf so that the cloth position is calculated as Intermediates.SimulatedPosition + View.PreViewTranslation rather than Intermediates.SimulatedPosition + View.PrevPreViewTranslation, then I get the opposite problem. With that change, the cloth motion blurs when the camera orbits (as to be expected with that change), but there is no motion blur when the character moves.
Any guidance here would be much appreciated.