ONE-ON-ONE LECTURE NOTES · W100

AR SRG 波导:设计 · 仿真 · 评估

从原理讲到本仓库实现。单绿 526 nm,基板 n = 1.8,厚 0.4 mm。

一对一讲义。对象是要把一块 表面浮雕光栅(SRG)衍射波导 从规格推到可仿真、可评估的人。所有数值默认用本仓库的 W100(单绿 526 nm,基板 n=1.8,厚 0.4 mm)。公式先写物理,再写本仓库里它落在哪一行。

这不是规格摘录,也不是 docs/v2/W100_v2_design_report.md 那种交付报告。报告告诉你「这次算了什么」;本书告诉你「为什么必须那样算」。阅读版:同目录 AR_SRG_waveguide.html。


怎么读

按顺序读。每一章末尾有「停下来算一遍」和「本仓库对照」。不要跳过第 1–2 章直接改周期:AR 波导几乎所有坑都是 k 空间没闭合 或 TIR 条件没守住。

章文件你读完应能做什么
101_foundations.md用平面波和全反射解释光为什么能在 0.4 mm 玻璃里横走几十毫米
202_kspace_and_grating.md在 k 图上画空气光锥、玻璃盘、光栅矢量,判断某级次是导波还是漏光
303_architecture.md说清 SRG 相对几何波导 / 体全息的差别,以及 1D 瞳扩 vs 2D 瞳扩
404_design.md从规格走到 k-layout、微纳槽型、耦出区形貌
505_simulate.md分清 RCWA(电磁效率)和 TIR hop / 光追(系统能量)各管什么
606_evaluate.md从定义写出 η、均匀性、MTF、彩虹纹、鬼影该怎么评,以及本程序评不了什么
707_w100_studio.md对着本仓库把一条完整链路跑通,并读懂图和已知缺口

配套工程文档(查数用,不讲原理):


全书一条因果链

规格 (λ, FoV, Eyebox, ER, n, t)
        │
        ▼
k-layout:Kin, K1, K2 使「进 TIR → 折向眼球 → 回到空气光锥」
        │
        ▼
微纳:周期/方位已由 k 锁定;槽型/齿深/金属只分配效率
        │
        ▼
布局:光栅只铺在光子真正会走到的地方(覆盖约束 + 最小面积)
        │
        ▼
仿真:RCWA → 效率 LUT;TIR hop / 光追 → 系统通量图
        │
        ▼
评估:几何有效性、相对均匀性、光度学、像质 —— 分层,不要混单位

W100 的闭合残差在中心视场大约是 \(|k_{\text{out}}-k_{\text{air}}|/k_0 \sim 10^{-6}\)。这不是运气,是第 4 章那组矢量加法的结果。


符号约定(全书统一)

真空波长 \(\lambda\)(W100:526 nm)。波数 \(k_0=2\pi/\lambda\)。介质折射率 \(n\),介质中波矢模长 \(nk_0\)。

光栅矢量 \(\mathbf{K}\),\(|\mathbf{K}|=2\pi/\Lambda\),方位角相对 \(+x\)。衍射:

