- Home
- User Articles
- How to Model the Human Eye in ZEMAX
- Home
- Sequential Ray Tracing
- System Modeling
- How to Model the Human Eye in ZEMAX
How to Model the Human Eye in ZEMAX
- By Mike Tocci
- Published 26 April 2007
- User Articles , System Modeling
-
Rating:




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
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:

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:

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:

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

The MTF curves and Diffraction Images for our system’s three configurations are shown below in order from Far to Near:

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.
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
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:

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:

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:

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

The MTF curves and Diffraction Images for our system’s three configurations are shown below in order from Far to Near:

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.