Zeno Pelgrims released a new camera shader for Arnold renderer. The shader is based on a technique discussed in a 2016 paper called Sparse high-degree polynomials for wide-angle lenses, focusing on the rendering of images with high-order aberrations at a fraction of the cost of tracing rays through lens elements. Zeno states that is achieved by “pre-calculating fitted polynomials, which serve as a black-box to transform the rays on the sensor to rays on the outer pupil”.
POTA is an implementation of Sparse high-degree polynomials for wide-angle lenses . It renders images with high-order aberrations, at a fraction of the cost of tracing rays through lens elements. It is done by pre-calculating fitted polynomials, which serve as a black-box to transform the rays on the sensor to rays on the outer pupil. All credit goes out to the authors of the paper, I only wrote the implementation for Arnold.
This shader represents 20 years of research efforts in camera shaders compared to ZOIC, where every single camera ray was physically traced through every lens element [based on a paper by Kolb et al from 1995]. The visual quality is comparable, but the polynomial optics technique is many times faster and can be compared to the cost of thin-lens calculations. Especially in complex scenes, the cost of using polynomial optics over the thin lens approximation is neglegible.
Note that because the lens descriptions have a fitted approximation, it is not possible to change the focal length like we are used to with the thin-lens approximation. Think of POTA as a library of prime lenses instead. Some focal length adjustments can be made by changing the sensor size [just like with real camera’s – note the differences in focal length of a lens on a aps-c sensor vs full frame].
POTA is wavelength-dependent, which means that optically correct chromatic aberrations (ignoring lens coatings as there almost never is accurate data for that) are possible by rendering 3 images with corresponding CIE RGB wavelengths, one for each respective colour channel. It’s expensive to render 3 images – but the option is there. For example, 700nm for the red channel, 546.1 nm for the green channel and 435.8 nm for the blue channel.
Plugins for Maya and Houdini are available, POTA is open source and free, so other implementations are also possible. Learn more and get the shader here.