A fun little side project of mine has been to write a rendering utility for Flash called FilmStrip. It lets you process a Flash 2D or Papervision3D animated scene into a filmic-looking frame sequence with natural motion-blur, that can then be converted into real video. The motion blur that I'm talking about here is not basic horizontal/vertical 'box' blur, it's created by drawing a series of subframes of the actual animation within each frame capture, so that blurs follow the trajectory and exact shape of the subjects very realistically. Filmic motion blur can be simulated in other ways but this is the easiest and most common, and can yield movie-camera-like results.
To achieve the most natural-looking blurs in complex scenes, FilmStrip blurs each object individually. By default the captureMode property of a FilmStrip is set to EACH_OBJECT. Under the hood this gets a lot more involved than the alternative mode WHOLE_SCENE, which recaptures the entire frame for each blur subframe. There are some very distinct differences and advantages to each that I'll describe here.
"Each Object" Mode
You'll notice that the blurs of the two dice are totally independent of one another and actually overlap pretty nicely. You can even see the blur on the back one through the blur on the front one. I'm pretty amazed that Flash can produce such a high-quality result.
Aside: So why are there hard edges? Well, FilmStrip currently only animates blur subframes either before or after the primary frame, which often leaves portions of the primary frame's edges exposed as the blur pulls back across the object. A 'leading' or 'trailing' blur like this can look pretty good in motion, but I eventually hope to add a blur-both-ways or 'shutter angle' option.
In object mode, we can calculate a generalized delta value for each die's motion and then apply a different number of subframes to each one. This is great because processing power ends up allocated to the portions that need it the most in each frame. Fast-moving objects can draw many subframes, while ones with little motion can simply be captured once. In fact, I was surprised to find that in many cases object mode is actually quite a bit more efficient than frame mode, because of that ability to vary the number of captures per object.
Frame or "Whole Scene" Mode
Now let's take a look at a sequence of frame-based blurs. For this sequence I set the capture to use a fixed 12 subframes, and I exaggerated their visibility to clarify the next point. Look closely (click each image to enlarge it), and you'll see some strange problems where the dice actually seem to be partially intersecting each other as well as the green table surface:
Why does this happen? It's easiest to understand if you visualize a stack of old-fashioned animation cels with the dice painted on plastic transparencies. To build one frame in the object-based capture mode, we would paint a cel showing die 1, then stack a number of additional die 1 cels on top of it to simulate the motion blur, then on top of that stack we'd do the same thing for die2. (That is, blur subframes are localized to the z-depth of each object.) But in frame-based mode we've drawn both dice onto a cel, then laid another cel containing both dice over that, and so on. What happens is that when objects are moving in different directions, the overlapping of those objects reveals new areas of the dice edges on each cel, resulting in a sort of interwoven pattern. (Z-depths of all objects in the scene are repeated cyclically.)
Keep in mind that for the sake of this example I've increased subframe opacity and spread using the FilmStrip settings peakAlpha and subframeDuration. When subframes are blended back more and the final video is in motion, this z-depth problem is normally not noticeable. So unless you're worried about stills from the final video looking completely correct, frame-based blur can look pretty good.
Erring toward quality, for now
SInce this is just old-fashioned, single-threaded, non-GPU-capable ActionScript, all we have to work with is a sequential series of steps, including actually updating the animation many times per frame to simulate a blur. This results in object mode sometimes beating frame mode for efficiency, although full-frame mode is still a heck of a lot simpler.
I stuck with object-based blur to create a short video snippet of a classic John Grden xwing fighter being nailed by a laser beam and really like how it cleanly separates the content:
I decided to make object blur the default setting to err toward quality over speed, figuring that if FilmStrip were ever actually used, it would be to pre-render portions of a Flash scene to video, since it's nowhere near realtime rendering. I've made similar decisions at other points, such as deciding to make FilmStrip tween-engine-agnostic (you can plug it into TweenLite, Tweener, etc. pretty easily), whereas if it were being built for speed it would probably include its own custom animation system.
For the time being, FilmStrip provides a nice simple way to tinker with rendering and see some of the complexities involved in seemingly simple things like motion blur.