I have been using Paul Lutus‘s OpticalRayTracer program to do some basic raytracing simulations for a non-imaging optics application. It has proved to be extremely useful. I am exploring the source code today because I would like to add a number of features that are currently not supported.
The main feature I’d like to add is support for multiple ray sources. Currently the program only supports one source, which can be either a plane source of collimated rays (i.e. a source at infinity) or a point source of diverging rays. For some applications, it would be useful to have multiple individually configurable point sources.
I would also like to add additional controls for the ray source parameters such as X-Y position and angle. Currently these controls appear to be optimized for a very specific application case which does not fit my application.
Thirdly, I’d like to add support for other optical elements such as prisms and light guides. I have been able to get creative with the current program using overlapping lenses to form light pipes, which seems to work well. This leads me to believe that the core physics component will not need modification, so it should hopefully be relatively easy to just add a new component type with the appropriate optical surfaces identified and it should just work.
Lastly, it would be super useful to be able to define groupings of optical components that can be moved together rather than have to move each optical element individually.