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. The file is included in the zip archive that can be downloaded va the link on the last page of this article.
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:

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)
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 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
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
T
his 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:

{Note: I like to make ZEMAX draw graphics as white lines on a black background. This is set under File...Preferences...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 X-direction. This is caused by the fact that ZEMAX is aiming rays at the (undecentered) paraxial entrance pupil. Remember that 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:

Click the OK button and now we see that the Pupil Aberrations are eliminated:

And the 3D Layout shows the top and bottom marginal rays successfully passing through the decentered 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 with offset pupil and off-axis field (I’ve added some annotations to the drawing below to label the various parts of the model):
