POTA is an implementation of Sparse high-degree polynomials for wide-angle lenses  for the Arnold renderer. 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.
Read the full documentation here.
Base requirement: Arnold >184.108.40.206
open makefile ### change arnold sdk path mkdir bin make
### using the "x64 native tools command prompt for VS 2017" cl /LD /I ...\Arnold-220.127.116.11-windows\include /EHsc /O2 pota.cpp /link /LIBPATH:...\Arnold-18.104.22.168-windows\lib ai.lib
- Calculate accurate infinity focus before lens generation (lentil)
- Compute focal length before lens generation so I can properly match the lenses (lentil)
- Fix clipping, not sure why but pota's is closer than the perspective camera by a factor of 10
- add energy-redistribution bidirectional sampling (aov shader)
- fix nans of double gauss angenieux (energy redistribution)
- bidirectional energy redistribution: check for intersections along P->Lens path
- bidirectional energy redistribution: come up with better triggering of backtracing, based on sample intensity, distance from focal point, fstop, ..?
- add support for x and y cylinders for newer anamorphic lenses (lentil)
- remove arnold library dependency to make pota renderer agnostic