Lenses
Lenses are fundamental optical components used to focus or diverge light, making them essential for constructing imaging systems. The BeamletOptics.AbstractRefractiveOptic
type provides a general definition of components that refract light. This package includes a variety of rotationally symmetric lens models to simulate simple imaging setups. All lens models provided as part of this package are based on SDFs. Refer to the Signed Distance Functions (SDFs) section for more information.
A concrete implementation is provided by the Lens
type.
BeamletOptics.Lens
— TypeLens{T, S <: AbstractShape{T}, N <: RefractiveIndex} <: AbstractRefractiveOptic{T, S, N}
Represents an uncoated Lens
with a homogeneous RefractiveIndex
n = n(λ)
. Refer to the Lens
and SphericalLens
constructors for more information on how to generate lenses.
Fields
shape
: geometry of the lens, refer toAbstractShape
for more informationn
:RefractiveIndex
function that returns n(λ)
Additional information
Constructing lens shapes
In practice, a great variety and mixture of different lens shapes exists – e.g. spherical and aspherical lenses surfaces and all combinations thereof. Usually a lens is a block of a transparent, dielectric material with two optically active surfaces (fancy special cases using the sides of the lens as well exist, e.g. for HUD displays). It is common to describe such a lens by specifying the properties of the two surfaces and the material in between. This package, however, works with closed volume shapes for all of its optical elements and any erroneous (i.e. non-watertight) SDF might result in unphysical behaviour. Refer to the Geometry representation section for more information.
One of the following constructors can be used to generate lens objects:
Lens
constructor- capable constructor for a wide combination of surface types (spherical, aspherical, etc.)
SphericalLens
constructor- simplified constructor for spherical surfaces
Refer to the specific documentation or enter e.g. ? Lens
into the REPL to learn more about the constructors and their interfaces, as well as sign definitions and so on.
Surface based lens construction
To make it easier to specify lenses similar to established optical simulation frameworks, e.g. Zemax, the BeamletOptics.AbstractSurface
API can be used. This is a helper interface for surfaces specifications and interprets them to the corresponding SDF-based volume representation.
It is important to note that BMO does not work with these surfaces representations directly for ray tracing. All shapes are translated to closed volumes internally.
Currently the following surface types are implemented:
julia> BeamletOptics.list_subtypes(BeamletOptics.AbstractSurface);
└── BeamletOptics.AbstractSurface ├── BeamletOptics.AbstractCylindricalSurface │ ├── BeamletOptics.AbstractAcylindricalSurface │ │ └── AcylindricalSurface │ ├── CylindricalSurface │ └── RectangularFlatSurface └── BeamletOptics.AbstractRotationallySymmetricSurface ├── CircularFlatSurface ├── EvenAsphericalSurface └── SphericalSurface At least 9 types have been found.
A Lens
can be then constructed with the following function call:
BeamletOptics.Lens
— Method Lens(front_surface::AbstractRotationallySymmetricSurface, back_surface::AbstractRotationallySymmetricSurface, center_thickness::Real, n::RefractiveIndex)
Constructs a new Lens
object using the surface specifications front_surface
and back_surface
and the center_thickness
. These inputs are used to construct a UnionSDF
that consists of the appropriate sub-SDFs to represent the shape of the lens.
The material properties are supplied via the n
parameter.
Additional information
Lens constructor example
In practice, this works as follows: the bi-convex LB1811 lens consists of two spherical surfaces and can be constructed like this:
# refractive index of NBK7 for 532 and 1064 nm
NBK7 = DiscreteRefractiveIndex([532e-9, 1064e-9], [1.5195, 1.5066])
# lens diameter
d = BeamletOptics.inch
# lens types
r1 = 34.9e-3
r2 = -34.9e-3
l = 6.8e-3
LB1811 = Lens(
SphericalSurface(r1, d),
SphericalSurface(r2, d),
l,
NBK7
)
SDF-based spherical lenses
In order to model the lens surfaces shown above, the following SDF-based spherical lens shapes have been implemented:
BeamletOptics.ConvexSphericalSurfaceSDF
BeamletOptics.ConcaveSphericalSurfaceSDF
BeamletOptics.MeniscusLensSDF
BeamletOptics.PlanoSurfaceSDF
The BeamletOptics.AbstractSurface
will translate surface specifications into volume representations using the sub-volumes above. This is achieved by combining the sub-volumes via the BeamletOptics.UnionSDF
-API in order to enable the quasi-surface-based design of spherical lens systems. Additional distance functions have been implemented in order to model aspherical and cylinder lenses.
Spherical lenses
Spherical lenses are characterized by surfaces with constant curvature, making them straightforward to model and ideal for basic imaging applications. The SphericalLens
constructor can be used in order to define this lens type in a concise manner.
BeamletOptics.SphericalLens
— FunctionSphericalLens(r1, r2, l, d=1inch, n=λ->1.5)
Creates a spherical Lens
based on:
r1
: front radiusr2
: back radiusl
: lens thicknessd
: lens diameter, default is one inchn
:RefractiveIndex
as a function of λ, i.e.n = n(λ)
Notes
The ROC is defined to be positive if the center is to the right of the surface. Otherwise it is negative.
If l
is set to zero, a ThinLens
will be created. However, note that the actual lens thickness will be different from zero.
Below, several spherical lenses are recreated from manufacturer data.
GaussianBeamlet
parameters- $w_0 = 5~\text{mm}$
- $\lambda=532~\text{nm}$
- Lenses (in order of appearance)
The spherical lenses are shown below. To recreate this figure, refer to the Spherical lens example.
Aspherical lenses
Aspherical lenses offer more advanced control over aberrations, enabling higher performance in specialized optical systems. The package offers surface support for rotationally symetrical aspheric lenses that adhere to the DIN ISO 10110 convention with even terms.
To construct a lens with any possible combination of convex/concave, spherical/aspherical surfaces you can use the Lens
constructor with the EvenAsphericalSurface
surface specification type.
A complex example of such a lens might look like the following example. This lens has the following peculiarities:
- The front surface is an aspherical convex surface with a clear diameter smaller than the full mechanical diameter
- The back surface is an aspherical concave surface which first curves outwards before change slope and curving invards, giving a more "convex" like character while still beeing a concave lens by definition. Also this surface extends towards the full outer diameter.
Aspheric lenses are somewhat experimental at the moment. Use this feature with some caution when building unconventional lenses. Default/simple aspheres work fine.
L3 = Lens(
EvenAsphericalSurface(
3.618e-3, # r
3.04e-3, # d
-44.874, # conic
[0,-0.14756*(1e3)^3, 0.035194*(1e3)^5, -0.0032262*(1e3)^7,
0.0018592*(1e3)^9, 0.00036658*(1e3)^11, -0.00016039*(1e3)^13,
-3.1846e-5*(1e3)^15] # coeffs
),
EvenAsphericalSurface(
2.161e-3, # r
3.7e-3, # d
-10.719, # conic
[0,-0.096568*(1e3)^3, 0.026771*(1e3)^5, -0.011261*(1e3)^7,
0.0019879*(1e3)^9, 0.00015579*(1e3)^11, -0.00012433*(1e3)^13,
1.5264e-5*(1e3)^15] # coeffs
),
0.7e-3, # center_thickness
n -> 1.580200 # refractive index
)
Refer to the Simple aspherical lens example for a showcase on how to implement a plano-convex asphere.
Cylindrical lenses
Cylindrical lenses are non-rotationally symmetric lenses where a spherical or aspherical curvature is present only in one dimension, i.e. leading to a cylindrical shape. Thus, they focus or collimate light only in one dimension. This package currently supports convex/concave cylindrical and acylindrical lenses with an even aspheric deviation from the cylindrical shape.
A plano-convex cylindrical lens can be constructed in the following way. Note that for this lens type a plano-surface can be constructed by passing a RectangularFlatSurface
to the lens constructor:
r = 5.2e-3 # radius
d = 10e-3 # diameter/width of the cylindric portion
h = 20e-3 # height/length of the cylinder
ct = 5.9e-3 # center thickness
lens = Lens(
CylindricalSurface(r, d, h),
ct,
n -> 1.517
)

