How to Model the Human Eye in ZEMAX

How to Model the Human Eye in ZEMAX
Michael D. Tocci, Ph.D.
21-April-2007
Introduction
Accurate simulation and modeling of the human eye can be tricky. Entire volumes have
been written on the subject, and it is a subject that continues to spur new developments. In
this study, we will create model of a human eye in ZEMAX using the Liou & Brennan 1997
eye model. This is a fairly up-to-date and comprehensive model of the eye. It accounts for
many realistic factors that other models do not, such as an offset pupil, a curved retina
surface, an inward-pointing eyeball, and a crystalline lens with two different gradient
refractive index profiles (one for the front half and a second profile for the rear half). The
prescription for this eye model (along with a wealth of other extremely important and
interesting information) can be found in the book titled “Optics of the Human Eye,” by David
A. Atchison and George Smith (2000). After successfully generating this eye model in
ZEMAX, we will use it to design a free-form progressive eyeglass lens.
Human Eye Model
We’ll begin by setting up the human eye model. You can open the attached file
“Human_Eye_Model.ZMX” to skip typing in all the surfaces by hand (in that case, you can
skip ahead to the section titled, “Optimizing the PAL”).
If you’re going to type the file in by hand instead of loading the attached file, you’ll want to
first put ZEMAX into Sequential Mode, and then set the System|General|Units Lens Units to
“Millimeters”. Next you’ll want to set the Wavelengths (found in the System section) to “F,
d, C (Visible)” as shown below:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Next, go to System|General|Aperture and set the Aperture Type to “Float By Stop Size” and
then go to System|General|Glass Catalogs and add the catalog “MISC” to your Glass
Catalogs. Set just one Field, of Type “Angle(Deg)” with an X-Field value of 5:
Now insert 3 surfaces before the STOP and insert another 3 surfaces after the STOP. Below
is a step-by-step guide to setting up all the surfaces, one at a time.
Surface 0
This surface is not actually labeled Surface 0 in the ZEMAX Lens Data Editor, it’s labeled
“OBJ” and it’s the object surface. Below are the settings for Surface 0 (note that any
settings not mentioned here should be left with their default values):
Surf:Type = Standard
Comment = Object
Radius = Infinity
Thickness = 1.00E+009
Surface 1
The first surface (after the Object) is just a dummy plane, and we use it to make our layout
drawings easier to understand. Below are the settings for Surface 1:
Surf:Type = Standard
Comment = Input Beam
Radius = Infinity
Thickness = 50.0
(Note: that the actual value of the thickness of this surface is not important: feel free to
change it as necessary to make your layout drawings look just right)
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Since we’re not actually interested in seeing this surface in the layout drawings (we only
want to see the rays after they pass through the surface), let’s right click the Surf:Type cell
for this surface, then click the Draw tab, and then check the Do Not Draw This Surface box.
Surface 2
This is the outer cornea surface. Below are the settings for Surface 2:
Surf:Type = Standard
Comment = Cornea
Radius = 7.77
Thickness = 0.55
Glass = Model; 1.376, 50.23
Semi-Diameter = 5.00
Conic = -0.18
Note: to set these glass parameters you will need to right-click the Glass cell, select “Model”
as the Solve Type from the drop down list, and then type in the values like this:
Surface 3
This is the interface between the cornea and the aqueous humor. Below are the settings for
Surface 3:
Surf:Type = Standard
Comment = Aqueous
Radius = 6.4
Thickness = 3.16
Glass = Model; 1.336, 50.23
Semi-Diameter = 5.00
Conic = -0.60
Surface 4
This surface is not actually labeled Surface 4 in the ZEMAX Lens Data Editor, it’s labeled
“STO” and it’s the aperture stop of the system. This is our eye model’s pupil plane. Below
are the settings for Surface 4:
Surf:Type = Standard
Comment = Pupil
Radius = Infinity
Thickness = 0.00
Glass = Model; 1.336, 50.23
Semi-Diameter = 1.25
In order to model the offset pupil location, we’ll need to decenter this surface. Right click
the Surf:Type cell for this surface, and then click the Tilt/Decenter tab. Set this surface to
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
have an X-decenter value of -0.5mm and then for After Surface select “Reverse This
Surface,” as shown below:
Surface 5
This is the anterior (front) portion of our model’s crystalline lens. Below are the settings for
Surface 5:
Surf:Type = Gradient 3
Comment = Lens-front
Radius = 12.4
Thickness = 1.59
Semi-Diameter = 5.00
n0 = 1.368
Nr2 = -1.978E-003
Nz1 = 0.049057
Nz2 = -0.015427
Surface 6
This is the posterior (rear) portion of our model’s crystalline lens. Below are the settings for
Surface 6:
Surf:Type = Gradient 3
Comment = Lens-back
Radius = Infinity
Thickness = 2.43
Semi-Diameter = 5.00
n0 = 1.407
Nr2 = -1.978E-003
Nz2 = -6.605E-003
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Surface 7
This is the rear surface of the crystalline lens (that is, it is the interface between the
crystalline lens and the vitreous body of the eye). Below are the settings for Surface 7:
Surf:Type = Standard
Comment = Vitreous
Radius = -8.1
Thickness = 16.23883
Glass = Model; 1.336, 50.23
Semi-Diameter = 5.00
Conic = 0.96
Surface 8
This surface is not actually labeled Surface 8 in the ZEMAX Lens Data Editor, it’s labeled
“IMA” and it’s the image surface. This is the retina of our model. Below are the settings for
Surface 8:
Surf:Type = Standard
Comment = Retina
Radius = -12.0
Semi-Diameter = 5.00
A quick check of the system’s 3D Layout (where First Surface is set to Surface 2, instead of
the default Suface 0) shows that something is not quite right:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
{Note: I like to make ZEMAX draw graphics as white lines on a black background. This is set
under File...Preferences...Graphics:
How to set black backgrounds for graphics
There are other choices available...experiment!}
Now back to the layout drawing. The top and bottom marginal rays are getting cut off by
the pupil. This can’t be right, especially since we’ve chosen our system’s Aperture Type to
be “Float By Stop Size”: the top and bottom marginal rays should, by definition, successfully
pass though the pupil. Something is amiss with our pupil. When our pupil is suspect, we
always check the Pupil Aberration Fan (this is an analysis tool that can be found under
Analysis | Fans | Pupil Aberration). Our system’s pupil aberration fan looks like this:
The pupil aberration fan is telling us that there is 40% pupil aberration in the negative Xdirection. This is caused by the fact that ZEMAX is getting confused about where to aim rays
so they pass through our offset pupil (remember: we decentered the pupil 0.5mm – which
is 40% of the pupil semi-diameter – in the negative x-direction).
Luckily, ZEMAX has an easy fix for this problem: Ray Aiming. Go to System|General and
then click the Ray Aiming tab. Now set Ray Aiming to Paraxial, as shown below:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Click the OK button and now we see that the Pupil Aberrations are eliminated:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
And the 3D Layout shows the top and bottom marginal rays successfully passing through
the pupil:
This is the Liou & Brennan (1997) eye model. At this point, your Lens Data Editor should
look like this:
Change the Settings on the 3D Layout so that Rotation Z = 90, and set it so that the First
Surface is Surface 1 (input beam) and you’ll see the top-down view of the model, complete
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
with offset pupil and off-axis field (I’ve added some annotations to the drawing below to
label the various parts of the model):
To analyze this lens, let’s first look at the spot diagram:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Next we’ll check the FFT MTF:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Note that I’ve chosen a Max Frequency setting of 100 lp/mm. This corresponds to a singlespot resolution of 5 um, which corresponds closely to the resolution required for 20/20
Snellen Visual Acuity. You can see that this model should produce a well-resolved image up
to 100 lp/mm, and therefore is a good model of a 20/20 human eye.
Finally, in order to get a good feel for how well this “patient” can see, we’ll check the
Diffraction Image Analysis. The diffraction image analysis feature is similar to the
geometric image analysis feature, except the complex system Optical Transfer Function
(OTF) is used to compute the image appearance. This method accounts for the finite pass
band and other diffraction related effects real optical systems have on image formation.
For this, let’s set it up to image the letter “F” at a size that corresponds with 20/20 Snellen
Acuity. Go to Analysis|Image Analysis|Diffraction Image Analysis, and then click Settings
and set the values as shown below:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Here is the resulting Diffraction Image Analysis diagram:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
External Optics
At this point, with a good human eye model set up in ZEMAX, it’s possible to add external
elements to the design. For example, if you have a measured cornea-shape map, you could
replace the cornea surface with a “Grid Sag” surface and import the data into ZEMAX. Or if
you had a specially-designed intraocular lens (IOL) to model, you could replace the two
gradient surfaces with the IOL prescription.
In this example, we will be designing a Progressive Addition Lens (PAL) and we’ll start by
adding an eyeglass lens to the front of our model. We’ll optimize this PAL to provide good
imaging for near, mid-range, and far objects.
To ensure a realistic modeling of the eye’s movement as the “patient” moves her eye up
and down, we will want to keep the eyeglass in place, and have the eye model rotate about
its center. That is, we’ll have to place a coordinate break at the center of the eyeball, and
then have the entire eye model rotate about this point. To do this, we’ll first place the
eyeglass lens into the Lens Data Editor, and then we’ll move forward an appropriate amount
of Thickness to get to the center of the eye. Then we’ll put in a Coordinate Break surface,
and then we’ll move backwards to the desired location of the eye model’s first surface, the
cornea. This might seem a little confusing at first, but it’s really quite simple, as you’ll see.
First, insert three surfaces between the Input Beam (Surface 1) and the Cornea (Surface 2).
These three surfaces will represent the front and rear surfaces of the eyeglass lens, and a
coordinate break to tilt the eye. You’ll notice that I’ve chosen to place the eyeglass lens
15mm from the eye.
We’re going to place the Coordinate Break surface at the center of the eyeball (which I
estimate to be approximately 13mm from the front cornea surface). This way, the eye will
rotate about its center, in a way that mimics the actual motion of a human eye. Below is a
guide to setting up these three new surfaces.
You’ll see below that the thickness from the back of the eyeglass lens to the coordinate
break (at the eyeball’s center) is 28mm (that’s 15mm from eyeglass to cornea plus 13mm
from cornea to center of eyeball). Then, after the coordinate break, there is a thickness of
negative 13mm, to get back to the cornea surface.
Surface 2
This is the front surface of the eyeglass lens.
Surf:Type = Even Asphere
Comment = glasses-front
Radius = 100.0
Thickness = 3.0
Glass = POLYCARB
Semi-Diameter = 20.0
Surface 3
This is the rear surface of the eyeglass lens.
Surf:Type = Extended Polynomial
Comment = glasses-back
Radius = 100.0
Thickness = 28.0
Semi-Diameter = 20.0
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Surface 4
This is the coordinate break located at the center of the eyeball.
Surf:Type = Coordinate Break
Comment = center of eye
Thickness = -13.0
Now let’s add a couple of new configurations. Open the Multi-Configuration Editor (MCE),
and hit Ctrl-Shift-Insert twice. We’ll need two extra Multi-Configuration Operands, so now
hit Insert twice. There should now be nine empty cells in the MCE. We’re going to make the
first Configuration represent the eye looking straight ahead through the lens, at an object
located far away. The second Configuration will represent the eye looking slightly down
through the lens, at a mid-range object. Finally, the third Configuration will represent the
eye looking far down, at a very near object. Changing the object distance is handled with a
THIC operand (changing the thickness of Surface 0) and changing the eye’s up-down angle
is handled by changing the Tilt About X (which is Parameter 3) of Surface 4 (the Coordinate
Break surface). Below is a table showing how the MCE should be filled in:
We’ve now got an eyeglass lens and an eyeball, and we’ve set the eyeball so that it rotates
in a realistic manner. There’s one more minor step that will help make our layout plots
easier to understand: we need to set the Global Coordinate Reference Surface to one that is
before the Coordinate Break in the Lens Data Editor (LDE). The idea here is that after our
Coordinate Break (surface 4) the rest of the surfaces in the LDE will be tilted some amount,
relative to the surfaces before the Coordinate Break.
When we make layout plots, we would like to have the plots showing the eyeglass lens
staying in place, while the eyeball rotates (instead of having the eyeball stay in place while
the eyeglass moves around the eye). To ensure that this happens, we go to System|General
and click on the Misc. tab. Then set the Global Coordinate Reference Surface to a value of 4
or lower (representing a surface before the Coordinate Break takes place in the LDE).
A quick check of the 3D Layout (with First Surface set to a value of 1; Rotation X, Rotation
Y, and Rotation Z values set to 0; Configuration set to All; and Offset Y set to -50) shows
that something is not quite right:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
The problem is that as our eye model rotates down, it’s not really “looking” downward. This
is because the Field value is remaining the same as the eye rotates, and what we want is for
the Field to change so that the focused beam always hits the exact same part of the retina
(this focal point on the retina is called the fovea centralis). So what we really want to keep
constant is the image height, not the field angle. To do this, we’re going to change our Field
Type from “Angle(Deg)” to “Real Image Height.”
We want the position of our on-axis image to remain unchanged after we make this Field
Type switch, so the first thing we’ll do is check to see where the on-axis image is formed.
This information is calculated in the Spot Diagram:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
You can see that just under the actual spot diagram plot, there is a measurement of the (X,
Y) location of the reference point (I’ve chosen a Chief Ray reference for my spot diagram)
on the image surface. We see here that the Chief Ray intercepts the image surface at an X
value of 1.462, therefore we will use a Real Image Height value of X = 1.462:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
With our Field Data set up this way, we will be guaranteed that, irrespective of which
configuration we choose, the Chief Ray will intercept the image surface (that is, the retina)
at X = 1.462mm, Y = 0.0. This is a good simulation of the fact that no matter where the
human eye rotates, the center of vision is always in the same exact spot on the retina (the
fovea centralis).
Here is a 3D Layout plot showing the system from a side view for the 3 configurations (Far,
Mid, and Near object distances):
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
The MTF curves and Diffraction Images for our system’s three configurations are shown
below in order from Far to Near:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Note that because our model does not include accommodation by the crystalline lens (to
adapt to the change from far to near object distances) the system shows very poor
performance for mid-range and near objects, as we would expect in a presbyopic patient,
for example.
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Prepare to Optimize
We’re going to be optimizing the eyeglass lens to take on a free-form shape, in an attempt
to provide accommodation to the eye as it rotates downward. Our next step is to set
variables in the Lens Data Editor (LDE). The only things we’re interested in varying are the
shapes of the front and back surfaces of the eyeglass lens.
In the LDE, set the Radius, Conic, and 2nd Order Term through 12th Order Term of Surface 2
(glasses-front) to variables – there should be eight parameters total for this surface that are
now allowed to vary. Then in the Extra Data Editor (EDE) set the Max Term # of Surface 3
(glasses-back) to 40 and the Norm Radius of the same surface to 20.0. Now set all forty
polynomial coefficient terms for Surface 3 to be variables.
Before we can optimize the shape of the eyeglass lens, we need to set up a Merit Function.
In the Merit Function Editor (MFE), go to Tools|Default Merit Function. Set the Optimization
Function and Reference values to “RMS,” “Wavefront,” and “Centroid.” Set the Pupil
Integration Method to “Gaussian Quadrature” and choose 3 Rings and 6 Arms. Note that the
Assume Axial Symmetry box will already be un-checked and we will leave it that way:
Click “OK” and ZEMAX will automatically generate a few thousand optimization operands for
us.
Before we start optimizing, we just need to add a couple of edge thickness operands, to
keep the edges of the eyeglass lens from becoming too thick or too thin. The eyeglass lens
comprises an Extended Polynomial surface type, and so it is not going to remain rotationally
symmetric during optimization. Therefore, we must use operands that check the edge
thickness at multiple points around the lens. XNEG and XXEG are just such operands. We
will add these operands to the merit function to ensure that the edge thickness of the
eyeglass lens is between 1 and 8mm thick.
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Insert two new operands at the beginning of the Merit Function. Below are the settings to
use for these two new operands:
First new operand
Type = XNEG
Surf1 = 2
Surf2 = 3
Zone = 0
Target = 1
Weight = 1
Second new operand
Type = XXEG
Surf1 = 2
Surf2 = 3
Zone = 0
Target = 6
Weight = 1
Optimizing The PAL
At this point, all the hard work of the design is complete. The attached file,
“Human_Eye_Model.ZMX,” represents all the above work to this point.
The one thing left to do is to optimize the design by going to
Tools|Optimization|Optimization and then clicking the Automatic button.
After some time, ZEMAX will finish optimizing and you’ll be left with an interesting, freeform, Progressive Addition Lens (PAL):
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
The MTF curves and Diffraction Images for our newly-optimized system’s three
configurations are shown below in order from Far to Near:
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com
Summary and Attachments
We used ZEMAX to model a human eye using realistic parameters, including a gradient
refractive-index crystalline lens, offset pupil, curved retina, and off-axis field angle. We then
provided for a realistic rotation of this model and used this rotating eye model to design a
progressive addition lens (PAL).
Human_Eye_Model.ZMX
Human_Eye_Model.SES
Note: Attachments are available from the ZEMAX Knowledge Base online:
http://www.zemax.com/kb/articles/186/7/How-to-Model-the-Human-Eye-inZEMAX/Page7.html
Copyright © 2007 Michael D. Tocci, Contrast Optical Design & Engineering, Inc. All Rights Reserved.
www.contrastoptical.com