What is simulated?
The simulation demonstrates the relative
noise levels and
bokeh size of cameras based on their absolute aperture size.
Noise Levels
The noise level is exaggerated to be more visible in the small window above. The noise is a function of ISO and sensor size, and doesn't account for differences in sensor sensitivity. For some actual camera data taking into account sensor sensitivities see
DXO Mark.
Noise Type
The noise here has no processing applied. Real digital cameras will apply noise reduction, which creates a smoother image but with some loss of detail.
Focus Planes
Each scene is composed of one or two planes which can be defocussed (blurred) independently.
Bokeh
Bokeh is the shape of a point of light which is out of focus. In this simulation they are square which makes it fast for a computer to calculate. In a real camera they can be a variety of shapes from circular to polygonal.
Max Aperture
The maximum aperture at a given focal length is linearly interpolated based on the values given at each extreme of the zoom range. In a real camera the relationship isn't linear so the maximum aperture values within the middle of the zoom range may be slightly off.
How is it simulated?
Preparation of each focus plane
- Take 3 perfectly sharp, exposure bracketed photos of each focus plane.
- Merge these into a High Dynamic Range image using image processing software, e.g. Photoshop.
- Cut out the background of the foreground plane.
Defocussing each focus plane
- Map image from sRGB values (log scale) to light intensity (linear scale).
- Run box-blur algorithm.
- Map image back to RGB (log scale) again for rendering to canvas.
Technologies used
Everything is calculated using Javascript and rendered onto the HTML5 <canvas> element. I'm sure it would be more efficient to use WebGL, if anyone is interested in trying this I'd love to see it!