DemoCoder said:
I don't see how the image space technique of linear extrapolation is going to deal with rotating objects like propellar blades.
I think linear blur will be good enough when put into practice, but it doesn't have to be linear, and that's why I said store an acceleration vector as well. This will give you a quadratic curve, and that's plenty. It'll be a bit harder to deal with, but not much by any means. ds = v*dt + a*dt^2, repeated for several dt values, to get your sampling offsets (though this is an oversimplification, as mentioned below). Calculating the acceleration vector in the VS just requires a bit of math effort from the coder, nothing complicated.
Very high rotation speeds should be handled separately, just as they are in current games. Clamping the blur to some metric based on object screen size should reduce extrapolation artifacts.
--------------------
Chalnoth, I see what you're saying. Just use the previous frame's transformations matrix. My point about physics was more related to how impossible it would be to make this driver based. Still, I think that if you have the velocity matrix, you might as well use it instead of tracking previous matrices. Mattter of preference, I suppose.
--------------------
I think the bigger problem is figuring out how to do it without making a mess. You can't just blur the image directionally, because a fast moving pixel needs to smear out
to its neighbours, not accumulate
from its neighbours. Sort of like scatter versus gather. Sometimes this is an equivalent condition, but if it's not then you'll get an ugly effect. It's similar to making good DOF (sample and test before accumulating, or you get halos), but with another dimension, i.e. a 2D vector in MB versus a 1D depth in DOF.
You need to make sure a neigbouring pixel's smear path lies on top of the pixel being rendered before you add it to this pixels average. You could search for appropriate neighbors much like raytracing searches for an intersection, but that'll cost a lot. Alternatively, you could use geometry fins (silhouettes to the viewer) to achieve the scatter. I saw a presentation by NVidia doing something like this, I think. This was one of the early suggested uses of vertex shaders by both IHV's.
Anyway, beyond just using an accumulation buffer or the multisample mask with discrete time slices of each frame, which simply multiplies your scene rendering time by the number of temporal samples, I'm not sure what else you could do besides image space MB. The former solution is, as someone here put it, just a solution to the monitor's limitations, and not any better than just getting more FPS.