Motion blur is achieved by rendering multiple frames at sub-frame time offsets and averaging the results
Cinematic motion blur arises because film is exposed for a fraction of each frame duration (shutter angle). To fake this in a shader: render the entire scene N times (typically 4) with time offsets spaced across half a frame duration (1/24s × 0.5 = shutter open time), accumulate the colors, divide by N. This is brute-force temporal super-sampling. The same pass also provides spatial anti-aliasing by jittering the pixel’s sub-pixel sample position. Dithering with blue noise removes the visible discrete steps (ghosting bands) at low N, exploiting temporal integration by the eye at animation frame rate.
Examples
vec3 tot=vec3(0); for(int aa=0;aa<4;aa++){ float t=iTime+(float(aa)/4.0)*(0.5/24.0); tot+=render(uv, t); } tot/=4.0;
Assessment
A shader runs at 60 FPS with 4× temporal supersampling. Calculate how far a fast-moving object (1 unit/s) travels during the motion blur integration window.