\[ \mathbf{k}_\parallel' = \mathbf{k}_\parallel + m\mathbf{K} \qquad\text{(1D)} \]
\[ \mathbf{k}_\parallel' = \mathbf{k}_\parallel + m_1\mathbf{K}_1 + m_2\mathbf{K}_2 \qquad\text{(2D)} \]

\(z\) 沿基板法向。TIR 看的是面内分量 \(k_\rho=\sqrt{k_x^2+k_y^2}\):空气可传播要求 \(k_\rho < k_0\);玻璃内可传播要求 \(k_\rho < n k_0\);要锁在玻璃里对外不漏,还要 \(k_\rho > k_0\)。

第 1 章 光在 0.4 mm 玻璃里怎么走

先把 Maxwell 收到你真正会用的三条:平面波、界面上的切向 \(k\) 守恒、全反射。SRG 波导的全部几何,都是这三条在「薄平板 + 周期扰动」上的推论。


1.1 平面波就是一根 k 矢

单色平面波可以写成

\[ \mathbf{E}(\mathbf{r},t)=\mathrm{Re}\Big\{\mathbf{E}_0\exp\big[i(\mathbf{k}\cdot\mathbf{r}-\omega t)\big]\Big\}. \]

在均匀、无吸收介质里,色散关系是

\[ |\mathbf{k}|=n\frac{\omega}{c}=n k_0=\frac{2\pi n}{\lambda}. \]

\(\lambda\) 永远指 真空波长。W100 绿光 \(\lambda=526\,\mathrm{nm}\),\(n=1.8\)(Hoya FD60-w 钢化后),所以:

量数值
\(k_0=2\pi/\lambda\)\(0.011945\,\mathrm{nm}^{-1}\)
玻璃内 \(nk_0\)\(0.021501\,\mathrm{nm}^{-1}\)
玻璃内波长 \(\lambda/n\)\(292.2\,\mathrm{nm}\)

方向余弦把 \(\mathbf{k}\) 拆开:

\[ k_x = n k_0\sin\theta\cos\phi,\quad k_y = n k_0\sin\theta\sin\phi,\quad k_z = n k_0\cos\theta. \]

\(\theta\) 是与 面法向 的夹角。以后凡是说「TIR 角 42°」,都是这个 \(\theta\),不是与表面的擦地角。

偏振:\(\mathbf{E}_0\perp\mathbf{k}\)。对平板问题,习惯用相对入射面的 s(TE)和 p(TM)。耦入闪耀光栅对两种偏振效率差可以很大;第 5 章 RCWA 会对 s/p 各算一次再平均。几何追迹若只用标量效率,等于假装偏振已经混匀。


1.2 界面只守切向 k,不守角度本身

光线从空气打到玻璃,频率不变,沿界面的相位必须连续,因此 切向波矢守恒:

\[ k_{x1}=k_{x2},\qquad k_{y1}=k_{y2}. \]

这就是斯涅尔定律的 k 语言:

\[ n_1\sin\theta_1=n_2\sin\theta_2. \]

W100 光机中心并不沿法向。规格:相对耦入偏航 \(-3.23^\circ\)、俯仰 \(+14^\circ\)。把两个正切合成极角:

\[ \tan\theta=\sqrt{\tan^2\psi+\tan^2\alpha},\quad \phi=\mathrm{atan2}(\tan\alpha,\tan\psi). \]

得到中心视场 \(\theta\approx 14.34^\circ\),\(\phi\approx 102.8^\circ\)(几乎朝 \(+y\))。空气里面内分量

\[ \frac{k_\rho}{k_0}=\sin\theta\approx 0.248. \]

进入玻璃后,同一 \(k_\rho\) 对应的折射角

\[ \theta_g=\arcsin(\sin\theta/n)\approx 7.9^\circ. \]

这一步 还没有光栅。没有光栅,这束光会穿过 0.4 mm 基板,再从另一面几乎沿原方向出去——眼镜片对世界应当尽量这样(见透过率规格)。要把图像「锁」进玻璃横着走,必须用光栅把 \(k_\rho\) 加到大于 \(k_0\)。

代码里入射角就是这样叠的:w100/couplers_coor_w100.py 里 tanx = tan(fvx+yaw0),tany = tan(fvy+pitch0)。


1.3 全反射:把光关在玻璃里

玻璃–空气界面的临界角

\[ \theta_c=\arcsin\frac{1}{n}=\arcsin\frac{1}{1.8}=33.749^\circ. \]

当玻璃内侧 \(\theta>\theta_c\),即

\[ k_\rho = n k_0\sin\theta > k_0, \]

空气侧的 \(k_z\) 变成虚数,场沿法向指数衰减(倏逝波),时间平均能流不穿过界面。这就是导波。

把 \(k_\rho\) 画在一张图上更清楚:

        |k_xy|
    0 -------- k0 -------------- n k0
      空气可传     玻璃可传且对空气 TIR     玻璃也截止(倏逝)

TIR 不是 100% 「相位无事」。s/p 反射系数是复数,相位差

\[ \delta_s-\delta_p = 2\arctan\frac{\sqrt{n^2\sin^2\theta-1}}{n\cos\theta} - 2\arctan\frac{n\sqrt{n^2\sin^2\theta-1}}{\cos\theta} \]

会随弹跳累积,改变偏振椭圆。本仓库把它记在 lut_TIR 里(couplers_coor_w100.py 的 _tir_phase)。v2 评估核目前 不用 这个相位做相干叠加,只用几何 hop;偏振/相干是后续像质的事。


1.4 一次弹跳在平面上走多远

基板厚度 \(t=0.4\,\mathrm{mm}\)。光线以 \(\theta\) 在上下表面之间折返,一次往返(两次反射,或一次「hop」)在波导平面上的位移是

\[ \Delta = 2\,t\,\tan\theta. \]
导波角 \(\theta\)hop \(\Delta\)
刚过临界 \(34^\circ\)0.54 mm
典型工作点 \(42^\circ\)0.72 mm
更陡 \(50^\circ\)0.95 mm
W100 中心视场耦入后 \(\approx 50.3^\circ\)\(\approx 0.96\,\mathrm{mm}\)

从耦入中心到 Eyebox 中心水平 32.75 mm。若 hop 约 0.9 mm,大约要 三十多次 弹跳才走到眼球附近。这就是为什么:

  1. 基板不能太厚:hop 太大,瞳扩采样变稀,Eyebox 出现条纹。
  2. 基板不能太薄:同样路程弹跳次数上升,每次光栅/吸收的损耗相乘,光效崩。
  3. 光栅效率必须 弱(百分之几量级耦出),才能在多次经过时把能量摊到整个 Eyebox——这是第 4 章齿深渐变的理由。

lut_gap 的分量就是这个 \(\Delta\) 在 \(x,y\) 上的投影:

\[ \Delta_x=2t\tan\theta\cos\phi,\qquad \Delta_y=2t\tan\theta\sin\phi. \]

见 couplers_coor_w100.py:耦入后填 lut_gap[...,0:2],折转后填 [...,2:4]。


1.5 出瞳距离把「看哪里」变成「光栅铺哪里」

眼睛在波导近眼侧之外 \(ER=14\,\mathrm{mm}\) 处。规格书把 \(ER\) 写成出瞳距离。某一视场方向 \((\theta,\phi)\) 要进入瞳孔,耦出点相对 Eyebox 投影有几何偏移。论文工具包用(注意本仓库 er 取负号,表示近眼侧)

\[ \delta x = ER\cdot\tan\theta\cos\phi,\qquad \delta y = ER\cdot\tan\theta\sin\phi, \]

再把 Eyebox 四个角搬到波导面上,得到该视场的 有效耦出四边形。v2 的覆盖优化会把这些四边形的角点收进约束集(w100_v2/coverage.py)。

直观图像:你不是在波导上印一张和 Eyebox 一样大的光栅就完事。边缘视场的光线在到达眼球前,会在波导面上「斜着」多走一段;光栅必须覆盖这段斜投影,否则边缘视场缺角。


1.6 吸收、散射、镀膜:几何光学还没死,但已经不够

理想 TIR 能量反射率为 1。真实波导还有:

菲涅尔系数在 lut_Fresnel 里按 s/p 振幅反射写了;那是 无光栅区 的界面,不能代替光栅 RCWA。


停下来算一遍

  1. 证明:\(n=1.8\) 时,要进入 TIR,正入射耦入至少需要光栅把 \(k_\rho\) 加到 \(k_0\) 以上,即周期 \(\Lambda < \lambda = 526\,\mathrm{nm}\)。同时还要玻璃内能传,\(\Lambda > \lambda/n = 292\,\mathrm{nm}\)。W100 的 \(P_\mathrm{in}=378\,\mathrm{nm}\) 落在这个窗口正中偏大。
  2. 用 \(\Delta=2t\tan\theta\) 估计:\(\theta=42^\circ\) 时,走完 32 mm 大约多少 hop?(\(32/0.72\approx 44\)。)
  3. 临界角再加 1° 和加 15°,hop 差多少?体会「刚过 TIR 的视场」空间采样有多密。

本仓库对照

概念代码
\(n,t,\lambda,ER\)w100/w100_params.py
入射角叠加光机姿态couplers_coor_w100.py 中 th_inc
hop 矢量同文件 lut_gap
TIR 相位同文件 lut_TIR / _tir_phase
评估时用 hop 往前走w100_v2/evaluate.py 的 x += gx

下一章把光栅矢量画进同一张 k 图。没有那张图,周期只是纳米数;有了那张图,周期是「把 \(\mathbf{k}\) 从空气盘踢进 TIR 环、再踢回空气盘」的尺子。

第 2 章 k 空间与光栅:衍射波导的第一语言

几何光学管「 bounce 走多远」。光栅管「这一 bounce 之后 \(\mathbf{k}\) 指向哪」。设计 AR 衍射波导,必须同时说这两种语言;只调齿深不改 k-layout,改的是效率,不是视场能不能出来。


2.1 周期结构只做一件事:给 k 加整数个栅矢

无限周期、周期 \(\Lambda\)、栅线法向单位矢 \(\hat{g}\) 的表面,本征解是 Floquet 模。面内波矢只能相差栅格的倒格矢:

\[ \mathbf{K}=\frac{2\pi}{\Lambda}\hat{g}, \qquad \mathbf{k}_\parallel^{(m)}=\mathbf{k}_\parallel^{(0)}+m\mathbf{K},\quad m\in\mathbb{Z}. \]

二维矩形点阵有两个周期 \(\Lambda_x,\Lambda_y\):

\[ \mathbf{k}_\parallel^{(m,n)}=\mathbf{k}_\parallel^{(0)}+m\mathbf{G}_x+n\mathbf{G}_y, \quad |\mathbf{G}_x|=\frac{2\pi}{\Lambda_x},\; |\mathbf{G}_y|=\frac{2\pi}{\Lambda_y}. \]

W100 耦出柱阵 \(\Lambda_x=758\,\mathrm{nm}\)、\(\Lambda_y=353\,\mathrm{nm}\),两个倒格矢不正交于「等效 319.5 nm 单矢量」——后者是 k-layout 图上为了画 转折/耦出闭合 而引入的合成描述。数值核对:

\[ \Lambda_\mathrm{eq}=\Big(\Lambda_x^{-2}+\Lambda_y^{-2}\Big)^{-1/2}\approx 320.00\,\mathrm{nm}, \]

与报告写的 319.5 nm 差 0.5 nm,工程上视为同一套 k。

光栅方程是 Floquet 条件在「入射面内」的投影。一维、空气入射、级次 \(m\):

\[ n\sin\theta_m=n_i\sin\theta_i+m\frac{\lambda}{\Lambda}. \]

波导问题里介质在光栅两侧不同(玻璃 / 空气 / 金属),方程两边的 \(n\) 要写成 该侧 的折射率;守恒的是 \(k_x\),不是角度。


2.2 一张图读懂「能不能导、能不能出」

把面内 \(\mathbf{k}=(k_x,k_y)\) 画在平面上。以原点为心:

衍射是在这张图上 平移 \(\mathbf{k}\):每次经过光栅,加上 \(m\mathbf{K}\)。

                 ky
                  ^
           n k0  / \
              /       \      玻璃光锥
            |    k0     |    空气光锥
            |   (.)     |
              \       /
                 \ /
                  +----> kx

  耦入:把空气盘里的点 +Kin 平移进圆环
  转折:在圆环里用 −K1 把方向折向 eyebox
  耦出:再 −K2,落回空气盘,且落点应等于原来的入射点(闭合)

「彩虹纹」是环境光(空气盘里另一根矢)被同一套 \(\mathbf{K}\) 踢进眼睛。「鬼影」是错误级次 \(m\neq\) 设计值落到了空气盘里。第 6 章会回到这两件事;它们的判据已经在这张图上。


2.3 级次符号:+1 还是 −1

\(\mathbf{K}\) 的方向是人为规定的。你把栅矢画成 \(\hat{g}\) 或 \(-\hat{g}\),\(m=+1\) 与 \(m=-1\) 对调。物理上要锁定的是 实际被闪耀/槽型增强的那个倒格点。

W100 同时出现两套习惯,读代码时必须分开:

位置习惯含义
couplers_coor_w100.py 几何耦入用 \(\mathbf{k}\leftarrow\mathbf{k}+\mathbf{K}_\mathrm{in}\)把空气态送进 TIR
同文件 2D 区\(\mathbf{k}\leftarrow\mathbf{k}-\mathbf{K}_1\),再 \(-\mathbf{K}_2\)折向眼球并闭合
w100_v2/rcwa_lut.py查反射 −1 阶效率截断闪耀把能量放在 −1

几何闭合要的是矢量三角形,效率 LUT 要的是「哪一个 Floquet 通道功率大」。两边符号不一致时,不要改周期去凑符号,要对齐「RCWA 的 \(m=-1\) 是否就是几何里的 \(+\mathbf{K}_\mathrm{in}\)」。闪耀斜面朝向决定能量在 \(+1\) 还是 \(-1\)。本仓库闪耀分层是 z = H - x/tan α,注释写明能量在 −1。

闭合条件写成与路径无关的矢量式更干净。W100 设计报告的几何是

\[ \mathbf{K}_1+\mathbf{K}_2 \approx \mathbf{K}_\mathrm{in} \quad\text{(同向,模长差 }<10^{-7}\,\mathrm{nm}^{-1}\text{)}, \]

于是

\[ (\mathbf{k}_\mathrm{air}+\mathbf{K}_\mathrm{in})-\mathbf{K}_1-\mathbf{K}_2 \approx \mathbf{k}_\mathrm{air}. \]

中心视场用本仓库角度算下来,闭合残差 \(|\mathbf{k}_\mathrm{out}-\mathbf{k}_\mathrm{air}|/k_0 \approx 2.6\times 10^{-6}\)。若三矢全部取「+1 相加」,残差会到 \(|k|/k_0\sim 2.8\),光出不去。docs/W100_design_notes.md 写过这件事。


2.4 用 W100 数字走一遍平移

常数:\(\Lambda_\mathrm{in}=378\,\mathrm{nm}\),\(\phi_\mathrm{in}=6^\circ\);\(\Lambda_\mathrm{eq}=319.5\,\mathrm{nm}\),\(\phi_1=71^\circ\),\(\phi_2=-59^\circ\)。

\[ |\mathbf{K}_\mathrm{in}|=\frac{2\pi}{378}=0.016622\,\mathrm{nm}^{-1},\quad |\mathbf{K}_{1,2}|=\frac{2\pi}{319.5}=0.019666\,\mathrm{nm}^{-1}. \]

\(\mathbf{K}_1+\mathbf{K}_2\) 的方位角是 \(6.000^\circ\),模长与 \(|\mathbf{K}_\mathrm{in}|\) 相差 \(3\times 10^{-8}\,\mathrm{nm}^{-1}\)。这就是规格书 k-layout 图上「两个 65° 夹角、夹角和 130°」的算术内容:

\[ 71^\circ-6^\circ=65^\circ,\qquad 6^\circ-(-59^\circ)=65^\circ. \]

正入射(\(k_\rho=0\))只加 \(\mathbf{K}_\mathrm{in}\):

\[ \frac{k_\rho}{k_0}=\frac{|\mathbf{K}_\mathrm{in}|}{k_0}=1.392 > 1 \quad\Rightarrow\quad \text{已在 TIR 环内}. \]

对应玻璃角 \(\theta=\arcsin(k_\rho/(n k_0))=\arcsin(1.392/1.8)=50.7^\circ\)。叠上光机中心后,耦入 +Kin 的 \(\theta_g\approx 50.28^\circ\),仍然深在 TIR 区。

再减 \(\mathbf{K}_1\):仍在环内(\(k_\rho/k_0\approx 1.41\))。再减 \(\mathbf{K}_2\):回到 \(k_\rho/k_0\approx 0.248\),与入射空气态相同。

视场边缘 的 \(\mathbf{k}_\mathrm{air}\) 会在空气盘里挪一截。闭合平移是刚性的,所以边缘点只要入射在盘内、中间两态在环内、出射仍落回盘内,这一视场就「几何上活着」。本仓库用

n * sin(θ_out) > 1   →  该态对外 TIR(valid)
k_z^2 = (n k0)^2 - kx^2 - ky^2 > 0  →  玻璃内是传播波

扫 FoV 网格,得到 tir_valid_frac。W100 当前采样下这项是 100%(60/60)。那只说明 k-layout 对这个 FoV 几何可行,不说明光效或均匀性合格。


2.5 什么决定效率:槽型,不是周期

周期和方位锁定 \(\mathbf{k}\) 的落点。功率在各 \(m\) 之间怎么分,由 一个周期内的介电分布 \(\varepsilon(x,y,z)\) 决定:槽深、占空比、闪耀角、金属、圆角。

三个层次不要混:

  1. 能否存在这个级次(截止):只看 \(k_\rho\) 与 \(k_0,nk_0\)。标量光栅方程就够。
  2. 该级次功率多少:必须解麦克斯韦边值问题。RCWA / FDTD / FEM。薄光栅的 \(\mathrm{sinc}\) 只是数量级估计。
  3. 系统里经过多少次:几何 + 每次的分支概率(LUT)。第 5 章。

v1 用闪耀包络当 LUT,所以明确写「不是 RCWA,不能报 nit/lm」。v2 用 meent 对 W100 槽型算了若干角度/齿深,仍然只是 抽样后的标量 LUT,不是全锥面、全偏振、全波长的系统光度学。


2.6 二维光栅的「假 1D」描述

W100 没有独立的 1D folding 条带。同一块 2D 柱阵同时提供 \(\mathbf{G}_x\) 和 \(\mathbf{G}_y\)。报告把它们合成两根等效矢 \(\mathbf{K}_1,\mathbf{K}_2\),是为了:

电磁上,一次经过 2D 区,所有 \((m,n)\) 同时存在。几何 hop 模型却写成「先 −K1 再 −K2」的 顺序分支。这是近似:当两个方向的衍射都弱(浅齿 25–100 nm),一次经过以 0 阶反射为主,偶尔分出一丁点到 \((\pm 1,0)\) 或 \((0,\pm 1)\) 或 \((-1,-1)\),顺序模型才合理。齿深到 100 nm、占空比 0.5 时,这个近似开始脏,全波 + 多次散射才是真的。

rcwa_lut.py 用透射 \((-1,-1)\) 代表耦出、反射 \((-1,0)/(0,-1)\) 代表转折,并且 只算了 \(\theta=42^\circ,\phi=0\)。注释写了:工程对应,不是完整锥面扫描。读 LUT 曲线时把它当成「槽深趋势」,不要当成每个视场的真效率。


停下来算一遍

  1. 若有人把 \(P_\mathrm{in}\) 改成 250 nm,正入射 +Kin 后 \(k_\rho/k_0= \lambda/250=2.104 > n=1.8\)。这意味着什么?(玻璃内截止,耦不进。)
  2. 若改成 500 nm,\(k_\rho/k_0=1.052\),刚过 TIR。把 FoV 边缘的 \(\sin\theta_\mathrm{air}\approx 0.25\) 按同向/反向加上去,有一侧会掉出 TIR。这就是「周期太大,边缘视场漏光」。
  3. 验证 \(\mathbf{K}_1+\mathbf{K}_2\) 与 \(\mathbf{K}_\mathrm{in}\):只用方位 71°、−59°、6° 和模长比 \(378/319.5\),不必上仿真器。
  4. 环境光正入射到耦出区,\(m=-1\) 的空气出射角满足 \(\sin\theta=\lambda/\Lambda_\mathrm{eq}-0\)。\(\lambda=526\),\(\Lambda=319.5\),\(\sin\theta=1.65>1\)。该级次在空气中截止——这是彩虹纹设计常要的「大角度才出得来」。规格写成临界入射角 \(>80^\circ\),第 6 章用 \(\sin i+\sin\theta=\lambda/d\) 接到几何上。

本仓库对照

概念代码
\(\mathbf{K}\) 的模与方位w100_params.k_vector,以及 K1_DEG / K2_DEG / PHI_IC_DEG
逐视场平移 \(\mathbf{k}\)couplers_coor_w100.py 中 kx + kgx_ic 等
k 闭合图w100_v2/plot_v2.py 的 plot_k → output/W100_v2/03_k_layout.svg
RCWA 抽哪一个 \(m\)w100_v2/rcwa_lut.py 的 _order_1d / _order_2d

下一章把这些 k 矢安到「眼镜片」上:瞳孔扩展、1D/2D 架构、W100 为什么没有单独的 folding 条。

第 3 章 AR 光路里的 SRG 波导

第 1–2 章是物理。这一章把物理安到近眼显示上:为什么要用波导、SRG 是哪一种波导、瞳孔扩展在干什么、W100 选了哪条架构。


3.1 近眼显示的几何矛盾

眼睛要看到一块虚像,等价于:在出瞳处,每个视场角对应一束大致准直的光,且这束光要填满眼球能活动的范围(Eyebox)。矛盾是:

没有波导时,你只能把光机直接对准眼睛,体积和重量都会回到「头戴显示器」。波导的角色是一根 透明的二维光管:太阳穴处把准直像耦进去,在镜片里用 TIR 送到眼前,再耦出来。

准直很关键。波导里走的是「角度编码」:视场角 \(\leftrightarrow\) \(\mathbf{k}_\mathrm{air}\)。物面信息已经在光机里变成方向;波导尽量不要再加光焦度(自由曲面几何波导除外)。SRG 平板本身近似零光焦度,畸变主要来自光栅色散和装配。规格 Dist \(<1\%\) 就是在管这件事。


3.2 三条技术路线,只在「怎么弯 k」上不同

路线弯 k 的手段典型特征
几何波导倾斜半反镜阵列、部分反射面全彩相对容易,厚、重,漏光/鬼影靠膜系
体全息(VHG / HOE)体布拉格光栅波长/角度选择性好,工艺是干涉记录,环境稳定性要单独做
表面浮雕(SRG / DOE)表面纳米槽,纳米压印可量产薄、可复制;色散和彩虹纹是天敌;全彩往往要多层或分色

W100 是 单绿色 SRG。单色把色散从「必须多层闭合」降成「一个 \(\lambda\) 上闭合即可」。带宽仍有 24 nm FWHM(JBD 0.13" 微 LED),k-layout 要对准中心波长,带宽只进效率与轻微色边。

SRG 相对 VHG 的电磁图像:扰动集中在表面几十到几百纳米,不是体分布。因此:


3.3 瞳孔扩展(EPE):把小瞳变成大 Eyebox

耦入孔径 W100 只有 \(\Phi 3.8\,\mathrm{mm}\)。Eyebox 要 15×7 mm。若光在波导里不分支,出瞳几乎仍是 3.8 mm 的复制,眼睛一偏就黑。

EPE 的原理是 受控漏光:导波每次经过一块弱光栅,分出一小部分到新的 \(\mathbf{k}\),其余继续走。在空间上复制出一串平行的「子瞳」。

一维瞳扩

经典论文片:IC(耦入)→ FC(转折/扩瞳)→ OC(耦出/再扩瞳),三块 1D 光栅。能量沿一条折线走,Eyebox 主要沿一个方向拉长。

官方 GPU 追迹库就是按这个顺序写死的。

二维瞳扩

一块(或两块正交)2D 光栅同时提供两个栅矢。能流在面内铺开成二维网格,Eyebox 可以是横向矩形。W100 属于这一类:没有单独的 FC 条带,圆角矩形(v1)或平行四边形(v2)里的 2D 柱阵同时做转折和耦出。

代价:

couplers_coor_w100.py 的映射是工程妥协:同一多边形登记两次,一次叫 FC(K1),一次叫 OC(K2),以便沿用论文返回签名。物理上它们是同一块区域。


3.4 系统坐标:左眼、原点在耦入中心

W100 规格与设计报告的平面图:

        +y
         ^
         |        耦出区(光栅)
         |     ┌─────────────┐
         |     │   Eyebox    │
  耦入 ●───────┤   15×7      │ ----> +x
 Φ3.8    |     └─────────────┘
         |

FoV 不是规格书直接给的 HxV。对角 30°(按 640×480)反推:

\[ \mathrm{FoV}_x=2\arctan\Big(\tan 15^\circ\cdot\frac{640}{800}\Big)\approx 24.20^\circ, \]
\[ \mathrm{FoV}_y^\mathrm{full}=2\arctan\Big(\tan 15^\circ\cdot\frac{480}{800}\Big)\approx 18.27^\circ. \]

实际显示 640×200 中心条带:

\[ \mathrm{FoV}_y=2\arctan\Big(\tan 15^\circ\cdot\frac{200}{800}\Big)\approx 7.66^\circ. \]

评估网格常用 12×4,与设计报告「每个 Eyebox 点 12×4 FOV」对齐。


3.5 叠层:谁负责看世界,谁负责看虚像

远眼  CG 0.2 mm  AR + 加硬 + 防污
      气隙 0.1 mm
      波导 0.4 mm  远眼面:耦入闪耀+Ag;非光栅区遮镀 AR
近眼              近眼面:AR;耦出 2D SRG 在报告/规格的指定面
      空气 ER=14 mm
      眼球

要点:

本仓库不求解膜系,也不建 CG 的实际外形(外形是规格书图 1 示意多边形)。


3.6 光机、准直与「单绿色」的含义

JBD 0.13" 单色微 LED,中心 526 nm,带宽 24 nm。波导设计按单 λ 做 k 闭合;带宽表现为:

光机相对耦入有 \(14^\circ\) 俯仰,所以 FoV 中心不是基板法向。k-layout 若按「正入射设计再指望边缘也 TIR」,会把中心放错环带。W100 把 Kin 定在 378 nm / 6°,就是按带姿态的中心视场在环内、边缘也不漏来的。


停下来想清楚

  1. 若取消 EPE、把耦出做成「一次性强耦出」,Eyebox 会缩回大约耦入孔径量级。η 可能很高,均匀性/Eyebox 规格会挂。
  2. 若用三块 1D 光栅做二维 Eyebox,通常要更大的转折区;W100 用 2D 换面积。v2 再把外包从矩形改成沿能流方向的平行四边形,是同一逻辑的几何优化。
  3. 「单绿」没有取消光栅色散,只是没有红蓝两套闭合要同时满足。

本仓库对照

概念位置
架构映射 IC/FC/OCcouplers_coor_w100.py 文件头注释
产品平面图output/W100_v2/01_product_parallelogram_og.svg
叠层与镀膜规格w100_params.py 中 COAT_*;规格提取第 5 节
官方 1D 论文库vendor/GPU_ray_tracing_for_waveguide_based_AR_display/

下一章是设计流程:规格 → k → 槽型 → 形貌,每一步有唯一的物理任务。

第 4 章 设计:从规格走到一块能做出来的光栅

设计不是「先画槽再看像不像」。正确顺序是 先锁 k,再分效率,最后裁面积。调反了会得到漂亮的纳米 SEM、死掉的视场。


4.1 输入规格:哪些是约束,哪些是目标

把规格分成三类。

硬约束(不满足则光学结构不成立)

光学目标(有数、可折中)

工艺约束

W100 原设计报告 p.8 已经显示:E7 的 η 和若干点的 FoV 均匀性 相对规格书是欠账。设计流程要能解释欠账来自 k、来自槽型,还是来自布局。


4.2 第一步:k-layout

4.2.1 耦入周期

目标:把空气盘里的整个 FoV 平移进 TIR 环,且不要贴 \(n k_0\) 太近(倏逝、对公差敏感)。

粗估(忽略姿态)正入射:\(\lambda/n < \Lambda_\mathrm{in} < \lambda\)。W100:292–526 nm。取 378 nm 后 \(|K_\mathrm{in}|/k_0=1.392\),对应 \(\theta_g\sim 51^\circ\),离临界 33.7° 和截止 90° 都有余量。

方位 \(\phi_\mathrm{in}=6^\circ\):让导波能流大致朝 Eyebox(\(+x\) 偏下),而不是正 \(+x\)。Eyebox 中心在 \(y=-3\,\mathrm{mm}\),需要一点点下偏。

4.2.2 两根 2D 矢

要同时:

  1. \(\mathbf{K}_1+\mathbf{K}_2=\mathbf{K}_\mathrm{in}\)(闭合,第 2 章)。
  2. \(-\mathbf{K}_1\) 之后的能流指向 Eyebox 的另一条边(二维铺开)。
  3. \(|\mathbf{K}_{1,2}|\) 仍把中间态留在 TIR 环内。

W100 选 \(\Lambda_\mathrm{eq}=319.5\,\mathrm{nm}\),相对 Kin 各偏 65°,于是图上是 71° 与 −59°。矩形点阵实现这两根等效矢:周期 (758, 353) nm。占空比 0.5、顶宽正好是周期一半,是「先保证 k、槽型取最容易做的矩形柱」的工艺选择,不是电磁最优。

4.2.3 扫描 FoV 验收 k

对 FoV 网格(加上光机姿态)做三次平移,丢掉任何:

本仓库这一步在 couplers_coor_w100.py,评估只读 th_out_ic / th_out_fc 是否 finite 且 TIR。不要在这一步优化齿深。 齿深不出现在 k 方程里。


4.3 第二步:微纳槽型——只分配功率

4.3.1 耦入:闪耀 + 银

反射闪耀的几何直觉:斜面法线把「金属镜面反射」指到设计级次的方向。倾角 \(\alpha=65^\circ\)(对法线)、\(\beta=0\)、\(H=218\,\mathrm{nm}\)、占空比 1(锯齿几乎占满周期)。

自洽问题:\(H\tan 65^\circ\approx 467\,\mathrm{nm} > P_\mathrm{in}=378\,\mathrm{nm}\)。斜面在一个周期内走不完高度,必须 截断。RCWA 里 _blaze_ucell 把斜面 clip 到周期内,再沿 z 切 8 层楼梯。规格仍保留 218 nm 与 65°;那是工艺靶标,电磁模型用截断后的真实轮廓。

银 \(t>500\,\mathrm{nm}\):趋肤深度远小于此,背面当无限半空间即可。rcwa_lut.py 设 n_bot = N_AG。金属 RCWA 的衍射效率求和可能因截断/吸收定义出现 \(>1\) 的数值垃圾,代码用 min(..., 1.0) 截。这是护栏,不是物理。

材料:Inkron n=1.74 在 n=1.8 基板上,对比度不大。高效率主要靠 银的反射 + 闪耀相位匹配,不是靠介质对比度。

4.3.2 耦出:浅 2D 柱 + 齿深渐变

齿深 25–100 nm,远小于波长。这是弱光栅:0 阶反射(继续 TIR)占大头,衍射级百分之几。弱才扩瞳。

沿某个轴把 H 从 25 变到 100 nm:靠近耦入、刚进入 2D 区时齿浅,少耦出、多向前送;靠近 Eyebox 远端齿深,把剩余能量抽出来。否则近端就把光抽干,远端和鼻侧发暗。

规格渐变轴 45°。v2 评估为了和图上平行四边形一致,改成沿对角线顶点 0→2(evaluate.depth_on_para)。规格轴和评估轴不一致 时,均匀性数字不能拿去对规格验收——第 7 章会再强调。

占空比 0.5:对矩形柱,傅里叶分量的 \((m,n)=(\pm 1,0)\) 等较低阶相对干净。圆角「待定」:圆角会削弱高阶、略改 1 阶,量产 SEM 必须回灌到 RCWA。

4.3.3 不要用效率反推周期

周期已经由 k 锁死。若 RCWA 显示设计级次很弱,应该改 H、DC、闪耀、材料,或接受要多层。改周期会破坏第 4.2 节的闭合。


4.4 第三步:平面布局——光栅只铺在光子会到的地方

2D 能流沿 \(\mathbf{K}_1/\mathbf{K}_2\) 走。轴对齐矩形会在四个角留下 永远照不到的光栅。那些面积仍贡献雾度、彩虹纹和成本。

v2 的做法对齐 beam-tracing 论文(几何算一次,布局反复用):

  1. 收集必须被光栅覆盖的点:Eyebox 边界、FoV 投影角点、沿 TIR hop 走进 eyebox 前的 bounce(coverage.py)。
  2. 在边方向 \((u,v)\) 和余量上搜索平行四边形,包住这些点,面积最小,且不撞耦入清空间、不越镜片包络(optimize_og.py)。
  3. 面积接近最小时,优先边贴近 K1/K2 的剪切形,而不是轴对齐矩形。

当前一次搜索的交付:\(u=6^\circ\),\(v=-59^\circ\),余量 0.3 mm,面积 357 mm²,相对 v1 矩形外包约 1.09 倍。注意:最小面积候选未必是 k 对齐的那一个;代码在 12% 面积代价内切换到非矩形。优化目标是覆盖+面积,不是 \(U_\mathrm{EB}\)。 所以它不会自动修好均匀性。

拟合几何:把点变到以 \(u,v\) 为基的坐标,取轴对齐包围盒再变回来——那就是平行四边形(geometry.fit_parallelogram)。夹角过小会退化,搜索时丢掉夹角 \(<12^\circ\) 的对。


4.5 设计环:什么时候回到上一步

规格 → k 扫描
          │ 边缘视场漏光 / 截止
          ▼
     改 Λ 或方位(昂贵,动所有模具)
          │
          ▼
     RCWA 槽型
          │ 设计级次太弱 / 0 阶太强 / 金属损耗
          ▼
     改 H, DC, 闪耀, 材料(中等)
          │
          ▼
     布局与齿深图
          │ Eyebox 缺角 / 近端抽干
          ▼
     改外形、渐变轴、余量(便宜)
          │
          ▼
     系统追迹与评估
          │ 均匀性、鬼影、彩虹纹
          └── 通常先改布局/齿深;改不动再回 RCWA;再不动才动 k

工业上 k 一旦冻结(光刻/压印母版),后面只能动槽深分布和少量 DC。W100 本仓库 没有改周期,只改了耦出外形和 LUT 来源。这是正确的冻结顺序。


4.6 公差:设计值旁边的 ±5 nm 不是装饰

周期 ±5 nm 对 \(P_\mathrm{in}=378\,\mathrm{nm}\) 是 1.3%。\(|K|\) 同比变化,闭合三角形裂开,出射角漂 \(\delta\theta\sim (\delta\Lambda/\Lambda)\cdot(\lambda/\Lambda)/\cos\theta\) 量级。边缘视场最先掉 TIR。

齿深 ±5 nm 对 25 nm 浅端是 20% 相对误差,对弱光栅效率几乎线性,均匀性会漂。

闪耀角 ±2° 强烈改变金属闪耀的级次比。RCWA 应对公差做角扫描,而不是只报标称点。

本仓库未做公差蒙特卡洛。评估报告里的曲线是标称几何。


停下来设计一次(纸上)

给一组新规格:\(\lambda=532\,\mathrm{nm}\),\(n=1.8\),FoV \(\pm 15^\circ\) 正入射(无光机偏置),只要 1D 耦入。选出一个 \(\Lambda\) 使中心在 TIR 环中部、边缘 \(\pm 15^\circ\) 同向相加后仍 \(k_\rho < n k_0\) 且 \(k_\rho>k_0\)。你会发现窗口比「292–526 nm」窄——FoV 会吃掉两端余量。这就是为什么 W100 还要把光机 14° 俯仰算进 k,而不是用正入射窗口。


本仓库对照

步骤代码 / 文档
规格冻结w100/w100_params.py
k 扫描w100/couplers_coor_w100.py
槽型 RCWAw100_v2/rcwa_lut.py
覆盖点w100_v2/coverage.py
平行四边形搜索w100_v2/optimize_og.py
为何平行四边形docs/v2/00_libraries.md 末节

下一章把「算效率」和「把效率铺到 Eyebox 上」分成两个仿真问题。

第 5 章 仿真:电磁一次,几何一万次

波导仿真必须拆成两层。混在一个「大 FDTD」里既算不动(厘米级基板 × 纳米槽),也看不清误差从哪来。

层问题尺度方法输出
微纳一个(或几个)周期,数百 nmRCWA / FDTD / FEM各衍射级效率 \(\eta_m(\lambda,\theta,\phi,\mathrm{pol},H)\)
系统数十 mm 的 TIR 折线射线 / beam / 分段解析 hopEyebox 照度、FoV 均匀性、相对通量

中间用 LUT:系统层每次碰到光栅,查表分支,不重新解麦克斯韦。

Optics Express 584116 的 GPU 追迹是第二层;570463 的 beam tracing 是「第二层几何只算一次,布局迭代复用」。W100 v2 两边都借了思路,实现是 CPU hop + meent LUT。


5.1 RCWA 在干什么(从麦克斯韦到效率)

5.1.1 周期单元里的场

RCWA(Rigorous Coupled-Wave Analysis,也叫傅里叶模态法)假设结构沿 \(x,y\) 周期、沿 \(z\) 分层均匀。每一层把 \(\varepsilon(x,y)\) 展成傅里叶级数,把麦克斯韦方程变成有限维本征问题。本征模是 Floquet 模:面内 \(k\) 差整数个 \(\mathbf{G}\),\(z\) 向有传播常数 \(\pm k_{z,m}\)。

层与层之间用边界上 \(E_\parallel,H_\parallel\) 连续把系数接起来。数值上 不要用裸传递矩阵(指数增长的倏逝模会爆);用散射矩阵 / 稳定的 S 算法。meent 的 conv_solve() 走的就是这条路。

截断阶数 FTO:1D 取谐波 \(-N\ldots N\)(本仓库 \(N=10\)),2D 取 \([-N_x,N_x]\times[-N_y,N_y]\)(本仓库 \(3\times 3\),一共 49 个通道)。FTO 太小:效率未收敛,尤其金属和锐角闪耀。FTO 太大:卷积矩阵变胖。真正交付前应对 FTO 做收敛曲线;当前 LUT 没有这条曲线。

5.1.2 入射、偏振、能量

入射是某一层上方(或下方)的一个传播 Floquet 通道,通常是 0 阶。偏振 pol=0/1 对应 TE/TM。功率衍射效率 de_ri(反射)、de_ti(透射)是该级次能流法向分量除以入射能流。对无损介质,全部传播级之和应为 1。金属有吸收,和应小于 1;若数值上大于 1,是截断/归一化问题。

W100 耦入:n_top = 1.8(玻璃),n_bot = Ag,查 反射 −1 阶。耦出:n_bot = 1(空气),查透射 \((-1,-1)\) 与反射 0 阶、\((\pm 1,0)\) 等。

5.1.3 为何不用 FDTD 做整片

一个 hop 是 0.7 mm,Eyebox 是 30 mm。可见光波长 0.5 μm。网格若 \(\lambda/20\),三维 FDTD 的体元数在 \(10^{12}\) 量级。RCWA 把周期抽走,复杂度落到「一层的傅里叶阶数」,所以能进设计循环。

FDTD/FEM 仍有用:有限孔径、圆角真实 SEM、遮镀边缘、缺陷。那是验证,不是扫布局。

5.1.4 本仓库 LUT 的抽样有多稀

耦入:\(\theta\in\{18,26,34,42,50\}^\circ\),\(\phi=0\),s/p 平均。真正入射还有方位和光机俯仰;\(\phi=0\) 是切片。

耦出:只在 \(\theta=42^\circ\) 扫三个齿深 \(\{25,62.5,100\}\,\mathrm{nm}\)。系统评估时对 H 插值,对角度不插(角度维根本没有)。因此 LUT 给出的是「浅→深效率上升」的趋势,不是每个 FoV 的真 \(\eta(\theta,\phi)\)。

金属闪耀的 −1 阶大约 0.65–0.73(见 eval_metrics.txt 的 ic_logs)。这个数看起来很高,但它是 耦入一次 的衍射效率,后面还要乘几十次弱耦出和金属/散射损耗。不能拿 0.7 去对 \(\eta>900\,\mathrm{nit/lm}\)。


5.2 薄光栅公式什么时候能用

标量衍射、无限薄相位屏,1 阶效率大约 \(\mathrm{sinc}^2\) 一类。v1 的 lut_w100.py 走的就是闪耀包络。它能画趋势,不能验收。

弱介质光栅(耦出浅柱)有时可用耦合模:效率 \(\propto (\Delta n\cdot H/\lambda)^2\)。H 从 25 到 100 nm,效率大约差 16 倍——这正是渐变存在的理由。一旦有金属、闪耀截断、2D 多级次,就回到 RCWA。


5.3 系统层:TIR hop 追迹

5.3.1 状态机

一根「光线」的状态是 \((x,y,\mathbf{k},w)\):面内位置、当前面内波矢(决定 hop 方向与步长)、权重(通量)。

算法(v2 evaluate.py,与论文 GPU 核同一思想):

  1. 在耦入圆盘上均匀抽点(面积均匀:半径用 \(\sqrt{\xi}\))。
  2. 对该 FoV 查耦入效率,\(w\leftarrow\eta_\mathrm{IC}(\theta)\)。
  3. 重复:位置 \(+=\boldsymbol{\Delta}(\mathbf{k})\)(一次上下表面往返)。
  4. 若尚未折转且点落入 OG:把 \(\mathbf{k}\) 换成 −K1 后的态,权重乘 \(\eta_{K1}(H)\),标记 folded。
  5. 若已折转且仍在 OG:把一部分权重 \(\eta_\mathrm{out}(H)\) 记到 Eyebox 图上,剩余乘 \(1-\eta_\mathrm{out}\),沿折转 hop 继续。
  6. 出界或 \(w\) 太小则停。

这是 非相干、标量、单次分支 模型。它忽略:同一点上 \((m,n)\) 的同时衍射、相干叠加、偏振、盖板膜系、有限光束孔径衍射。

5.3.2 为什么评估里 E1–E9 会全是 0

v2 报告已经写了:本次 hop 的耦出落点偏在 OG 上侧,没有填进规格 15×7 的 E1–E9 窗口,于是 eb_img 在那些 patch 上为 0,\(U_\mathrm{EB}=0\)。

物理上这通常表示:折转后的 hop 方向 / OG 形状 / 记分窗口 三者没对齐。可能是 −K1 后的 \(\phi\) 把能流送去了覆盖点以外的区域;覆盖优化用的是 未折转 的 IC hop 走进带(coverage.py 用 lut_gap[...,0:2]),而评估折转后改走 lut_gap[...,2:4]。两条几何不是同一条河。这是当前程序的真实缺口,不是规格书的问题。

所以:v2 的 \(U_\mathrm{FOV}\) 均值 77.9% 只是「有效 FoV 点之间相对通量」的几何参考;光度学仍以设计报告 p.8 为准。

5.3.3 Beam tracing「几何只算一次」

射线从耦入密密麻麻发出,改一个 OG 顶点就要重追。Beam 方法把同一 \(\mathbf{k}\) 的管束当成多边形在面内平移、与光栅区求交,交上的面积当权重。布局迭代时 k 网格不变,只改多边形。v2 用覆盖点集近似这个思想:点集与 k 有关、与 OG 无关;OG 只负责包住点。更精细的 beam 实现见论文仓库 beam_tracing_method,本包没有移植求解器。

5.3.4 GPU 核(v1)

w100/cuda/w100_trace.cu 把同一套 hop 写成 CUDA,矩形 AABB 点包含。平行四边形点包含还没进核,所以 v2 走 CPU。Numba 在本机 sm_120 上 JIT 失败,不要走那条路。


5.4 如何把两层接对

接口契约:

  1. 级次定义一致(第 2 章符号)。LUT 的 \(\eta_{-1}\) 必须对应 hop 用的那根 \(\mathbf{K}\)。
  2. 坐标系一致:RCWA 的 \(\theta,\phi\) 相对光栅矢量还是相对基板 \(x\)?meent 的 phi=0 表示入射面沿周期方向。W100 的 Kin 在 6°,严格做法是把入射方位转到光栅坐标再查表。当前 LUT 没做这步旋转。
  3. 能量守恒:分支概率之和 \(\le 1\)。评估里 eta_k1 下限 0.02、剩余乘 max(1-e_out, 0.05),是防止权重归零的工程地板,会 人为提高 远端通量。读相对均匀性时要知道有这层地板。
  4. 波长:LUT 单点 526 nm;带宽 24 nm 未积分。

5.5 建议的收敛与验证清单(设计时用,本包尚未全做)

  1. RCWA:提高 FTO,看设计级次变化 \(<1\%\) 相对。
  2. 闪耀楼梯:8 层 vs 16 层。
  3. 2D:\(\theta,\phi\) 在 FoV 对应的玻璃角锥上抽 20–50 个点,而不是单点 42°。
  4. 系统:加倍 n_ic 与 bounce,看 E5 通量稳定。
  5. 与无光栅菲涅尔路径对比:OG 外不应记虚像通量。
  6. 与设计报告 p.8 比 趋势(哪一角暗),不要比绝对值——单位都还没对齐。

停下来推演

设 \(\eta_\mathrm{out}=0.04\) 均匀、每次经过都耦出,忽略转折损耗。经过 \(N\) 次,剩余 \((0.96)^N\)。要让远端仍有近端 50% 的抽取,\(N\approx 17\)。hop=0.7 mm 时只覆盖 12 mm,不够 15 mm Eyebox——所以远端必须把 \(\eta_\mathrm{out}\) 加大(齿加深),不能用常数效率。这就是渐变存在的定量理由。


本仓库对照

层入口
一键w100_v2/run_all.py(--skip-rcwa 复用 npz)
RCWAw100_v2/rcwa_lut.py → output/W100_v2/lut_meent_w100.npz
hop 评估w100_v2/evaluate.py
v1 GPUw100/cuda/w100_trace.cu
LUT 曲线图output/W100_v2/04_rcwa_lut.svg

下一章把规格书上的每一个光学指标还原成定义,并标明本程序停在哪一层。

第 6 章 评估:每个指标从哪条物理来

评估的第一原则:先写定义和单位,再谈程序输出。 本仓库 v2 输出的是相对通量;规格书要的是 nit/lm、MTF、透过率。把它们画在同一张柱状图上而不加注释,是最常见的自欺。


6.1 分层验收,不要一张表打天下

L0  几何 / k     视场能否 TIR、能否闭合、光栅是否盖住投影
L1  相对通量     同一模型内的 U_FOV、E 点相对值(无绝对校准)
L2  光度学       η (nit/lm)、绝对亮度、ANSI 对比度
L3  像质         MTF、畸变、鬼影、拖影、光晕
L4  看世界       透过率、雾度、色度、彩虹纹
L5  工艺 / 可靠  硬度、接触角、遮镀对准

当前程序:L0 完整;L1 部分(且 E1–E9 这次是空的);L2–L5 基本没有。设计报告 p.8 是别人的 L2 结果。规格书第 4 节是验收门槛。


6.2 L0:几何有效性

TIR-valid FoV 比例。 对每个 FoV 采样点,耦入后 \(n\sin\theta>1\) 且 \(k_z^2>0\)。W100 v2:60/60 = 100%。这是 k-layout 的合格证,不是产品合格证。

覆盖。 Eyebox、斜投影、走进带是否落在 OG 多边形内。优化器保证约束点被包住;不保证折转后的真实落点还在里面(第 5.3.2 节)。

彩虹纹的几何部分。 规格:水平临界入射角 \(>80^\circ\),垂直 \(\ge 89^\circ\)。公式(规格书 p.22–23)

\[ \sin i + \sin\theta = \frac{\lambda}{d}. \]

\(i\) 是环境光入射角,\(\theta\) 是观察方向相对法线(由耦出区边缘到 Eyebox 边缘的几何决定),\(d\) 是周期。若 \(|\lambda/d-\sin\theta|>1\),该观察方向上 1 阶根本不存在,彩虹纹在几何上被关掉。w100/eval_image_quality.py 的 rainbow_critical_i 只做这一层,不是 电磁仿真。


6.3 L1:均匀性(相对值)

规格与报告用

\[ U=\frac{L_\min}{L_\max} \]

(有时会写 ANSI 九宫格的其它组合,W100 规格按 min/max)。

Eyebox 均匀性 \(U_\mathrm{EB}\)。 E1–E9 九点亮度的 min/max,门槛 \(>65\%\)。报告 71.61%。

\(U_\mathrm{EB258}\)。 只用 E2、E5、E8(竖直中线),门槛 \(>85\%\)。报告 95.03%。中线往往最好,因为水平瞳扩更充分;边角 E1/E3/E7/E9 才是地狱。

FoV 均匀性。 固定眼球位置,扫视场。门槛整体 \(>30\%\),worst \(>25\%\),中心区更严。报告里 E3=22.6%、E7=17.6% 未达 规格。

本仓库 L1:

相对通量不是亮度。 没有把光机流明、眼睛立体角、光谱、透过率链路乘进去。可以比较「改齿深前后 E5/E7 比值变好没有」,不能写进规格符合性表的 η 列。

Eyebox 判据(规格 p.15):该点 FoV 不全,或平均亮度 \(<\) 中心 \(L_\mathrm{avg}\) 的 40%,判不合格。这是产品测试语言,比单纯 \(U_\mathrm{EB}\) 更狠。


6.4 L2:光效 η(nit/lm)——单位从哪来

显示亮度 \(L\) 的单位是 \(\mathrm{cd/m^2}=\mathrm{nit}\)。光机光通量 \(\Phi\) 的单位是 \(\mathrm{lm}\)。

\[ \eta=\frac{L_\mathrm{display}}{\Phi_\mathrm{engine}}\quad [\mathrm{nit/lm}]. \]

它不是无量纲效率。同一块波导,光机越「小而亮」(流明集中在小立体角),测到的 η 会变。验收必须锁定:画幅 640×200、光源、测量立体角、Eyebox 点位。

从第一性原理拼 \(\eta\) 需要:

  1. 光机出瞳亮度分布(角度、偏振、光谱)。
  2. 耦入孔径接收的流明。
  3. 每次光栅事件的 RCWA 效率(全角度、光谱加权)。
  4. 弹跳中的吸收、Ag 损耗、散射。
  5. 耦出后进入 3 mm 级瞳孔、再折算到虚像面的光度量。

本仓库没有 1 和 5。所以 禁止 把 flux_sum 或 E 点相对值标成 nit/lm。设计报告 p.8 的 831…1046 是完整光度链路(未知商业软件)的输出,当对照趋势用。

数量级 sanity check(不可当设计):耦入 0.7,之后 40 次 × 平均耦出 0.03 量级再加金属损耗,系统「功率效率」往往在 1% 上下。再除以虚像立体角和面积,才能到 \(10^2\)–\(10^3\) nit/lm。缺任何一项几何因子都会错一个数量级。


6.5 L3:像质

MTF

规格:中心 \(>65\%\)、边缘 \(>55\%\)、中心 worst \(>60\%\),频率 3.4 lp/deg(按 4 像素线对:\(640/(2\times 4\times 24.2^\circ)\approx 3.3\),与 3.4 一致)。

MTF 是成像系统的对比度传递。波导贡献来自:

hop 标量模型 没有相位叠加,不能算 MTF。eval_image_quality.py 只把规格画在图上。要算 MTF 至少需要:相干/部分相干传播,或实测刀口。

畸变

准直 + 平板理想为零。实际来自光栅方程随视场非线性、装配。规格 TV 畸变 \(<1\%\)。几何上可用出射 \(\mathbf{k}\) 对理想视场网格的偏移来估;本包未做。

鬼影

错误级次落到空气光锥且进入瞳孔。k 图上数点:哪些 \((m,n)\) 满足 \(k_\rhoghost_order_check 做简化通道。电磁权重仍要 RCWA。规格写「不可有」——工程上是主像/鬼影像亮度比低于某个未公布阈值。

拖影 / 光晕

\(L/D\)、\(S_2/S_1\),规格暂定 \(<100\%\)。需要点扩散或实测。无仿真。


6.6 L4:看世界与彩虹纹

虚像光路和外界光路共用基板,不共用级次。

透过率: 0 阶透射,积分半球或规格规定的 0–30° / 大角度。光栅区因衍射把能量分走,透过率低于非光栅区。RCWA 的 de_ti 0 阶可以直接对这条,但要扫 λ 和角,并加上 CG 的 AR。本包未扫。

雾度: 散射进入 0 阶以外的小角。周期结构的「雾度」有时是高阶衍射被积分球当成散射。真正随机粗糙要 BSDF。

色度 Lab: 透过光谱加权。单绿虚像不免除「看世界」的白场色偏(光栅色散 + 膜系)。

彩虹纹: L0 几何截止是第一道防线;未截止的方向要看效率是否低到不可见。环境光是宽带、大角度,比虚像更难。


6.7 对比度

ANSI \(>40:1\),worst \(>35:1\)。来源:鬼影、散射、TIR 漏光、盖板反射把光机亮点送进暗场。标量 hop 若只追「设计级次」,会系统性高估对比度。暗场必须另开「错误级次 + 散射」通道。


6.8 把本程序数字读对

以 output/W100_v2/eval_metrics.txt 为例:

字段应读成不应读成
TIR_valid=1该网格上 k 全部可导产品光学合格
U_FOV_mean=0.78hop 模型里 FoV 相对较匀规格 U>30% 已满足(定义、加权都不同)
U_EB=0 E1:0…记分窗口里没接到光真实 Eyebox 亮度为零
p1=0.73(LUT)该抽样角上耦入 −1 阶系统 η
报告 1046 nit/lm商业链路在 E5 的光度学本程序重现

符合性表应三列:规格 | 设计报告 | 本程序能评的量。空着的格子保持空,不要填相对通量。


停下来写验收计划

假设明天量产来片。你至少要:

  1. 测 E1–E9 的 L(nit)和光机 lm,算 η 与 \(U_\mathrm{EB}\)。
  2. 中心/边缘 MTF @ 3.4 lp/deg。
  3. 光栅区 0–30° 透过率四段光谱。
  4. 暗室里扫环境光看彩虹纹临界角。
  5. 对照 SEM:周期、H、DC、闪耀角是否在 ±5 nm / ±2° 内。

仿真的职责是在这五条之前 预测哪一条会挂、往哪调。本仓库今天能帮忙的主要是第 5 条的几何/k 和第 1 条的趋势;第 2–4 条需要加物理。


本仓库对照

指标实现
TIR-valid、相对 U、E9w100_v2/evaluate.py
规格常数w100_params.py 中 U_ ETA_ MTF_*
彩虹纹几何w100/eval_image_quality.py
设计报告对照值REPORT_ETA REPORT_U_EB
出图output/W100_v2/05_eval_fov_e9.svg

下一章把书合上,对着仓库做一次一对一实操。

第 7 章 工作室:对着 W100 仓库把原理走一遍

这一章按「坐你旁边」的顺序:跑、读图、对公式、指出坑、下一步改哪里。前六章的符号这里不再重推。


7.1 先跑通第二版

在仓库根目录:

cd /d d:\Mac\Simulation
run_w100_v2.bat

或:

.venv\Scripts\python.exe w100_v2\run_all.py

已有 LUT、只想重评估:

.venv\Scripts\python.exe w100_v2\run_all.py --skip-rcwa

依赖:requirements.txt + meent。入口逻辑在 w100_v2/run_all.py:优化 OG →(可选)RCWA → hop 评估 → 出图 → 写 docs/v2/W100_v2_design_report.md。

输出目录:output/W100_v2/。


7.2 六张图分别在考哪一章

打开 SVG(比 PNG 更适合对照)。

01_product_parallelogram_og 镜片示意轮廓、红色耦入圆、虚线 v1 矩形、实心 v2 平行四边形、Eyebox、E1–E9、灰色覆盖点。 对照第 3 章坐标、第 4.4 节覆盖。问自己:覆盖点是否沿 Kin 方向成条,而平行四边形边是否大致沿 6° 与 −59°。当前交付 u=6°、v=-59°,一边对齐 Kin 而不是 K1——优化器在面积约束下选了这个。

02_nano_ic_oc 左:截断闪耀 + Ag。右:2D 单胞。 对照第 4.3 节。看斜面是否在一个周期内被截断(\(H\tan\alpha>P\))。

03_k_layout 空气盘、玻璃盘、三根矢、闭合三角形。 对照第 2 章。用尺子看 \(\mathbf{K}_1+\mathbf{K}_2\) 是否画在 \(\mathbf{K}_\mathrm{in}\) 上。残差在 \(10^{-8}\,\mathrm{nm}^{-1}\) 量级,图上应完全重合。

04_rcwa_lut 耦入效率随 θ、耦出效率随 H。 对照第 5.1.4 节。耦入 −1 阶约 0.65–0.73,随 θ 缓降。耦出随 H 上升。若你看到金属效率 \(>1\) 被 clip,那是数值护栏。

05_eval_fov_e9 FoV 相对通量热图与 E9。 对照第 5.3.2 与第 6.3 节。若 E 点为 0,不要调周期;先画折转后 hop 矢量叠在 OG 上,看落点往哪飘。

06_og_area_rank 候选平行四边形面积排序。 对照第 4.4 节。交付外形不一定是全局最小面积(代码允许 12% 代价换 k/剪切)。

同时读 scene_v2.json、og_optimize.json、eval_metrics.txt。JSON 里的顶点应与报告表格一致。


7.3 代码阅读顺序(约两小时)

不要按文件名字母序。按光子的人生:

  1. w100/w100_params.py — 每一个数的出处。养成「改参数先看 Cite」的习惯。
  2. w100/couplers_coor_w100.py — 入射角、三次 k 平移、lut_gap。在 kk 循环里打打印,看中心视场的 th_out_ic 是否约 50°。
  3. w100_v2/coverage.py — 约束点从哪来。注意 hop 用的是 IC 的 gap,不是 FC 的 gap。
  4. w100_v2/geometry.py + optimize_og.py — 基变换拟合;搜索中心在 K1/K2。
  5. w100_v2/rcwa_lut.py — _blaze_ucell 楼梯、meent call_mee、抽哪一个 order。
  6. w100_v2/evaluate.py — 状态机。把 folded 分支画成流程图,会立刻看到「记分条件」比「在 OG 内」更窄(还要求 \(x\) 靠近 Eyebox)。

v1 CUDA 可以后看。它验证同一 hop 思想,不包含平行四边形与 meent。


7.4 已知缺口清单(读报告时钉在手边)

  1. E1–E9 / \(U_\mathrm{EB}\) 本次无光。 折转 hop 与记分窗不对齐。修法:在评估里把每条射线的 \((x,y)\) 轨迹画出来;用 FC 的 gap 生成第二套覆盖点再优化 OG;或放宽记分窗做诊断(诊断用,不能当验收)。
  2. 2D RCWA 单角 42°、FTO=3。 当趋势,不当绝对值。
  3. 级次符号两套习惯。 几何 +Kin 与 RCWA −1。改闪耀方向前先对齐。
  4. 齿深轴: 规格 45°,v2 评估用平行四边形对角线。
  5. 效率地板 0.02 / 0.05 会抬高均匀性。
  6. 无 MTF / 膜系 / 光谱积分 / nit 校准。
  7. 镜片外轮廓示意。 面积优化的 bbox 不是最终 CAD。
  8. 闪耀几何自洽: 218 nm × tan65° > 378 nm。
  9. 原设计报告自身未全面达标(E7 η、部分 U_FOV)。仿真对齐报告不等于对齐规格书。

7.5 若你要在本仓库上继续设计

优先顺序与第 4.5 节相同,落到具体改动:

你的目标动哪里不要动
让 E 点接到光evaluate.py 记分与 hop 方向;必要时 coverage.py 改用折转 gapPIN_NM
更可信的效率曲线rcwa_lut.py:扫 θ/φ、提高 FTO、2D 级次与 k 一一对应用 v1 sinc LUT 去报 η
更小 OGoptimize_og.py 的 margin、bbox;更紧的覆盖点为了面积丢掉 Eyebox 角
均匀性齿深图 depth_on_para / 规格 45° 轴;LUT 的 \(\eta(H)\)先改 k
GPU 加速平行四边形把点包含写进 w100_trace.cuNumba JIT
像质新模块:相位、错误级次、彩虹纹 RCWA假装 hop 权重是 MTF

改周期是最后手段。若必须改:先重跑第 2 章的闭合算术,再 couplers_coor 扫 TIR-valid,最后才 RCWA。


7.6 一对一口试(合上代码回答)

  1. 为什么 \(n=1.8\)、\(\lambda=526\,\mathrm{nm}\) 时耦入周期既不能是 250 nm 也不能是 500 nm?(第 1–2 章)
  2. 写出 W100 的闭合式 \(\mathbf{K}_1+\mathbf{K}_2=\mathbf{K}_\mathrm{in}\),并说明评估核里却是 \(+\mathbf{K}_\mathrm{in},-\mathbf{K}_1,-\mathbf{K}_2\)。(第 2.3 节)
  3. 齿深渐变解决的是指数抽光,还是 k 闭合?(第 4.3、5.5 节)
  4. 平行四边形优化最小化的是什么函数?它为什么不能保证 \(U_\mathrm{EB}\)?(第 4.4 节)
  5. 为什么 RCWA 和 hop 要分家?(第 5 章开头)
  6. 把 eta_ic_p1=0.73 填进规格 η 列,错在哪?(第 6.4 节)
  7. 彩虹纹公式里的 \(d\) 应该用 758 nm、353 nm 还是 319.5 nm?取决于哪一套倒格矢在对环境光做 1 阶。(第 2.6、6.2 节)

答不上来就回到对应章,不要先调参。


7.7 推荐文献(与本仓库直接相关)

经典光栅:Moharam & Gaylord 的 RCWA 系列;TIR 相位见任何标准光学手册。近眼显示综述可另找,但 k 图和 hop 才是你每天要用的工具。


回到目录:README.md