Table of Contents
Optiland is a lens design and analysis program written in Python 3. It provides an intuitive and efficient interface for defining and visualizing lens systems, performing optimization of lens systems based on user-defined merit functions and variables, as well as analyzing optical systems using geometric and diffraction-based methods. Leveraging computational libraries such as NumPy and SciPy, Optiland delivers exceptional performance and efficiency in handling complex optical computations.
Get started immediately with Optiland Tutorial #1 or see the extensive Learning Guide.
Python code to generate this 3D visualization:
from optiland.samples.objectives import ReverseTelephoto
lens = ReverseTelephoto()
lens.draw3D()
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 git+https://github.com/HarrisonKramer/optiland.git
- 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 catalogue (based on refractiveindex.info)
- Design optimization (local and global)
- Wavefront and Zernike analysis
- Coating and surface scatter (BSDF) analysis
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: Sept. 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 - Update in progress (target completion: Sept. 2024)
- Tutorial 7a - Lithographic Projection System
- Tolerancing
- Tutorial 8a - Introduction to Tolerancing - Update in progress (target completion: Sept. 2024)
- Sensitivity studies
- Tutorial 8b - Advanced Tolerancing - Update in progress (target completion: Sept. 2024)
- Monte Carlo-based Tolerancing
- Tutorial 8a - Introduction to Tolerancing - Update in progress (target completion: Sept. 2024)
- 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 - Update in progress (target completion: Sept. 2024)
- Adding new surface types
- Tutorial 10b - Custom Coating Types - Update in progress (target completion: Sept. 2024)
- Adding new coating types
- Tutorial 10c - Custom Optimization Algorithms - Update in progress (target completion: Sept. 2024)
- Adding new optimization approaches
- Tutorial 10a - Custom Surface Types - Update in progress (target completion: Sept. 2024)
- Machine Learning in Optical Design
- Tutorial 11a - Reinforcement Learning for Lens Design - Update in progress (target completion: Sept. 2024)
Distributed under the GPL-3.0 License. See LICENSE for more information.
Kramer Harrison - kdanielharrison@gmail.com