------------------------------------
**Highlights:**
- **Speed improvements for all ray-tracing calculations**, by using numba jit (just-in-time) compilation of heavily-used
functions, and more efficient lookup of TMM values for integrated ray-tracing/TMM calculations. The use of just-in-time
compilation can be turned on or off, see here: :ref:`Performance <performance>`.
- **New analytical method for ray-tracing**, which is much faster than full ray-tracing and can be used with full
accuracy for surfaces where the number of ray interactions is known exactly in advance (e.g. upright pyramids with
opening angles between 45 and 54 degrees). Note that the calculation of absorption profiles in interface layers
is not yet implemented for this method (though this is on the roadmap, as there is no fundamental reason this
cannot be done). Absorption in bulk layers is calculated as usual if the analytical method is used. This option
can be toggled on per surface in an rt_structure object, see :ref:`here <textures>`. The analytical method is not
yet implemented for calculating redistribution matrices (for the angular redistribution method), but this is
planned for the next minor release.
- **Phong scattering**: a new option for the ray-tracer, which allows additional non-specular scattering. The continuum
between perfectly specular and Lambertian scattering can be controlled with the Phong exponent; see the documentation
:ref:`here <textures>`.
- **Rigorous treatment of polarization in ray-tracing** (no changes to treatment of polarization in TMM and RCWA calculations).
See further mathematical details of the new method :ref:`here <polarization>`.
- Option to set a maximum number of bulk passes for the ray-tracer using the maximum_passes option
(see :ref:`Options <options>`).
- More detailed output from ray-tracing calculations. See the docstring for :literal:`rt_structure.calculate`
:ref:`here <ray_tracing>`.
- More detailed output from RCWA calculations.
**Possible backwards compatibility issues:**
- The (previously undocumented) returns from rt_structure.calculate with details on final ray directions and intensities
have been reorganized. See the docstring :ref:`here <ray_tracing>`.
- Previously, the ray-tracing method did not handle polarization correctly, assuming a constant mixture
of *s* and *p* polarization throughout the ray-tracing procedure regardless of the angle of the surface
textures. Thus, ray-tracing
calculations may now give slightly different results. For most cases, especially for initially
unpolarized light, the differences are small, but this
depends on the surface texture, layers, and materials used.