An acylindrical lens can easily be constructed using the AcylindricalSurface surface type:
radius = -15.538e-3
diameter = 25e-3
height = 50e-3
conic_constant = -1.0
lens = Lens(
BeamletOptics.AcylindricalSurface(
radius,
diameter,
height,
conic_constant,
[0, 1.1926075e-5*(1e3)^3, -2.9323497e-9*(1e3)^5, -1.8718889e-11*(1e3)^7, -1.7009961e-14*(1e3)^9, 3.5481542e-17*(1e3)^11, 6.5241296e-20*(1e3)^13]
),
7.5e-3,
n -> 1.777
)

Doublet lenses
The DoubletLens
is an example for a multi-shape object as mentioned in the Multi-shape objects section. For spherical doublet lenses the following constructor can be used.
BeamletOptics.SphericalDoubletLens
— MethodSphericalDoubletLens(r1, r2, r3, l1, l2, d, n1, n2)
Generates a two-component "cemented" doublet lens consisting of two spherical lenses. For radii sign definition, refer to the SphericalLens
constructor.
Arguments
r1
: radius of curvature for first surfacer2
: radius of curvature for second (cemented) surfacer3
: radius of curvature for third surfacel1
: first lens thicknessl2
: second lens thicknessd
: lens diametern1
: first lensRefractiveIndex
n1
: second lensRefractiveIndex
The following image shows the AC254-150-AB doublet lens for 488 and 707 nm. It has been created using the SphericalDoubletLens
constructor shown above.
For a complex showcase featuring spherical singlet and doublet lenses, refer to the Double Gauss lens example page.