一对一讲义。对象是要把一块 表面浮雕光栅(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 条件没守住 。
配套工程文档(查数用,不讲原理):
全书一条因果链
规格 (λ, 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 玻璃也截止(倏逝)
\(k_\rho < k_0\):可以漏到空气(耦出、鬼影、彩虹纹都走这条缝)。 \(k_0 < k_\rho < n k_0\):玻璃内传播、对外 TIR。这是工作导波区。 \(k_\rho > n k_0\):在均匀玻璃里不传播。RCWA 里这些是倏逝衍射级,参与近场,不带走远场功率。
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,大约要 三十多次 弹跳才走到眼球附近。这就是为什么:
基板不能太厚:hop 太大,瞳扩采样变稀,Eyebox 出现条纹。 基板不能太薄:同样路程弹跳次数上升,每次光栅/吸收的损耗相乘,光效崩。 光栅效率必须 弱 (百分之几量级耦出),才能在多次经过时把能量摊到整个 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。真实波导还有:
玻璃体吸收(可见光通常很小,但弹跳 40 次后 \(0.999^{80}\) 量级开始疼)。 表面散射 / 雾度(规格:光栅区雾度 \(<0.2\%\))。 金属耦入的欧姆损耗(Ag 的 \(n=0.0525-3.095i\),耦入效率永远到不了 1)。 盖板–气隙–波导叠层的菲涅尔反射。W100 总厚 \(\le 0.7\,\mathrm{mm}=0.2\) CG \(+0.1\) 气隙 \(+0.4\) WG。
菲涅尔系数在 lut_Fresnel 里按 s/p 振幅反射写了;那是 无光栅区 的界面,不能代替光栅 RCWA。
停下来算一遍
证明:\(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}\) 落在这个窗口正中偏大。 用 \(\Delta=2t\tan\theta\) 估计:\(\theta=42^\circ\) 时,走完 32 mm 大约多少 hop?(\(32/0.72\approx 44\)。) 临界角再加 1° 和加 15°,hop 差多少?体会「刚过 TIR 的视场」空间采样有多密。
本仓库对照
概念 代码 \(n,t,\lambda,ER\) w100/w100_params.py入射角叠加光机姿态 couplers_coor_w100.py 中 th_inchop 矢量 同文件 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)\) 画在平面上。以原点为心:
半径 \(k_0\) 的圆:空气光锥 (截面)。圆内的态可以变成空气中的传播波。 半径 \(n k_0\) 的圆:玻璃光锥 。圆外在均匀玻璃里是倏逝的。 圆环 \(k_0TIR 导波区。
衍射是在这张图上 平移 \(\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)\) 决定:槽深、占空比、闪耀角、金属、圆角。
三个层次不要混:
能否存在这个级次(截止) :只看 \(k_\rho\) 与 \(k_0,nk_0\)。标量光栅方程就够。该级次功率多少 :必须解麦克斯韦边值问题。RCWA / FDTD / FEM。薄光栅的 \(\mathrm{sinc}\) 只是数量级估计。系统里经过多少次 :几何 + 每次的分支概率(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\),是为了:
和经典「IC → FC → OC」论文工具链对接(couplers_coor 的返回签名); 在 layout 图上画能量通道。
电磁上,一次经过 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 曲线时把它当成「槽深趋势」,不要当成每个视场的真效率。
停下来算一遍
若有人把 \(P_\mathrm{in}\) 改成 250 nm,正入射 +Kin 后 \(k_\rho/k_0= \lambda/250=2.104 > n=1.8\)。这意味着什么?(玻璃内截止,耦不进。) 若改成 500 nm,\(k_\rho/k_0=1.052\),刚过 TIR。把 FoV 边缘的 \(\sin\theta_\mathrm{air}\approx 0.25\) 按同向/反向加上去,有一侧会掉出 TIR。这就是「周期太大,边缘视场漏光」。 验证 \(\mathbf{K}_1+\mathbf{K}_2\) 与 \(\mathbf{K}_\mathrm{in}\):只用方位 71°、−59°、6° 和模长比 \(378/319.5\),不必上仿真器。 环境光正入射到耦出区,\(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.svgRCWA 抽哪一个 \(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)。矛盾是:
光机 (微显示 + 准直镜)的出瞳通常只有几毫米,放在太阳穴附近。眼睛 要在 15 mm × 7 mm(W100)里移动、还要有 14 mm 的眼距。镜片 要薄(W100 总厚 \(\le 0.7\,\mathrm{mm}\))、要透外面的世界。
没有波导时,你只能把光机直接对准眼睛,体积和重量都会回到「头戴显示器」。波导的角色是一根 透明的二维光管 :太阳穴处把准直像耦进去,在镜片里用 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 的电磁图像:扰动集中在表面几十到几百纳米,不是体分布。因此:
0 阶和多个传播级可以同时强,必须靠槽型(闪耀、金属、浅齿)把能量塞进指定级次。 对环境光也「光栅」,彩虹纹规格才会单独出现。 透过率、雾度、色度是 看世界 的指标,和 看虚像 的 η、MTF 不是同一条光路。
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 柱阵同时做转折和耦出。
代价:
级次更多,鬼影通道更多。 两个方向的效率和均匀性耦合,齿深渐变轴要选(W100 规格写 45°)。 仿真不能再假装「只经过一种 1D 槽」。
couplers_coor_w100.py 的映射是工程妥协:同一多边形登记两次,一次叫 FC(K1),一次叫 OC(K2),以便沿用论文返回签名。物理上它们是同一块区域。
3.4 系统坐标:左眼、原点在耦入中心
W100 规格与设计报告的平面图:
+y
^
| 耦出区(光栅)
| ┌─────────────┐
| │ Eyebox │
耦入 ●───────┤ 15×7 │ ----> +x
Φ3.8 | └─────────────┘
|
原点:耦入圆心。 Eyebox 中心:\((32.75,-3.00)\,\mathrm{mm}\)。 双目晶圆左右对称;代码只建左眼。 镜片偏航 \(+2.5^\circ\)、俯仰 \(+7^\circ\) 是 戴在脸上 的姿态;k-layout 和追迹当前主要叠的是 光机相对耦入 的 \(-3.23^\circ/+14^\circ\)。两套角不要加两次。
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
眼球
要点:
Ag 只覆盖耦入 。厚 \(>500\,\mathrm{nm}\),光学上当不透明衬底。耦入是反射式闪耀:光从玻璃打到树脂–银锯齿,反射衍射进 TIR。耦出区必须部分透 。看世界走 0 阶透射;看虚像走设计衍射级。透过率规格按波段给光栅区/非光栅区两套。遮镀 把 AR 做到非光栅区,对准误差 \(\le\pm 5\,\mu\mathrm{m}\),过渡 \(\le 50\,\mu\mathrm{m}\)。仿真若忽略遮镀边缘,不会出现实测里那条散射亮线。
本仓库不求解膜系,也不建 CG 的实际外形(外形是规格书图 1 示意多边形)。
3.6 光机、准直与「单绿色」的含义
JBD 0.13" 单色微 LED,中心 526 nm,带宽 24 nm。波导设计按单 λ 做 k 闭合;带宽表现为:
周期色散:\(\mathbf{K}\) 与 \(\lambda\) 无关,\(k_0\) 随 \(\lambda\) 变,边缘波长的出射角会漂。 RCWA 效率随 λ 变;真正的光度学要把光源光谱加权。
光机相对耦入有 \(14^\circ\) 俯仰,所以 FoV 中心不是基板法向 。k-layout 若按「正入射设计再指望边缘也 TIR」,会把中心放错环带。W100 把 Kin 定在 378 nm / 6°,就是按带姿态的中心视场在环内、边缘也不漏来的。
停下来想清楚
若取消 EPE、把耦出做成「一次性强耦出」,Eyebox 会缩回大约耦入孔径量级。η 可能很高,均匀性/Eyebox 规格会挂。 若用三块 1D 光栅做二维 Eyebox,通常要更大的转折区;W100 用 2D 换面积。v2 再把外包从矩形改成沿能流方向的平行四边形,是同一逻辑的几何优化。 「单绿」没有取消光栅色散,只是没有红蓝两套闭合要同时满足。
本仓库对照
概念 位置 架构映射 IC/FC/OC couplers_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 输入规格:哪些是约束,哪些是目标
把规格分成三类。
硬约束(不满足则光学结构不成立)
波长、带宽、单色/全彩。 基板 \(n,t\) 与总厚。 FoV、Eyebox、ER、耦入孔径。 全部视场必须:耦入后 TIR、转折后仍 TIR、耦出落回空气光锥且指向眼睛。
光学目标(有数、可折中)
\(\eta>900\,\mathrm{nit/lm}\),最差点 \(>800\)。 \(U_\mathrm{EB}>65\%\),\(U_\mathrm{EB258}>85\%\)。 FoV 均匀性 \(>30\%\)(分区更严)。 MTF、对比度、畸变、鬼影、彩虹纹、透过率、雾度。
工艺约束
周期/齿深公差 ±5 nm,角 ±2°。 闪耀 \(H\tan\alpha\) 与周期是否几何自洽。 压印、镀银、遮镀对准。
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 矢
要同时:
\(\mathbf{K}_1+\mathbf{K}_2=\mathbf{K}_\mathrm{in}\)(闭合,第 2 章)。 \(-\mathbf{K}_1\) 之后的能流指向 Eyebox 的另一条边(二维铺开)。 \(|\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 网格(加上光机姿态)做三次平移,丢掉任何:
中间态 \(k_z^2\le 0\)(玻璃截止),或 中间态 \(n\sin\theta\le 1\)(没锁住,会漏),或 出射态落在空气盘外(眼睛看不到)。
本仓库这一步在 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 论文(几何算一次,布局反复用):
收集必须被光栅覆盖的点:Eyebox 边界、FoV 投影角点、沿 TIR hop 走进 eyebox 前的 bounce(coverage.py)。 在边方向 \((u,v)\) 和余量上搜索平行四边形,包住这些点,面积最小,且不撞耦入清空间、不越镜片包络(optimize_og.py)。 面积接近最小时,优先边贴近 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.pyk 扫描 w100/couplers_coor_w100.py槽型 RCWA w100_v2/rcwa_lut.py覆盖点 w100_v2/coverage.py平行四边形搜索 w100_v2/optimize_og.py为何平行四边形 docs/v2/00_libraries.md 末节
下一章把「算效率」和「把效率铺到 Eyebox 上」分成两个仿真问题。
第 5 章 仿真:电磁一次,几何一万次
波导仿真必须拆成两层。混在一个「大 FDTD」里既算不动(厘米级基板 × 纳米槽),也看不清误差从哪来。
层 问题尺度 方法 输出 微纳 一个(或几个)周期,数百 nm RCWA / FDTD / FEM 各衍射级效率 \(\eta_m(\lambda,\theta,\phi,\mathrm{pol},H)\) 系统 数十 mm 的 TIR 折线 射线 / beam / 分段解析 hop Eyebox 照度、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 核同一思想):
在耦入圆盘上均匀抽点(面积均匀:半径用 \(\sqrt{\xi}\))。 对该 FoV 查耦入效率,\(w\leftarrow\eta_\mathrm{IC}(\theta)\)。 重复:位置 \(+=\boldsymbol{\Delta}(\mathbf{k})\)(一次上下表面往返)。 若尚未折转且点落入 OG:把 \(\mathbf{k}\) 换成 −K1 后的态,权重乘 \(\eta_{K1}(H)\),标记 folded。 若已折转且仍在 OG:把一部分权重 \(\eta_\mathrm{out}(H)\) 记到 Eyebox 图上,剩余乘 \(1-\eta_\mathrm{out}\),沿折转 hop 继续。 出界或 \(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 如何把两层接对
接口契约:
级次定义一致 (第 2 章符号)。LUT 的 \(\eta_{-1}\) 必须对应 hop 用的那根 \(\mathbf{K}\)。坐标系一致 :RCWA 的 \(\theta,\phi\) 相对光栅矢量还是相对基板 \(x\)?meent 的 phi=0 表示入射面沿周期方向。W100 的 Kin 在 6°,严格做法是把入射方位转到光栅坐标再查表。当前 LUT 没做这步旋转。能量守恒 :分支概率之和 \(\le 1\)。评估里 eta_k1 下限 0.02、剩余乘 max(1-e_out, 0.05),是防止权重归零的工程地板,会 人为提高 远端通量。读相对均匀性时要知道有这层地板。波长 :LUT 单点 526 nm;带宽 24 nm 未积分。
5.5 建议的收敛与验证清单(设计时用,本包尚未全做)
RCWA:提高 FTO,看设计级次变化 \(<1\%\) 相对。 闪耀楼梯:8 层 vs 16 层。 2D:\(\theta,\phi\) 在 FoV 对应的玻璃角锥上抽 20–50 个点,而不是单点 42°。 系统:加倍 n_ic 与 bounce,看 E5 通量稳定。 与无光栅菲涅尔路径对比:OG 外不应记虚像通量。 与设计报告 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)RCWA w100_v2/rcwa_lut.py → output/W100_v2/lut_meent_w100.npzhop 评估 w100_v2/evaluate.pyv1 GPU w100/cuda/w100_trace.cuLUT 曲线图 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:
flux[i,j]:该 FoV 在 hop 模型里累进 OG 且靠近 Eyebox x 范围的相对通量。U_FOV_mean:每个 x 切片上 min/max 再平均。e9:把 hop 落点直方图在 E 点附近取 patch 均值。
相对通量不是亮度。 没有把光机流明、眼睛立体角、光谱、透过率链路乘进去。可以比较「改齿深前后 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\) 需要:
光机出瞳亮度分布(角度、偏振、光谱)。 耦入孔径接收的流明。 每次光栅事件的 RCWA 效率(全角度、光谱加权)。 弹跳中的吸收、Ag 损耗、散射。 耦出后进入 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 是成像系统的对比度传递。波导贡献来自:
多 bounce 的程差与相干(TIR 相位、光栅相位)。 有限孔径衍射。 鬼影叠在主像上拉低对比。 色散(带宽 24 nm)造成的角模糊。
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 的光度学 本程序重现
符合性表应三列:规格 | 设计报告 | 本程序能评的量 。空着的格子保持空,不要填相对通量。
停下来写验收计划
假设明天量产来片。你至少要:
测 E1–E9 的 L(nit)和光机 lm,算 η 与 \(U_\mathrm{EB}\)。 中心/边缘 MTF @ 3.4 lp/deg。 光栅区 0–30° 透过率四段光谱。 暗室里扫环境光看彩虹纹临界角。 对照 SEM:周期、H、DC、闪耀角是否在 ±5 nm / ±2° 内。
仿真的职责是在这五条之前 预测哪一条会挂、往哪调 。本仓库今天能帮忙的主要是第 5 条的几何/k 和第 1 条的趋势;第 2–4 条需要加物理。
本仓库对照
指标 实现 TIR-valid、相对 U、E9 w100_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 代码阅读顺序(约两小时)
不要按文件名字母序。按光子的人生:
w100/w100_params.py — 每一个数的出处。养成「改参数先看 Cite」的习惯。w100/couplers_coor_w100.py — 入射角、三次 k 平移、lut_gap。在 kk 循环里打打印,看中心视场的 th_out_ic 是否约 50°。w100_v2/coverage.py — 约束点从哪来。注意 hop 用的是 IC 的 gap ,不是 FC 的 gap。w100_v2/geometry.py + optimize_og.py — 基变换拟合;搜索中心在 K1/K2。w100_v2/rcwa_lut.py — _blaze_ucell 楼梯、meent call_mee、抽哪一个 order。w100_v2/evaluate.py — 状态机。把 folded 分支画成流程图,会立刻看到「记分条件」比「在 OG 内」更窄(还要求 \(x\) 靠近 Eyebox)。
v1 CUDA 可以后看。它验证同一 hop 思想,不包含平行四边形与 meent。
7.4 已知缺口清单(读报告时钉在手边)
E1–E9 / \(U_\mathrm{EB}\) 本次无光。 折转 hop 与记分窗不对齐。修法:在评估里把每条射线的 \((x,y)\) 轨迹画出来;用 FC 的 gap 生成第二套覆盖点再优化 OG;或放宽记分窗做诊断(诊断用,不能当验收)。2D RCWA 单角 42°、FTO=3。 当趋势,不当绝对值。级次符号两套习惯。 几何 +Kin 与 RCWA −1。改闪耀方向前先对齐。齿深轴: 规格 45°,v2 评估用平行四边形对角线。效率地板 0.02 / 0.05 会抬高均匀性。无 MTF / 膜系 / 光谱积分 / nit 校准。 镜片外轮廓示意。 面积优化的 bbox 不是最终 CAD。闪耀几何自洽: 218 nm × tan65° > 378 nm。原设计报告自身未全面达标 (E7 η、部分 U_FOV)。仿真对齐报告不等于对齐规格书。
7.5 若你要在本仓库上继续设计
优先顺序与第 4.5 节相同,落到具体改动:
你的目标 动哪里 不要动 让 E 点接到光 evaluate.py 记分与 hop 方向;必要时 coverage.py 改用折转 gapPIN_NM更可信的效率曲线 rcwa_lut.py:扫 θ/φ、提高 FTO、2D 级次与 k 一一对应用 v1 sinc LUT 去报 η 更小 OG optimize_og.py 的 margin、bbox;更紧的覆盖点为了面积丢掉 Eyebox 角 均匀性 齿深图 depth_on_para / 规格 45° 轴;LUT 的 \(\eta(H)\) 先改 k GPU 加速平行四边形 把点包含写进 w100_trace.cu Numba JIT 像质 新模块:相位、错误级次、彩虹纹 RCWA 假装 hop 权重是 MTF
改周期是最后手段。若必须改:先重跑第 2 章的闭合算术,再 couplers_coor 扫 TIR-valid,最后才 RCWA。
7.6 一对一口试(合上代码回答)
为什么 \(n=1.8\)、\(\lambda=526\,\mathrm{nm}\) 时耦入周期既不能是 250 nm 也不能是 500 nm?(第 1–2 章) 写出 W100 的闭合式 \(\mathbf{K}_1+\mathbf{K}_2=\mathbf{K}_\mathrm{in}\),并说明评估核里却是 \(+\mathbf{K}_\mathrm{in},-\mathbf{K}_1,-\mathbf{K}_2\)。(第 2.3 节) 齿深渐变解决的是指数抽光,还是 k 闭合?(第 4.3、5.5 节) 平行四边形优化最小化的是什么函数?它为什么不能保证 \(U_\mathrm{EB}\)?(第 4.4 节) 为什么 RCWA 和 hop 要分家?(第 5 章开头) 把 eta_ic_p1=0.73 填进规格 η 列,错在哪?(第 6.4 节) 彩虹纹公式里的 \(d\) 应该用 758 nm、353 nm 还是 319.5 nm?取决于哪一套倒格矢在对环境光做 1 阶。(第 2.6、6.2 节)
答不上来就回到对应章,不要先调参。
7.7 推荐文献(与本仓库直接相关)
Zhang 等,Fast evaluation of waveguide AR displays… ,Opt. Express 584116 。本包 v1 GPU 追迹的来源。 同组 beam tracing 优化,Opt. Express 570463 。v2「几何一次、布局多次」的来源。 meent:arXiv:2406.12904;仓库用 0.13.2 NumPy backend。 规格与伯恩/逸文设计报告 PDF,提取见 docs/W100_spec_extracted.md。
经典光栅:Moharam & Gaylord 的 RCWA 系列;TIR 相位见任何标准光学手册。近眼显示综述可另找,但 k 图和 hop 才是你每天要用的工具。
回到目录:README.md
由 docs/book 各章汇编。公式通过 CDN 加载 KaTeX;打印时左侧目录会隐藏。