Table of Contents
Optiland is a Python-based, open-source lens design and analysis framework. With a simple and intuitive Python interface, Optiland enables the design, optimization, and analysis of complex optical systems, from paraxial and real raytracing to polarization, coatings, and wavefront analyses. It supports 2D/3D visualization, comprehensive tolerancing, local and global optimization, and freeform optics, among other features. Built on the speed of NumPy and SciPy, Optiland delivers computational efficiency and flexibility across a wide range of optical tasks.
Get started immediately with Optiland Tutorial #1, see the extensive Learning Guide, or read the full documentation at Read the Docs.
Python code to generate this 3D visualization:
from optiland.samples.objectives import ReverseTelephoto
lens = ReverseTelephoto()
lens.draw3D()
The full documentation for Optiland is hosted on Read the Docs.
Explore the Example Gallery for a wide range of lens designs and analyses created with Optiland.
You can install the package using pip. To do so, follow these steps:
-
Open a terminal or command prompt.
-
Run the following command to install the package:
pip install optiland
- Lens entry
- 2D/3D visualization
- Paraxial and aberration analyses
- Real and paraxial ray tracing, including aspherics and freeforms
- Polarization ray tracing
- Real analysis functions (spot diagrams, ray aberration fans, OPD fans, distortion, PSF, MTF, etc.)
- Glass and material catalogue (based on refractiveindex.info)
- Design optimization (local and global)
- Wavefront and Zernike analysis
- Tolerancing, including sensitivity analysis and Monte Carlo methods
- Coating and surface scatter (BSDF) analysis
- Zemax file import
The code itself is in constant flux and new functionalities are always being added.
This guide gives a step-by-step approach to learning how to use Optiland.
- Introduction to Optiland
- Tutorial 1a - Optiland for Beginners
- Lens entry
- Material selection
- Aperture, field and wavelength selection
- Drawing a lens in 2D and 3D
- Tutorial 1b - Determining Lens Properties
- Focal length
- Magnification
- F-Number, Entrance/Exit pupil sizes & positions
- Focal, Principal, and Nodal points, etc.
- Tutorial 1a - Optiland for Beginners
- Real Raytracing & Analysis
- Tutorial 2a - Tracing & Analyzing Rays
- How to trace rays through a system
- Analyzing ray paths & properties
- Tutorial 2b - Tilting & De-centering Components
- Tracing rays through misaligned components
- Tutorial 2c - Monte Carlo Raytracing Methods
- How variations in lens properties impact lens performance
- Tutorial 2d - Aspheric Components
- Modeling even aspheres
- Tutorial 2a - Tracing & Analyzing Rays
- Aberrations
- Tutorial 3a - Common aberration analyses/plots
- Spot diagrams
- Ray fans
- Y-Ybar plots
- Distortion / Grid distortion plots
- Field curvature plots
- Tutorial 3b - 1st & 3rd-Order Aberrations
- Calculation of seidel, 1st & 3rd-order aberrations
- Tutorial 3c - Chromatic Aberrations
- Achromatic doublet to reduce chromatic aberrations
- Tutorial 3a - Common aberration analyses/plots
- Optical Path Difference (OPD), Point Spread Functions (PSF) & Modulation Transfer Function (MTF)
- Tutorial 4a - Optical Path Difference
- OPD fans and plots
- Tutorial 4b - PSF & MTF Calculation
- Geometric MTF
- FFT-based PSF/MTF
- Tutorial 4c - Zernike Decomposition
- Decomposing wavefront using Zernike polynomials
- Coefficient types: Zernike standard, Zernike fringe, Zernike Noll
- Tutorial 4a - Optical Path Difference
- Optimization
- Tutorial 5a - Simple Optimization
- Operand and variable definition
- Local optimization
- Tutorial 5b - Advanced Optimization
- Global optimization
- Tutorial 5c - Optimization Case Study
- Complete process of designing a Cooke triplet
- Tutorial 5a - Simple Optimization
- Coatings & Polarization
- Tutorial 6a - Introduction to Coatings
- Simple coatings in Optiland
- Impact of coatings on system performance
- Tutorial 6b - Introduction to Polarization
- Basics of polarization in Optiland
- Analyzing polarization performance
- Tutorial 6c - Advanced Polarization - Update in progress (target completion: Nov. 2024)
- Waveplates, polarizers, and the Jones matrix
- Jones pupils
- Tutorial 6a - Introduction to Coatings
- Advanced Optical Design
- Tutorial 7a - Lithographic Projection System
- Optimizing and Analyzing a Complex Lithography System
- Tutorial 7b - Surface Roughness & Scattering
- Lambertian and Gaussian scatter models
- Tutorial 7c - Freeform Surfaces
- Designing non-standard optical systems with freeform surfaces
- Tutorial 7a - Lithographic Projection System
- Tolerancing
- Tutorial 8a - Introduction to Tolerancing
- Sensitivity studies
- Tutorial 8b - Advanced Tolerancing
- Monte Carlo-based Tolerancing
- Tutorial 8a - Introduction to Tolerancing
- Lens Catalogue Integration
- Tutorial 9a - Edmund Optics Catalogue
- Reading Zemax files
- Reading and analyzing an aspheric lens
- Tutorial 9b - Thorlabs Catalogue
- Reading and analyzing an achromatic doublet pair lens
- Tutorial 9a - Edmund Optics Catalogue
- Extending Optiland
- Tutorial 10a - Custom Surface Types
- Adding new surface types
- Tutorial 10b - Custom Coating Types - Update in progress (target completion: Nov. 2024)
- Adding new coating types
- Tutorial 10c - Custom Optimization Algorithms - Update in progress (target completion: Nov. 2024)
- Adding new optimization approaches
- Tutorial 10a - Custom Surface Types
- Machine Learning in Optical Design
- Tutorial 11a - Reinforcement Learning for Lens Design - Update in progress (target completion: Nov. 2024)
Distributed under the MIT License. See LICENSE for more information.
Kramer Harrison - kdanielharrison@gmail.com