光学软件在进行光学系统仿真时,除了需要关键算法原型作为必要的功能保证,还需要考虑很多其他关于还原现实场景的软件工程实现问题。在非序列光线追迹中,如何正确设置几何间的胶合浸没关系是一个需要谨慎考虑的问题。
序列光线追迹主要专注于透镜系统设计,元件的主要光学效应(折射和反射)可以通过折射率和曲率来充分描述,通过透镜数据编辑表提供的结构化且详细的方式来输入和修改光学系统中各个元件的参数,例如曲率、厚度、材料、半径、位置等,易于跟踪和更新大量的参数。这种方式通过在特定的面处定义材料即可自然而然地定义透镜的胶合与追迹过程中材料的变换。而非序列光线追迹则需要处理更广泛的光学现象,如复杂的散射和光学表面的粗糙度,因此需要更详细的界面属性设置,对于环境材料与边界属性的考虑与处理相应地也会更加复杂。高效、准确地对材料和边界进行识别,并在正确的材料和边界处进行数值上的计算和处理是非序列光线追迹过程从始至终需要处理的核心问题。
光线追迹中光线的方向会由于两个因素发生改变,一是在材料介质边界处发生反射、折射或散射,二是击中了材料内部分散的体散射粒子,无论是哪种因素,对于光线来说,最重要的是在任何时刻都清楚自己所处的环境材料是什么,以及在任何边界处都清楚当前面的光学属性是什么。
应用人员可能不理解为什么这种答案显而易见的问题会是软件工程上的难点,我们用以下例子对如何考量逻辑设计过程进行简单说明:
如图[1](a)所示,场景中小几何体 B 完全浸没于大几何体 A,对于这种情况,可以设计以下算法逻辑:当光线与表面相交,识别表面两侧的材料并根据斯涅尔公式进行计算即可。现对场景进行推演,如图[1](b)所示,当 小几何体 B 部分浸没于大几何体 A,光线行为与上述逻辑一致,但若希望 AB 的重叠部分被识别为 A 时,光线应忽略掉 B,如图[1](c),算法应进行额外的设计对这种情况来提供支持。再进一步地,如图[1](d),当光线从上到下穿过场景,光线在 B 的下表面和 A 的上表面均产生折射,物理现实下这种逻辑是错误的。
以上只是验证方案中简单的一组推演,事实上,由于非序列场景下场景设置的自由性,我们还需要考虑包括很多更复杂的情况,如图[2]:
图[2]中列举了部分存在多重浸没或/与多个面重叠的情况,针对各种不同的情况,需要有完备的设置方法与错误检查保证场景的合理性,例如,相同两个几何不可能同时存在胶合与相互浸没的关系,不可能存在相互矛盾的浸没关系等等。我们将最后两张图视为同一场景,介绍 Rayzen 软件提供的解决方案:胶合浸没管理器的使用方法。
浸没管理器对场景中几何进行分组的准则只有一个:相互“连通”的几何应处于同一浸没组中。这里“连通”的定义对应于拓扑学中的“有界开区间的连通性”,在几何上体现为求交之后体积不为 0. 如图[3]场景包含两组元件,一组包含 Si,SiO2 和 Sapphire1,另一组包含 Sapphire2,GaN,NGaN,PGaN,和 ITO. 其中,由于 (Sapphire2 GaN NGaN) (PGaN ITO)=0,所以其实分为 3 组也是可行的。分组的依据在于两组几何组间相互独立,组内相互“连通”。根据这一准则,我们可以快速地将浸没关系确定下来。如图[4],优先级数字最低为 1,最高不设限制,若几何间没有实际的浸没关系,设置为同一数字或不同数字均可。
Rayzen 软件的设计准则之一是:希望用户时刻清楚自己的设置的意义,出现预期之外的结果时,明白自己的操作不当或错误之处在哪里。因此 Rayzen 软件中如果出现了浸没设置不完备的情况,软件将在无法识别浸没的面处停止追迹并输出错误光线,提醒用户进行修改。如图[5]所示。光线追迹到设置不完整的位置将发生错误停止追迹,软件识别到的追迹错误将出现在光线报告中。
胶合管理器负责识别与正确处理面与面重叠时,光线行为应遵循的光学属性和材料。Rayzen 软件中“胶合”被定义为:两个面在空间中相互重叠,并且在重叠区域的任意点上,这两个面的法线方向完全相反(规定封闭实体面上任意一点法线朝外)(面相互重叠但法线相同的情况由浸没管理器进行处理)。在如图[6],场景中,交界面左侧 (Sapphire2, GaN, NGaN) 的三个面和右侧 (PGaN, ITO) 的两个面共应定义 6 组胶合关系。
我们用 Rayzen 软件中的 Probe Ray 来验证复杂场景下胶合设置的正确性:
如图[7]所示,射线 R1 穿过的交界面处共有三个面重叠,由于 GaN 浸没优先级高于 Sapphire2,Sapphire2 的面被筛掉,只需判断 GaN 和 ITO 表面光学属性的优先级即可,管理器中设置 ITO 表面的优先级更高,为 60% 的透射,对应 R1 的最后一段光线先后两次经过 60% 的透射。
如图[8]所示,射线 R2 穿过的交界面处共有四个面重叠,由于 NGaN 浸没优先级高于 Sapphire2 和 GaN,Sapphire2 和 GaN 的面被筛掉,只需判断 NGaN 和 ITO 表面光学属性的优先级即可,管理器中设置 NGaN 表面的优先级更高,为 100% 的透射,对应 R1 的最后一段光线先经过一次 100% 的透射,再经过一次 60% 的透射。
如图[9]所示,射线 R3 穿过的交界面处共有六个面重叠,由于 NGaN 浸没优先级高于 Sapphire2 和 GaN,Sapphire2 和 GaN 的面被筛掉;由于 PGaN 浸没优先级高于 ITO,ITO 的面被筛掉,只需判断 NGaN 和 PGaN 表面光学属性的优先级即可,管理器中设置 NGaN 表面的优先级更高,为 100% 的透射,对应 R1 的最后一段光线先经过一次 100%的透射,再经过一次 80% 的透射,最后经过一次 60% 的透射。
Rayzen 软件考虑了胶合浸没关系相互之间以及与其他模块之间的关联,能够有效地进行检查并提醒用户,避免违背物理现实的设计,增强软件的稳定性,例如:
光学设计软件通常会绕过胶合浸没关系的几何处理问题,将这部分复杂的逻辑转移到依赖于 CAD 建模的正确性上。这样做可以有效地将复杂问题模块化,有利于软件工程的实现,然而也会面临一些应用上需要考虑的问题:
Lighttools 软件作为历史悠久的照明设计类软件,对于胶合浸没关系有比较完备的处理方式,通过明确的定义与配置,可以很好地解决上述的问题。相比之下 Rayzen 额外添加了以下支持:
除了几何间胶合浸没关系的相互制约,还有很多额外的功能联动同样需要考虑,如几何体的布尔运算,表面 3D 纹理的建立,光源起点位置与面重合等。所幸,我们现在已经将这部分逻辑处理得比较完善了,并在最近的版本中优化了对复杂场景需要大量设置的操作,下面我们用两个案例来进一步说明 Rayzen 中胶合浸没功能的使用方法。
如图[10]所示为一个典型的 LED 模型,其中阳极导线穿过底座连接到引脚,可以认为该导线与底座及引脚是一体的,底板中的电路部分在光学仿真中被简化(软件中将导线、底板与阳极阴极进行布尔运算视为整体)。反射碗与底座间有绝缘的缝隙,反射碗中盛有封装了荧光粉的 LED 芯片。最外围为封装的环氧树脂透镜。
Rayzen 中的光源可以自动识别环境材料,无需用户进行额外的设置,但我们不建议将光源所在面与其他的几何实体完全重叠,如果确实有这样设置的必要性,建议使用表面光源的 On Object 选项。
光从光源出发,穿过荧光粉材料被吸收转换激发后,发射到环氧树脂内部,这中间可能会击中灯丝被再次反射,再透过封装传播到外界环境,不难看出,灯丝、反射碗及底座的材料优先级是最高的,荧光粉的优先级次一级,最后是环氧树脂,一共有三层材料的优先级。在 Rayzen 软件中,我们有两种方式对该 LED 模型进行建模:
1.我们设置荧光粉材料的几何边界略大于反射碗,此时只需将灯丝及底座,反射碗,荧光粉与环氧树脂四个几何实体添加到浸没关系管理器中,并指定优先级:
由于灯丝和反射碗没有实际的重叠关系,设置为同一数字或不同数字均可,优先级数字最低为 1,最高不设限制,本案例中,最少需要设置三层优先级,只需保证 [灯丝及底座,反射碗] > 荧光粉 > 环氧树脂即可完成正确设置。
2.我们设置荧光粉材料的几何尺寸与反射碗内表面完全重叠,此时需要注意胶合与浸没设置联动的合理性:由于荧光粉与反射碗间存在表面的胶合关系,在胶合关系管理器中,需要分别定义荧光粉几何体的侧面与反射碗的侧内壁,和荧光粉几何体的底面与反射碗的下内壁为胶合关系,由于在该表面处期望的光线行为为反射,选择反射碗的侧内壁为 Major Surface. 但出现了意料之外的情况(图[12]):
这是由于如果几何实体间存在浸没关系,物理现实下,胶合关系不应同时存在。软件内部针对这种逻辑对几何关系进行了强绑定,以协助用户在设计初期即可发现不合理或错误的设置。应先将荧光粉与反射碗设为相同的浸没级后,才能成功设置其胶合关系(图[13])。
如图[14]所示,正确设置胶合浸没关系后,Rayzen 软件完成了 LED 封装结构的出光仿真。光线追迹识别到灯丝对光线的遮挡和散射影响,在接收器的照度结果上形成暗斑。
如图[15]所示为一个 Micro-LED 芯片的封装阵列,其中一个阵列单元由 LED 芯片的量子阱,基底,电极,及上方透镜构成,并封装在基板中。MQW 简化为一个发光层,通过对 MQW 进行光度测量,拟合成膜层数据对发光分布进行近似表征。相关结构由专业的 CAD 软件完成建模后导入到 Rayzen 软件进行仿真,因此本案例不适用浸没来定义元件间的重叠关系,需要检查并对所有的重叠面设置胶合并确定交界面处的光学膜层属性。对于一个单元,可查得共有 23 对胶合关系需要设置,场景中有 169 个单元,共需设置 3887 组胶合关系。
复杂光学系统中可能有上万个面,但光学属性通常最多只需定义十个左右,Rayzen 软件支持自动查找所有符合胶合定义的连接面,并通过提前指定光学属性的优先级,一键完成复杂场景的胶合关系定义(图[15])。
本文对 Rayzen 软件中胶合浸没的完备性设计介绍和相关的应用案例展示,介绍了为什么要做胶合浸没的完备性设计,从简单场景出发进行推演,展现了胶合浸没场景的多样性以及相应处理逻辑的复杂性,并介绍了 Rayzen 中的解决方案:胶合浸没管理器的使用方法。通过实例演示,展示了该解决方案对复杂场景的适配与错误设置的检查和提示。进一步与同类软件对比,展现 Rayzen 面对复杂场景从物理理解到交互体验的改进与优势。最后通过具体的应用案例,展现了软件中胶合浸没的完备性设计和应用方向。光学仿真与设计面向的应用方向与场景日愈复杂,我们将持续关注行业发展,为各种新型应用提供仿真支持并提升软件使用体验。