It’s been a little while since I had something worth sharing, but I finally had the chance to test out a new method for motion blur which I have been kicking around.
The latest version of motion blur in Unreal is a marvel, and works extremely well for cost of implementing it. Motion vector based motion blur is used in the CG industry to save on time also. It is a tried and true method.
Part of my day job is pushing real time rendering for production. I am constantly being asked for examples of why Unreal makes sense for production work, which is a topic I would gladly discuss. The list goes on and on. Motion blur is the perfect candidate to add to the list. Unreal has the power to render very quickly. In theory we should have the ability to render more frames to build a single image. Temporal effects work along similar lines, but we can go deeper… if our focus is exclusively for real time cg production. Meaning, this method is not intended for true real time. It is not efficient.
In the simplest terms, this method samples multiple frames over a period of time which is then added up together to present a single frame. Motion blur is an artifact of photography. Within the length of time it takes for a camera shutter to open, then close, subjects in the frame can move. Those rays of light move across the film or sensor and you get a blur. What we can do in Unreal is sample snippets of time in between the shutter opening and closing and add them up into one image.
The methodology is extremely simple, as was the writing of this tool. All we have to do is sub sample a defined time before or after the target frame, and we get beautiful accurate motion blur. Currently my tool is in its simplest form. It is averaging all the sub frames in a ping ponging render target. There is a lot more going on in film which we can also simulate.
For example: The value of light sampled from a film camera isn’t linear over the length of the exposure. The aperture is opens over time, then closes over time. Motion blur is not linear in the same way. The beginning of the sampling should have a lower weight over the average. Technically, it should be out of focus as well. I’ll be experimenting with these ideas if time permits, but I would recommend that anyone who knows more about photography/cinematography to give it a shot!
If you are using Unreal Engine for film, TV, or commercial work, you will be bee floored with how good motion blur can look. And just how quickly we can generate it.
Now for some examples:
And a clip of a rotating object with the traditional motion vector motion blur: