Ansys Zemax | 利用 Kogelnik 方法模拟体全息光栅的衍射效率
本文介绍了OpticStudio 21.1中新的原生体全息模拟功能,此功能考虑到全息光栅的物理特性,在序列模式下对其进行全面模拟和分析。同时,也示范使用现有DLL在非序列模式下展示相同的功能。这些分析对于设计虚拟现实(VR)和增强现实(AR)的头戴型显示器(HMD)和抬头显示器(HUD)等系统非常重要。
本文解释了模型中使用的理论和参数,并介绍了5个系统范例。
序列模式的体全息在OpticStudio的所有版本上都可以使用,但是衍射效率分析只有订阅制才能使用。DLL是订阅制旗舰版本的功能。
下载
联系工作人员获取附件。
转发本文至朋友圈并截图可查看如下视频演示。
简介
体全息在许多类型的光学系统中很受欢迎,例如:抬头显示器(HUD)、增强现实(AR)和虚拟现实(VR)的头戴式显示器(HMD)。全息能够将光线衍射到任何所需的角度,其波长和角度的选择性使其能够创造更轻、更紧密的光学系统。
OpticStudio长期以来一直支持理想全息的模拟。然而,为了准确地说明体全息的特性,除了考虑衍射光线的传播方向外,还必须考虑衍射效率、材料收缩或折射率变化等因素。考虑衍射效率使用户能够进行图像模拟和综合优化等高级分析。
表面浮雕光栅与体全息光栅的比较
在介绍这个模型之前,我们先简单解释一下表面浮雕光栅(SRG)和体全息光栅(VHG)的区别。这两种光栅在光学系统中的作用几乎是一样的,但在制造和模拟方面却有很大的不同。
图 1. (a) 表面浮雕光栅 (b) 体全息光栅
图1(b)所示的VHG是通过在感光材料薄膜上曝光两个或多个光束来制造。然后将薄膜进行化学或热显影:这就是光栅。光栅上的表面是光滑的,但光栅内部的折射率是正弦调变的。为了对VHG进行建模,需要使用高效的Kogelnik理论或严格耦合波分析(RCWA)等算法。
图1(a)所示的SRG,可以通过几种方法制造,如电子束写入,光刻,纳米压印,或钻石车削。与VHG不同,SRG没有空间变化的折射率。相反,光栅的表面是由周期性的微结构组成的。为了对SRG进行建模,需要采用类似傅里叶模态法(也叫RCWA)的算法。
本文将介绍VHG的工具。
关于SRG的工具,请参见文章“ZEMAX | 利用RCWA方法模拟表面浮雕光栅的衍射效率”。
耦合波理论
我们来回顾一下耦合波理论,它主要用于体全息光栅模型。
考虑一个简单的情况,即一个法向量的全息平面被两个波长相同的平面波照射,沿波向量nk1和的方向传播。平面波在穿过全息时,首先受到司乃耳定律的折射,在全息内有新的波矢量k2k1'和'(图2(a))。然后,光栅矢量可由下式定义:k2
显影后,当全息被重建平面波照亮时,衍射波,可通过解方程式确定:kpkd
其中和是重建波向量和全息感光材料内部的衍射波前(图2(b))。注意光栅向量可以从两个反向方向选择。方程式(2)的符号约定,假设K的方向选择满足>0。kpkdKK.kp
图 2. (a) 两道建构光束折射到全息材料中 (b) 重建光束折射到体全息中
现在,我们考虑在全息中,由正弦调变来表示折射率n和α,如方程式(3)。
其中为平均折射率,为折射率的振幅调制,为光栅矢量。n0n1K
透射和反射全息的衍射波和穿透波的TE(横向电场)的偏振电场可以用以下4个公式计算。注意,在这个理论中,能量被假设为只在入射波、零阶(直射波)和一阶衍射波之间交换。若要消除这个限制,需要严格耦合波分析理论。
对于TM(横向磁场)极化,我们可以简单地将替换为κκ断续器,如下所示,仍然使用前面的公式。
在锥形衍射的情况下,入射光线不垂直于光栅,偏振特征态定义如下:
图3.全息在Kogelnik的耦合波理论中,全息被认为足够厚,每条入射光线要不是直接以0阶通过,不然就是1阶绕射,对于反射和透射的全息都是如此。
假设和限制
Kogelnik 的耦合波理论与其他理论相比具有优势,可以准确预测体积相位光栅的零阶和一阶效率的响应。然而,当厚度较低或折射率调变(modulation)较大时,这种准确性可能会降低。因此,有必要讨论Kogelnik理论的适用范围,供用户参考。
折射率调变:与平均折射率相比,折射率调变不能太大。换句话说, ,这在大多数实际情况下是正确的。一个参考用的经验法则是,对于反射全息,之比不应大于0.16,对于透射全息,之比不应大于0.06。[2]n1/n<< 1n1/nn1/n
厚度:假设全息是厚的。经验上,我们是确保以下条件来保证耦合波理论仍然适用:
多阶衍射:这与厚度的限制相同。对于厚的全息,输入光线的能量将只转移到直接穿透的0阶波或绕射的+1阶波上。对于薄的全像,其他衍射阶数的效率可能不为零,如-1 -2 +2 -3 +3 ...。这些额外阶数不在耦合波理论的考虑中。
多重光栅 (multiplex):全息中只能同时存在一组光栅。Kogelnik的方法不允许多于一个光栅重叠在一个区域。
双折射材料:全息的材料被认为是均向性的。不允许使用双折射材料。
请注意,这些限制可以通过使用不同的算法来消除。如果您的全息需要破除这些条件,请联系工作人员获得技术支持。
膨胀/ 收缩
在本节中,我们将介绍如何考虑全息的膨胀和收缩。
在加工时,全息材料可能会改变其厚度。为了考虑厚度变化的影响,我们首先将光栅矢量分成两个分量,K∥和K⊥,其中K⊥為垂直表面法線,K∥与表面法线平行。如果厚度从t到t'发生变化,则可以通过修改K∥计算出新的光栅矢量,如方程式(4)。
图 4. 当全像材料收缩时,厚度从t 减少到 t'
如何在序列模式下进行设置
I在本节中,我们将介绍如何在序列模式下设置全息。同时也讨论了需要注意的事项。要在序列模式下添加体全息,我们可以使用4个全息表面中的任何一个。Hologram 1、Hologram 2、环形Toroidal Hologram、Optically Fabricated Hologram。各个曲面的体全息参数的完整细节请参见O pticStudio 帮助手册。在本范例中,我们将使用 Hologram 2 曲面,其参数如下所示。
图 5. 镜头数据编辑器中的Hologram 2 表面参数
在这些参数中,Construct X1、Y1、Z1、X2、Y2、Z2和Construct Wave控制了建构光束的位置和波长。有关这7个参数的更多信息,请查阅文章“ZEMAX | 如何在 OpticStudio 中建模全息图”.
其他参数的含义如下。
Diffract order:这个参数只有当表面是一个透射全息时才有效。当它为0时,我们追迹直接穿透的0阶,当它为1时,我们追迹衍射的1阶。请参阅 “ZEMAX | 如何在 OpticStudio 中建模全息图” 来了解如何区分透射和反射全息。请注意,在非序列模式的衍射DLL中没有这个参数,因为我们同时追迹0阶和1阶 order。
Volume Hologram:定义面型是体积还是薄全息。当等于0时为 False,如果等于任何非零整数则为 True。这里我们将它设为 1,因为我们要模拟的是体积全息。
Hologram Thickness:这是全息材料的厚度。请注意,这个厚度是虚拟的,只用于计算衍射效率。在光线追踪过程中,光线只能看到一个无限薄的表面,就像其他衍射表面一样。
n1 & n2:两个参数是建构光束进入全息之前所处材料的折射率。n1代表建构光束1,n2代表建构光束2。请查看下面的章节以获得更多关于这两个参数的说明。
n:全息材料的平均折射率。这与上面Kogelnik文献中描述的 “n0” 相同。
dn:折射率的调变。这与Kogelnik文献中描述的 “n1” 相同。
Shrinkage:显影后全息的厚度变化。如果它是 0(默认值),则没有收缩。如果不是0,则代表对厚度的缩放值。例如,0.98表示收缩率为2%。
Index Shift:全像的平均折射率在显影后的变化。
Consider Fresnel?:如果设置为1,则考虑菲涅尔损失。将此设置为0则关闭对菲涅尔损失的考虑。如果用户想用自己的代码来验证计算结果,这很有用。
注意当材料是MIRROR时,你应该在体全息表面增加一个镀膜I.0,当材料不是MIRROR时,应该增加一个镀膜I.99999999(八个9)。全息表面假设没有镀膜,模型中内部考虑了菲涅尔损失的影响。
图 6. 镜头数据编辑器中的材料和镀膜参数。
如何在非序列模式下进行设置
在本节中,我们将介绍如何在非序列模式下设置全息。同时也会讨论需要注意的事项。
要在非序列模式中添加一个体全息。我们可以使用衍射光栅(Diffraction Grating)或User Defined Object 并选择DiffractionGrating.dll。目前此DLL不支持其他衍射对象,其假设衍射面在XY平面。
当全息胶片的形状为圆形时使用衍射光栅,当全息胶片的形状为矩形时使用User Defined Object 加上DiffractionGrating.dll。如果全息膜的形状既不是圆形也不是矩形,则可以使用对象Boolean Native或Boolean CAD组合,再加上对象Extruded,就可以构建任意所需的形状。
在Object Properties... Diffraction中,我们添加了DLL hologram_kogelnik.dll。每个参数的含义与序列模式相同。反射部分和穿透部分的参数总是相同的。对于这个DLL,我们必须将 Start Order 设置为 0,Stop Order 设置为 1,理由在前面理论假设部分有说明。
还有一个参数 “Ig. Geo.Err.“,只有在非序列模式下才会显示。如果这个参数被设置为非零,当衍射光束不存在时,DLL将不会返回几何错误。当光线在远离布拉格的条件下击中全息时,可能会发生这种情况。
请注意 “ Ig. Geo.Err." 这个参数是针对非序列DLL的。如果这个参数设置为1,当DLL返回任何几何错误时,DLL将显示更多的信息。这对测试系统很有用,可以知道为什么会发生几何错误。该消息只对DLL检测到的第一个几何错误显示一次。如果要对任何进一步的几何错误显示更多信息,请将此参数设置为0,然后再设置为1。
图 7. 用户自定义对象的衍射设定
当使用这个全息DLL,衍射面(Face 1)上的镀膜应该始终为None。
图 8. 用户自定义对象的镀膜设定。
必须勾选 “Split NSC Rays”,这样衍射DLL才会执行。
图 9. 在光线追迹和NSC3D布局图中勾选“Split NSC Rays”
如前面所述,全像总是被认为是无限薄的。光线和全息之间的所有相互作用只发生在面1,也就是衍射面,并由它来处理。
图 10: 布局中所看到的全像
提示:您可以编写一个ZPL来填充MCE中的所有参数,并在Reflect和Transmit之间取值,附件中提供了ZPL的范例。
图 11:ZPL 提取参数到多重结构编辑器
常见问题
在本节中,我们将讨论一些常见问题。
关于全息两边环境的折射率
当全息外的折射率改变时,全息的行为是不同的。例如,在下图中(图12),我们在左边和右边有完全相同的全息片,但可以看到它们向不同方向衍射光线。左边的全息片是漂浮在空气中的,而右手边的全息片是贴在玻璃上的。可以看到,在两种不同情况下,光线会衍射到不同的角度。因此,检查全息两边的材料是否设置正确是很重要的事。
图 12. 空气和玻璃中的全息片
关于参数n1和n2
参数和代表全息外材料的折射率,是建构光1看到的折射率,是建构光2看到的折射率。如果在建构阶段,两道建构光束来自不同侧,那么和可能会有所不同,如下图所示。n1 n2 n1n2n1 n2
图 13. 两道建构光束来自不同侧
另一方面,在建构阶段,如果两道建构光束来自同一侧,那么将与相同,如下图所示。n1 n2
图 14. 两道建构光束来自同侧
如果您不确定 “建构光束” 的定义,请参见 “如何在OpticStudio中建模全息图” 了解更多信息。
请注意,如果设置不正确,全息的行为将不正确。这跟我们在现实世界中如何建构全息有关。例如,在录制全息的时候,我们可能会在全息的一边放上一个棱镜,然后在回放的时候把棱镜去掉,如下图所示。在这种情况下,和应设置为棱镜和波导的折射率。n1n2n1 n2
图 15. 建构和回放过程
如果全息来自供应商怎么办?
有时候我们并不是真的自己制作全息,而是从供应商那里购买的,所以我们可能并不了解它的所有细节。在这种情况下,我们可以用给定的规格建立一个假的建构系统。请看 “非序列范例3” 的例子。
关于衍射阶数
在这里的范例中,我们总是只有0阶或1阶衍射。
根据Kogelnik的理论,当一个波入射到全息光栅上时,假定只有两个重要的出射光波存在。它们是直接通过的穿透波和衍射波。在OpticStudio的内建全像和实验DLL中,我们总是将直接通过的波视为0阶,而将衍射波视为1阶。
因此,在非序列系统设置中,Start Order和Stop Order应该始终为0和1。不过其实我们也可以可以设置Start Order = Stop Order = 0或Start Order = Stop Order = 1。在这种情况下,意味着我们在模拟中有意忽略1阶或0阶。
串行模式示例 1
在这个范例中,我们演示了如何快速检查全息上不同入射角的衍射效率。首先,我们打开附件中的native_vhg_kog_seq_example1.zar。在这个文件中,设计了一个全息,将45度的入射准直光束衍射和聚焦到远处。
图 16. 布局途中的全像范例
建构系统的参数设置如下
图 17. 镜头数据编辑器中的全息建构参数
这意味着构建系统如下图所示。请注意,我们是如何将光源1设置在非常远的点(实际上是无穷远)来模拟准直光束的。
图 18. 系统的初始设置
Hologram 2面假设一个建构光束收敛到一个建构点(光束2),另一个建构光束从另一个建构点(光束1)发散。然而,由于构建系统的互易性,这与光束1为收敛光源,光束2为发散光源的情况是等效的。在这种情况下,我们可以画成如下图。
图 19. 以相反方向建立的同一系统
如下图所示,STOP设置在全息表面之前,厚度为零。这样一来,我们就可以确保主光线总是击中全息的中心。
图 20. 镜头数据编辑器中的STOP位置
在范例文件中,有一个效率与角度的对比图,我们使用Kogelnik方法计算了与主光线入射角相关的衍射效率。在The Analyze Tab... Polarization and Surface Physics... Diffraction Efficiency... Efficiency vs. Angle 可以找到。设置如下图所示。
图 21. 效率与角度对比图设定
请注意,入射光现的偏振状态是在System Explorer... Polarization中定义的。在这个文件中,我们设置 (Jx, Jy) = (1,0) 为TE偏振。
图 22. 系统资源管理器下的偏振设置
下图显示这一个分析工具的结果:
图 23. 在效率与角度图中,y轴代表绕射效率,x轴代表主光线入射角
串行模式示例 2
我们来看一个更复杂的波导设计。首先,打开附件中的 native_vhg_kog_seq_example2.zar。在“模拟 AR 系统中的全息光波导:第一部分”中介绍了系统的设计方式。在这里,我们主要分析考虑衍射效率与新功能的效果。
在这个文件中,建构光束1设置在一个非常远的点(0,-1E8,-1.35E8)。这意味着它是一个沿向量(0,-0.6,-0.8)方向传播的准直光束。建构光束2设置为(0,18.66,-45.12),这意味着它是一个汇聚光束,汇聚到点(0,18.66,-45.12)。
图 24. 镜头数据编辑器和布局图中的系统初始设置
两个建构光束的波长为0.55 μm。在建构过程中,全息两侧的材料都是亚克力,因此我们将n1 = n2 = 1.493581(压克力在波长0.55 μm时的折射率)。
图 25. 镜头数据编辑器中全息的参数
此文件中有两个图像模拟分析。它们具有相同的设置,但其中一个已勾选“使用偏振 (Use Polarization)”,而另一个未勾选。
图 26. 图像模拟中的设置
为了查看考虑全息衍射效率的效果,必须勾选“使用偏振”。我们可以在以下图像中清楚地看到效果。勾选“使用偏振”时,模拟图像的顶部和底部边缘较暗。
图 27. 图像模拟nalysis
非序列模式范例 1
本范例与序列范例1类似,只是我们在非序列模式下分析。系统保存在附件vhg_kog_nsc_example1.zar中。在这个档案中,全息是由一个User Defined Object 读取DiffractionGrating.DLL设置的。这个用户定义对象DLL允许其面1为衍射面。
设置如下。注意,我们应该将起始阶数设置为0,停止结束设置为1,因为我们使用的理论只考虑两个耦合波。
图 28. 用户定义对象的衍射设置
为了计算衍射效率,添加了一个Detector Polar以接收衍射光线。
图 29. 整个系统的布局图
在优化函数中,计算衍射效率并使用操作数NSDP报告(图30):
图 30. 优化函数编辑器
Universal Plot显示优化函数作为光源入射角的函数
图 31. Universal Plot 设置
Universal Plot 的结果如下图。
图 32. 在Universal Plot中,Y轴代表优化函数数值,X轴代表光线入射角
非序列模式范例 2
本示例与序列范例2中分析的系统类似。不同的是我们在非序列模式下重建系统,进一步优化系统以达到图像照度均匀,并增加两个全息光栅,使其支持彩色结果。系统附件档案为vhg_kog_nsc_example2.zar。
在下图中,可以清楚地看到3个全息对象(对象10、11、12)在波导上的堆叠情况。这些全息除了建构光束的波长(参数Wave)和相应的折射率(n1和n2) )外,其他参数都是一样的。
请注意,我们仔细考虑了嵌套规则( nest rule),因此在两个全息之间或全息和波导之间的每个边界,在两个面重叠的地方,光线都可以正确看到衍射面。在这个档案中,对象10、11、12的衍射面都在靠近波导的一侧。换句话说,在-z侧。
图 33. 系统布局图和三个全息对象的细节
关于嵌套规则的更多讯息,请持续关注公众号即将更新!
1.“提高嵌套和布尔对象的非序列光线追踪速度”
2.OpticStudio 帮助文件 >“设置”选项卡 >编辑器组(“设置”选项卡)>非序列组件编辑器 > 非顺序概述 >“对象放置”>“嵌套曲面”部分
关于这个例子的更多讨论可以在参考文献[3]中找到。模拟图像如下图所示,可以看到折射率偏移或全息收缩对图像的影响。
图 34. 多色设计的图像模拟和系统的三维阴影模型
非序列模式范例 3
在这个例子中,我们假设全息不是我们自己制作的而是买的。假设供应商提供了以下规格。
全息类型:穿透
设计波长:632 nm
输入角度:30 度
出口角度:7 度
厚度: 7 mm
平均折射率: 1.5
调变折射率:0.00005
该器件被设计用于:空气中
由于我们不知道全息的具体制作方法,所以我们需要根据给定的规格,用一个虚拟的建构系统来建构它。
要做到这一点,首先,我们需要将输入和输出角度转换为向量,如下图35所示,这样我们才能正确定义系统。
注意,如果需要的话,y轴可以用x轴代替。这要看系统中全息对象如何放置和旋转会更为方便。但是,z轴不能用其他轴代替,因为DLL模型假设全像表面在XY平面。
图 35 YZ平面上的入射与出射向量
F根据规格和上图,我们可以计算出v在向量為(0,-sin(7deg),-cos(7deg)),v外向量为(0,-sin(30deg),-cos(30deg))。因此,建构光束的参数可以设置如下:
全息型 = 1
X1 = 0
Y1 = 1E9*(-正弦(7 度)) = -0.121869E9
Z1 = 1E9*(-cos(7 度)) = -0.992546E9
X2 = 0
Y2 = 1E9*(-正弦(30 度)) = -0.5E9
Z2 = 1E9*(-cos(30 度)) = -0.866025E9
以上计算中乘上1E9代表无限大,用来设定准直建构光束。
需要注意的是,如果 Holotype 设置为2,则(X1,Y1,Z1)或(X2,Y2,Z2)其中一个需要乘以-1。
对于其余的参数,我们可以直接从数据表中获取。它们如下。
波长 = 0.633 μm
厚度 = 7 mm
调变折射率 = 0.00005
全息折射率 = 1.5
对于最后两个参数,其数值取决于全息的设计使用情况。在这个范例中,从规格书中我们知道全息应该是在空气中使用,而不是附加在任何基板上。因此,我们设置n1 和n2如下:
n1 = 1.0
n2 = 1.0
最后的设置和结果如下图所示,也可以在附件档案vhg_kog_nsc_example2.zar.中查看。
图 36. DLL的参数可以在多重结构编辑器中展开
图 37. 在Universal Plot中,y轴表示优化函数的数值,x轴表示光线入射角
值得提一下的是,在这个文件中,当替换Universal Plot时,我们使用了一个技巧; 开始和停止阶数都被设置为1,所以我们可以强制DLL只考虑1阶衍射光线,而忽略0阶直接穿透的光线。这个技巧有助于在Universal Plot中只看到单阶的衍射效率。
图 38.如果我们将起始阶数设置为0,停止阶数设置为1,那么0阶和1阶光线都会被追迹,如图所示
参考资料
科格尔尼克,H.,“厚全息光栅的耦合波理论”,贝尔系统技术公司J.48,2909-2947(1969)。
Bjelkhagen,H.和兄弟顿 - 拉特克利夫,D.,超现实成像:模拟和数字彩色全息术的先进技术。CRC出版社, 2016.
程汉祥,田晓超然,“一种先进的多色全息光学元件光线追踪模型”,SPIE 11188,全息、衍射光学及应用IX,1118817(2019年11月18日);https://doi.org/10.1117/12.2537762