In this article, an example is demonstrated to set up an exit pupil expander (EPE) using the RCWA tool for an augmented reality (AR) system in OpticStudio. The planning of gratings in k-space (optical momentum) is first explained, and the details of setting up each grating is discussed.
Authored By Michael Cheng
This article is part 3 of 3 articles, which demonstrate how to check the footprint diagram and simulate the image for the exit pupil expander system. In the end, possible improvements and other considerations to the EPE system are also discussed. Links to other parts are listed below for reader’s convenience.
Methods to get MTF
Since the system is built in non-sequential mode, it’s a little tricky to calculate MTF for the EPE AR system. There are 2 ways to calculate MTF.
(1) Use Geometric MTF data provided by Detector Rectangle.
(2) Use the Huygens PSF method with Detector Rectangle and convert the PSF to MTF in other software (ex. MATLAB)
In the following section, each method will be introduced.
Method 1: Geometric MTF
Geometric MTF can be calculated with only a few steps as shown below.
1. Open the sample file from the previous part, Part 3, of this article series: “step5_image simulation.zar”.
2. Ignore and hide the Slide object.
Figure 1. Ignore and Hide Object.
3. Change the Source DLL to Source Point parameters as shown in Figure 2.
Figure 2. Parameter values of Source Point.
4. Make the final detector smaller with X Half Width = Y Half Width = 0.005.
5. After tracing rays, the geometric PSF and MTF can be seen as in Figure 3. Note that the result in Figure 3 is unrealistic as the focused spot is much smaller than Airy Disk. This is because the system uses ideal lenses (Paraxial Lens) for both the light engine and human eye system. However, once users consider the real lens system for the light engine part, the analysis of geometric PSF/MTF could still be meaningful.
Figure 3. Geometric PSF and MTF.
Preparation for calculation of diffraction PSF/MTF
Before starting discussion how to calculate diffraction PSF/MTF, two changes need to be made in order to correctly handle phase of rays in non-sequential mode. Based on the changes made in previous section about geometric PSF/MTF, the following steps are performed. All changes described here are saved as “step6_calculate_PSF.zar” and provided in attachment download.
Replace the Paraxial Lens with User Defined Diffractive DLL
The two Paraxial Lens objects are replaced by Diffraction Gratings with a user-defined diffractive DLL “NSC_Paraxial_Lens.dll”. The “NSC_Paraxial_Lens” DLL is designed to work the same as the Paraxial Lens object while handling the ray phase correctly. Up to the time (2021-04-24) of writing this article, the built-in Paraxial Lens object in non-sequential mode does not calculate phase for output rays correctly, so all coherent analyses are incorrect as a result. This diffractive DLL can also be used in any other cases when Paraxial Lens is used and coherent analysis is required. Note there are some limitations when using this “NSC_Paraxial_Lens.dll”. Some of them can be removed upon user’s request. However, some of them are limited by theory. These limitations include:
* The refractive index of the materials at two sides of the NSC_Paraxial_Lens can only be 1.0 or rays terminate when hitting the object. In this article, it’s not a problem because the paraxial lens is in AIR. This limitation can be removed upon user’s request.
* The DLL assumes rays are incident from the -z side. Rays hitting the diffractive face from the +z side will terminate. Note that for this reason, the second Diffraction Grating object is rotated by 180 degrees about the X axis so that rays come from the -z side of the diffractive lens. This limitation can be removed upon user’s request.
* The DLL only works with the transmit order of zero. Other orders are ignored. For this reason, both Start Order and Stop Order should be set to zero. It’s meaningless to set them to other numbers with this diffractive DLL. This limitation cannot be removed as it’s meaningless to do so.
* The DLL only works for defined conjugates. In other words, it only works when the object and image distance is known. This limitation cannot be removed because a paraxial lens is a virtual and unrealistic component. For this reason, it’s suggested that designers should change to a real light engine system which includes aberration when the design matures in order to estimate a more realistic condition.
Figure 4. Paraxial lenses are replaced by Diffraction Gratings with diffractive DLL NSC_Paraxial_Lens.dll.
Redefine the second (turning) grating with User Defined Object + Polygon_grating.dll
Up to the time (2021-04-24) of writing this article, there is a bug where Boolean Native/CAD cannot handle the phase of rays correctly. In order to work around this issue, the second grating is rebuilt using a User-Defined Object (Polygon.dll). This User-Defined Object directly allows users to define a polygon plate where the vertices are specified by its object parameters (p1x, p1y, p2x, p2y, …). This should be more convenient than making the polygon plate using Boolean Native/CAD.
Figure 5. The 3 objects, Boolean Native, Extruded, and Diffraction Grating, are replaced by User Defined Object DLL + Polygon_grating.dll.
Check version of RCWA DLL
In order to handle the phase of rays correctly, it is required to use RCWA DLLs compiled later than 2021-04-18. This can be checked with the RCWA visualization tool (found in the Programming tab…User Extensions…”RCWAvisualization”)as shown in Figure 6.
Figure 6. Checking the RCWA DLL version in the RCWA visualization tool.
Detector for getting pupil function and Huygens PSF
As shown in Figure 7, a detector is set at right after the Annulus object for checking the truncated pupil function for analysis.
Figure 7 Four objects laminated at the eye box.
Figure 8. Truncated pupil function. Left side shows Coherent Irradiance. Right side shows Coherent Phase.
Also, in order to calculate Huygens PSF, it is required to set PSF Wave# to a non-zero value for the detector of the eye system. The number should be non-zero and represent the wavenumber as shown in the System Explorer for the wavelength of light that designers want to evaluate. It’s important that only one wavelength should be traced when evaluating the Huygens PSF. Also, note this setting will usually make the raytracing slow and should be used only when evaluating Huygens PSF is needed. The simulated Huygens PSF is shown in Figure 10.
Figure 9. Set up PSF Wave# to a non-zero value in order to evaluate Huygens PSF on the detector. The PSF Wave# is corresponds to the wavelength defined in the System Explorer.
Figure 10. Left side picture shows the Huygens PSF calculated on the human eye detector. Right side shows the phase distribution at the exit pupil before truncation.
At this point, all the required data for calculating MTF is ready. The following section explains how to get MTF via the PSF and the pupil function.
Discussion for the PSF
Users may wonder why there is a slight shift in the PSF and why it looks like there is a tilting phase in the pupil function. The answer is this is because the second grating’s period is not accurate enough. As shown in Figure 11 and Figure 12, by increasing the significant digits for the period of the second grating, this slight error can be removed. The value given is 0.27779397 cycles/micron.
Figure 11. Change the period of the second grating to a more accurate value to remove the tilting phase in the pupil function and the shift in the resulting PSF.
Figure 12. Simulation result after change the period of the second grating to a more accurate value.
Method 2: Huygens PSF converted to MTF with Fourier transformation
It is easy to calculate MTF from a given PSF. Here, a demo is performed via MATLAB.
1. Generate boilerplate code for MATLAB for Interactive Extension.
Figure 13. Interactive Extension boilerplate code for MATLAB.
2. Go back to OpticStudio to enable access of Interactive Extension as shown in Figure 13.
Figure 14. Open access for Interactive Extension.
3. Open the attached MATLAB code and run. Note this code is set for the example in this article. For any other systems, users need to specify the detector number which observes the PSF at line 25, semi-diameter of the pupil at line 60, and the focal length of the Paraxial Lens at line 61.
4. The result is shown in Figure 14.
Figure 15. Calculated MTF in MATLAB.
In this article, an exit pupil expander design used for an AR system is demonstrated. Several example files are attached in the article. The important design points in each file are discussed. The 3 gratings used in the system are explained. It is explained how to check the footprint of the beam propagating in the waveguide and how to do an image simulation for such a system. Some possible ways of improving the system are also discussed. Finally, different methods to calculate PSF/MTF are discussed.