That's a great writeup. But it brought up a couple thoughts....
"But what we end up with is every other frame being a frame made up by the computer as a poor approximation of what that frame would look like had it ever been filmed - with all the errors, artifacts, and inaccuracies of a process done at incredibly high speed."
This is actually not entirely accurate. When you're FI-ing 24fps to 60fps, what you end up with is every
frame is interpolated, none of them are original.
"What a CG digital compositor would probably do is grab from frame b the bit of grass that was behind the ball in frame a, and grab from frame a the bit of grass that was hidden in frame b.
But this simple task would take an effects artist a few minutes per frame at least.
Your TV is having to do this in 1/24 of a second.
Which is impossible.
So it cheats. It uses warping and other motion compensaton/interpolation techniques to create inbetween frames that sort of fool the eye.
But what we end up with is every other frame being a frame made up by the computer as a poor approximation of what that frame would look like had it ever been filmed - with all the errors, artifacts, and inaccuracies of a process done at incredibly high speed."
I had to think of a minute to remember how this works, but what happens is FI algorithms actually work in two directions, forward and backward. To continue the football example, I think we can all follow how it's "easy" for the processor to move the football and cover up some grass as it moves forward. But what about the grass that didn't exist that needs to be created? This is where the backward motion vectors come in, basically it's no different processing wise than going forward, it takes grass from future frames and moves it to earlier generated frames, like if you were playing the video backwards.
Here's the actual "script" to do it in AVISynth on a PC:
super = MSuper(pel=2)
backward_vec = MAnalyse(super, isb = true) # compute the backward motion vectors
forward_vec = MAnalyse(super, isb = false) # compute the forward motion vectors
MFlowFps(super, backward_vec, forward_vec, num=120, den=1, ml=100) #"magic" function to get 120 fps
I've said a few times, I'm still amazed by how "well" FI can work for it's intended purpose, that is increasing the framerate of video. And how few obvious
artifacts it creates. But even then something is lost when you increase the framerate of film, and that's not something I like.