AR SRG 波导讲义复现报告
对照 docs/book 第 1–6 章的闭式验算。参数:λ = 526 nm,n = 1.8,t = 0.4 mm。对照 45/45 项通过。
本报告核对的是讲义里的解析关系:波数、全反射、hop、三根光栅矢量的闭合、视场窗口、常数耦出效率为什么盖不住 Eyebox,以及均匀性和彩虹纹的定义。
第 7–8 节是这次实际跑出来的 meent RCWA 与 CUDA 追迹。设计报告上的 nit/lm 仍只用来核对均匀性定义,不能把相对通量标成这个单位。
结论
- 中心视场经过 +Kin、−K1、−K2 后回到空气态,残差约 2.6×10−6 k0。三根矢量若全部相加,残差约 2.8 k0,光出不去。
- 12×4 显示视场全部满足:耦入后与转折后落在 TIR 环内,耦出落在空气光锥内。
- 正入射周期窗口是 292–526 nm。加上 ±15° 视场(532 nm 练习)后收到约 345–423 nm。
- 耦出效率若固定在 4%,约 17 次衰减后抽取减半,0.7 mm 的 hop 只覆盖约 12 mm,短于 15 mm Eyebox。
- 按设计报告九点,UEB = 71.61%,中线 UEB258 = 95.03%。E7 的光效和 E3、E7 的视场均匀性没有达到讲义转述的规格门槛。
- 环境光 1 级用 319.5 nm 或 353 nm 时,正观察方向在空气中截止;用 758 nm 则在约 40° 入射就会出现。彩虹纹公式里的 d 不能随便拿长周期。
与讲义数值的对照
| 节 | 量 | 本笔记 | 讲义 | 差值 | 结果 |
| 1.1 | k0 | 0.0119452 | 0.011945 | 2.192e-07 | 通过 |
| 1.1 | n*k0 | 0.0215014 | 0.021501 | 3.946e-07 | 通过 |
| 1.1 | λ/n | 292.222 | 292.2 | 0.0222222 | 通过 |
| 1.2 | 入射极角 θ | 14.3397 | 14.34 | -2.931e-04 | 通过 |
| 1.2 | 方位角 φ | 102.754 | 102.8 | -0.0463354 | 通过 |
| 1.2 | sinθ | 0.24767 | 0.248 | -3.295e-04 | 通过 |
| 1.2 | 玻璃折射角 | 7.90869 | 7.9 | 0.00868689 | 通过 |
| 1.3 | 临界角 | 33.749 | 33.749 | -1.140e-05 | 通过 |
| 1.4 | hop@34° | 0.539607 | 0.54 | -3.932e-04 | 通过 |
| 1.4 | hop@42° | 0.720323 | 0.72 | 3.232e-04 | 通过 |
| 1.4 | hop@50° | 0.953403 | 0.95 | 0.00340287 | 通过 |
| 1.4 | hop@50.3° | 0.963605 | 0.96 | 0.00360466 | 通过 |
| 1.4 | 32mm/hop(42°) | 44.4245 | 44 | 0.424501 | 通过 |
| 1练习 | 窗口下沿 λ/n | 292.222 | 292.2 | 0.0222222 | 通过 |
| 1练习 | 窗口上沿 λ | 526 | 526 | 0 | 通过 |
| 2.1 | 矩形点阵等效周期 | 320.001 | 320 | 0.00118505 | 通过 |
| 2.4 | |Kin| | 0.0166222 | 0.016622 | 1.834e-07 | 通过 |
| 2.4 | |K1| | 0.0196657 | 0.019666 | -3.183e-07 | 通过 |
| 2.4 | K1+K2 方位 | 6 | 6 | -4.441e-15 | 通过 |
| 2.4 | |K1+K2|-|Kin| | 3.091e-08 | 3.000e-08 | 9.097e-10 | 通过 |
| 2.3 | 夹角 K1 相对 Kin | 65 | 65 | 0 | 通过 |
| 2.3 | 夹角 Kin 相对 K2 | 65 | 65 | 0 | 通过 |
| 2.4 | 正入射 |Kin|/k0 | 1.39153 | 1.392 | -4.656e-04 | 通过 |
| 2.4 | 中心视场 +Kin 后 kρ/k0 | 1.38443 | 1.384 | 4.306e-04 | 通过 |
| 2.4 | −K1 后 kρ/k0 | 1.41324 | 1.41 | 0.00323534 | 通过 |
| 2.4 | −K2 后 kρ/k0 | 0.24767 | 0.248 | -3.298e-04 | 通过 |
| 2.3 | 闭合残差 / k0 | 2.588e-06 | 2.600e-06 | -1.238e-08 | 通过 |
| 2.4 | 中心视场耦入后 θ_g | 50.2757 | 50.28 | -0.00433941 | 通过 |
| 2.3 | 错误符号残差 | 2.7649 | 2.8 | -0.035099 | 通过 |
| 2.4 | 正入射导波角 | 50.6308 | 50.7 | -0.0692006 | 通过 |
| 2练习 | 250 nm 的 kρ/k0 | 2.104 | 2.104 | 0 | 通过 |
| 2练习 | 500 nm 的 kρ/k0 | 1.052 | 1.052 | 0 | 通过 |
| 2练习 | 彩虹级次 sinθ | 1.64632 | 1.65 | -0.00367762 | 通过 |
| 2.4 | TIR 有效比例 | 1 | 1 | 0 | 通过 |
| 3.4 | FoV_x | 24.1976 | 24.2 | -0.00241795 | 通过 |
| 3.4 | FoV_y 全幅 | 18.2665 | 18.27 | -0.00347758 | 通过 |
| 3.4 | FoV_y 显示 | 7.66473 | 7.66 | 0.00472797 | 通过 |
| 4练习 | ±15° 窗口下沿 | 345.19 | 345.2 | -0.0101647 | 通过 |
| 4练习 | ±15° 窗口上沿 | 422.618 | 422.6 | 0.0183279 | 通过 |
| 4.3 | 闪耀水平跨距 | 467.503 | 467.5 | 0.00250867 | 通过 |
| 5练习 | 半功率衰减次数 | 16.9797 | 17 | -0.020252 | 通过 |
| 5练习 | 对应路程 | 11.8858 | 12 | -0.114176 | 通过 |
| 6.3 | U_EB | 0.715746 | 0.7161 | -3.538e-04 | 通过 |
| 6.3 | U_EB258 | 0.95022 | 0.9503 | -8.024e-05 | 通过 |
| 6.5 | MTF 频率估计 | 3.30612 | 3.3 | 0.00611546 | 通过 |
图
面内波矢分成空气光锥、TIR 环和玻璃截止。工作导波必须落在中间那一环。
TIR 不损失能量,但 s/p 相位差随角度变化。多次弹跳会改变偏振椭圆。
刚过临界角时 hop 约 0.54 mm;50° 时接近 0.95 mm。同一段路程,浅角采样更密。
内圆是空气光锥,外圆是玻璃光锥。橙点在 TIR 环内,紫点落回空气盘,且与蓝点重合。
左、中两幅的数值都大于 1,右幅小于 1。这只说明 k-layout 对这个视场几何可行。
Eyebox 中心在耦入右侧 32.75 mm、下方 3 mm。斜投影说明光栅覆盖要比 Eyebox 本身更大。
半视场为 0 时窗口约 296–532 nm;±15° 时收到约 345–423 nm。
斜面若无限延伸要走约 468 nm 才落地。一个 378 nm 周期结束时齿顶仍高于基板。
蓝线在约 12 mm 处已降到起点的一半。橙线靠逐渐加大 η,把抽取摊在 15 mm 上。
这是几何上的效率日程,不是某个角度的 RCWA。浅齿在近端少漏,深齿在远端把剩余能量取出。
左图是光度学报告值,右图是视场均匀性。红柱低于讲义写的 30% 门槛。这些数字来自原设计报告,不是本笔记的光追。
319.5 nm 与 353 nm 在小观察角没有实数入射角,曲线空着。758 nm 在 40° 附近就会衍射进眼睛。
第 7–8 节 全流程仿真
第二版全流程(平行四边形 + meent RCWA + hop)
运行日志
optimize OG parallelogram ...
best u=6.00 v=-59.00 area=357.19 ratio=1.093 n=34
meent RCWA LUT (may take 1–3 min) ...
wrote D:\Mac\Simulation\output\W100_v2\lut_meent_w100.npz
saved D:\Mac\Simulation\output\W100_v2\01_product_parallelogram_og.png
saved D:\Mac\Simulation\output\W100_v2\02_nano_ic_oc.png
saved D:\Mac\Simulation\output\W100_v2\03_k_layout.png
saved D:\Mac\Simulation\output\W100_v2\04_rcwa_lut.png
saved D:\Mac\Simulation\output\W100_v2\06_og_area_rank.png
evaluate layout ...
saved D:\Mac\Simulation\output\W100_v2\05_eval_fov_e9.png
wrote D:\Mac\Simulation\output\W100_v2\eval_metrics.txt
wrote D:\Mac\Simulation\docs\v2\W100_v2_design_report.md
done v2
指标文件
W100 v2 evaluation — meent RCWA LUT + parallelogram OG
OG u_deg=6.000 v_deg=-59.000 margin=0.3
OG area_mm2=357.191 v1_area=326.912 ratio=1.0926
candidates=34 cover_pts=1236 valid_fov=60/60
backend=cpu TIR-hop + meent LUT + parallelogram OG
TIR_valid=1.0000 flux_sum=0.11583
U_EB=0.0000 U_EB258=0.0000 U_FOV_mean=0.7794
E9 relative flux = E1:0, E2:0, E3:0, E4:0, E5:0, E6:0, E7:0, E8:0, E9:0
Report eta nit/lm still from design report p.8 = E1:831.1, E2:994.5, E3:833.2, E4:837.1, E5:1046.6, E6:909.7, E7:749.1, E8:998.1, E9:913.4
Report U_EB=0.7161 U_EB258=0.9503
LUT meta: {"solver": "meent 0.13.2 numpy RCWA", "lambda_nm": 526.0, "fto_1d": 10, "fto_2d": [3, 3], "note": "耦入查反射 −1 阶(闪耀能量在 −1);耦出 2D 为单角 42° 抽样,级次映射是工程对应而非完整锥面扫描。", "ic_logs": ["theta=18.0 p1=0.7302 r0=0.6244", "theta=26.0 p1=0.7326 r0=0.5495", "theta=34.0 p1=0.7057 r0=0.5006", "theta=42.0 p1=0.6814 r0=0.5106", "theta=50.0 p1=0.6549 r0=0.5354"]}
Relative flux is NOT nit/lm. RCWA LUT is W100-specific (meent), not the paper RGB Drive tables.
产品平面:耦入圆、v2 平行四边形、v1 矩形虚线、Eyebox 与覆盖点。
微纳:左为截断闪耀加银,右为耦出二维柱单胞。
k 闭合:空气盘、玻璃盘,以及 K1+K2 与 Kin。
本次 meent RCWA:耦入效率随角度,耦出效率随齿深。
hop 评估:视场相对通量与 E1–E9。落点为空时均匀性是 0。
平行四边形候选的面积排序。交付外形不一定是全局最小。
第一版全流程(nvcc sm_120 + CUDA hop)
运行日志
----- build_cuda.bat -----
NVCC="C:\Program Files\NVIDIA GPU Computing Toolkit\CUDA\v13.1\bin\nvcc.exe"
nvcc: NVIDIA (R) Cuda compiler driver
Copyright (c) 2005-2025 NVIDIA Corporation
Built on Fri_Nov__7_19:25:04_Pacific_Standard_Time_2025
Cuda compilation tools, release 13.1, V13.1.80
Build cuda_13.1.r13.1/compiler.36836380_0
Compiling w100_trace.cu -arch=sm_120 ...
w100_trace.cu
w100_trace.cu
OK cubin=cuda\w100_trace.cubin
OK ptx=cuda\w100_trace.ptx
----- w100/run_all.py -----
[cuda] used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120
[cuda] kernel=smoke_fill grid=(16,1,1) block=(256,1,1) time_ms=0.301
[cuda] smoke d2h ok out[0]=1.0 out[-1]=4096.0 sum=8390656
[backend] cuda | backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.301
backend=cuda sm_120
saved D:\Mac\Simulation\output\W100\01_product_layout_top.png
saved D:\Mac\Simulation\output\W100\02_product_side_eyebox.png
saved D:\Mac\Simulation\output\W100\03_product_isometric.png
saved D:\Mac\Simulation\output\W100\04_nano_incoupler_blaze.png
saved D:\Mac\Simulation\output\W100\05_nano_outcoupler_2d.png
saved D:\Mac\Simulation\output\W100\06_nano_depth_gradient.png
saved D:\Mac\Simulation\output\W100\07_k_layout.png
saved D:\Mac\Simulation\output\W100\08_stack_coatings.png
saved D:\Mac\Simulation\output\W100\09_report_sim_vs_spec.png
saved D:\Mac\Simulation\output\W100\10_fov_definition.png
all product/nano figures written to D:\Mac\Simulation\output\W100
saved D:\Mac\Simulation\output\W100\12_k_samples_from_api.png
[cuda] used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120
[cuda] kernel=smoke_fill grid=(16,1,1) block=(256,1,1) time_ms=0.004
[cuda] smoke d2h ok out[0]=1.0 out[-1]=4096.0 sum=8390656
BACKEND cuda backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.004
backend=cuda sm_120
[cuda] used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120
[cuda] kernel=w100_trace grid=(38,1,1) block=(256,1,1) threads=9600 time_ms=0.065
[cuda] d2h flux_sum=1.38782 eb_sum=1.38782 flux_nz=48 eb_nz=4429
backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 grid=(38, 1, 1) block=(256, 1, 1) kernel_ms=0.065
[nvidia-smi] python on GPU:
58332, C:\Users\18000045\AppData\Roaming\uv\python\cpython-3.11.15-windows-x86_64-none\python.exe, [N/A]
saved D:\Mac\Simulation\output\W100\11_eval_fov_eyebox.png
saved D:\Mac\Simulation\output\W100\13_w100_scalar_lut.png
saved D:\Mac\Simulation\output\W100\16_e9_report_vs_cpu_model.png
{'backend': 'cuda', 'backend_detail': 'backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.004', 'gpu_name': 'NVIDIA GeForce RTX 5080', 'compute_capability': '12.0', 'U_EB_geom': 0.05631145492050439, 'U_EB258_geom': 0.7654767421300361, 'U_FOV_geom': 0.002382965511160766, 'frac_TIR_valid_FOV': 1.0, 'note': 'CUDA sm_120 TIR-hop + scalar LUT; NOT RCWA; relative flux only', 'compile_arch': 'sm_120', 'kernel_time_ms': 0.06470400094985962, 'grid': (38, 1, 1), 'block': (256, 1, 1), 'e9_geom': {'E1': 0.0002830603887559846, 'E2': 0.00014292256848420947, 'E3': 2.0981362322345376e-05, 'E4': 0.00037259492499288173, 'E5': 0.00011358834395650774, 'E6': 6.406090513337403e-05, 'E7': 0.00023556047555757685, 'E8': 0.00014838902046903968, 'E9': 3.4796708496287466e-05}}
saved image quality figures
import official couplers_coor OK
n_g 1.9 lmd nm [465 532 630]
Lambda_ic/fc/oc nm 388 315.1082336236523 388
phi_ic/fc/oc deg [ -38. 90. -142.]
saved official demo layout
done. outputs -> D:\Mac\Simulation\output\W100
指标文件
W100 evaluation — CUDA sm_120 TIR hop + W100 scalar LUT (NOT official RCWA)
backend = cuda sm_120
used_device = NVIDIA GeForce RTX 5080 CC=12.0
compile_arch = sm_120
kernel = w100_trace grid=(38, 1, 1) block=(256, 1, 1) time_ms=0.06470400094985962
detail = backend=cuda sm_120 used_device=NVIDIA GeForce RTX 5080 CC=12.0 compile_arch=sm_120 smoke grid=(16, 1, 1) block=(256, 1, 1) time_ms=0.004
U_EB (model relative) = 5.63% spec >= 65% ; REPORT 71.61%
U_EB258 (model relative) = 76.55% spec >= 85% ; REPORT 95.03%
U_FOV (model relative) = 0.24% spec >30% / worst>25%
TIR-valid FoV fraction = 100.0%
--- Design-report ORIGINAL sim (p.8), not this code ---
Report eta nit/lm E1-E9 = E1:831.1, E2:994.5, E3:833.2, E4:837.1, E5:1046.6, E6:909.7, E7:749.1, E8:998.1, E9:913.4
Report U_FOV E1-E9 = E1:0.4584, E2:0.4823, E3:0.2258, E4:0.3436, E5:0.4899, E6:0.2659, E7:0.1757, E8:0.2961, E9:0.2578
Report eta vs spec: min=749.1 (need worst>800); E5=1046.6 (need >900)
This model does NOT output nit/lm.
W100 image-quality GEOMETRY (not imaging, not RCWA, not GPU)
theta_crit vertical=24.09 deg, horizontal=39.09 deg
Pout_x 758 nm: i_v=16.60290301747601 deg, i_h=3.631475282157651 deg (spec V>=89.0, H>80.0)
Pout_y 353 nm: i_v=None deg, i_h=59.259632879393536 deg (spec V>=89.0, H>80.0)
Λ_eq 319.5 nm: i_v=None deg, i_h=None deg (spec V>=89.0, H>80.0)
ghost_k air_FOV_in_air=1.0
ghost_k after_IC_in_TIR=1.0
ghost_k after_-K1_in_TIR=1.0
ghost_k after_out_in_air=1.0
ghost_k after_out_in_TIR=0.0
ghost_k note=正确路径:IC 后应 TIR,耦出后应回到空气锥。若 after_out_in_air 高则级次闭合。非成像鬼影测试。
00_official_demo_layout.png:论文官方示例片的 IC/FC/OC 轮廓,不是 W100。
01_product_layout_top.png:W100 产品平面:耦入、二维耦出、Eyebox。
02_product_side_eyebox.png:侧视叠层与眼球。
03_product_isometric.png:轴测。
04_nano_incoupler_blaze.png:耦入闪耀截面。
05_nano_outcoupler_2d.png:耦出二维柱。
06_nano_depth_gradient.png:齿深渐变。
07_k_layout.png:k 闭合图。
08_stack_coatings.png:镀膜叠层。
09_report_sim_vs_spec.png:设计报告仿真与规格门槛。
10_fov_definition.png:视场定义。
11_eval_fov_eyebox.png:CUDA 追迹的视场与 Eyebox 相对通量。
12_k_samples_from_api.png:场景 API 的 k 采样。
13_w100_scalar_lut.png:v1 标量 LUT。这不是 RCWA,不能标成 nit/lm。
14_rainbow_ghost_geometry.png:彩虹纹临界角与级次通道的几何。
15_mtf_spec_only.png:MTF 规格曲线。hop 模型没有相位,这里只画规格。
16_e9_report_vs_cpu_model.png:设计报告光效与本模型相对通量。单位不同,只看趋势。