光线追迹基础理论:几何光学基础、斯涅尔定律、反射与折射模型、光线与表面的交互
各位好,我是老张。干光学仿真这行十几年了,今天咱们来聊聊光线追迹最底层的那些东西。说白了,光线追迹就是模拟光怎么走、怎么撞、怎么拐弯。你想想看,没有这些基础,后面那些复杂的非序列系统根本玩不转。
我个人习惯,每次带新人时都会先问一句:「光到底是什么?」嗯,这个问题物理学家吵了几百年。但在工程领域,我们只关心一件事——光怎么传播。几何光学给了我们一个简单粗暴的答案:光走直线,除非它碰到什么东西。
几何光学的基本假设
几何光学有三大假设,我管它叫「三不原则」:
- 光沿直线传播——在均匀介质里,光不走弯路。我在项目中遇到过有人把透镜间距算错,结果光线路径全偏了,最后发现是介质折射率没设均匀。
- 独立传播——两束光交叉而过,互不干扰。说白了就是各走各的,别想太多。
- 可逆性——光从A到B的路径,反过来从B到A完全一样。这个特性在调试系统时特别有用,我经常用它来反推光源位置。
这些假设在大多数工程场景下都够用。但你要记住,它们只是近似。真正做高精度仿真时,衍射效应会跳出来打脸。
斯涅尔定律:光拐弯的数学
光从一种介质进入另一种介质时,为什么拐弯?答案就在斯涅尔定律里。公式很简单:
n₁ · sin(θ₁) = n₂ · sin(θ₂)
其中 n 是折射率,θ 是光线与法线的夹角。我刚开始学的时候总觉得这公式太简单,后来才发现它背后藏着大学问。
关键点:斯涅尔定律只适用于各向同性介质。如果你碰到液晶这类各向异性材料,这公式就不灵了。我曾经在项目中吃过这个亏,仿真结果跟实测差了十万八千里,最后发现是材料属性没设对。
为什么会这样?因为光在不同介质中的速度不一样。折射率其实就是光在真空中速度与在介质中速度的比值。你想想看,光速变了,方向自然要调整。
反射模型:光怎么弹回来
反射分两种:镜面反射和漫反射。做光线追迹时,这两种模型都得掌握。
| 反射类型 | 特点 | 典型应用 |
|---|---|---|
| 镜面反射 | 入射角等于反射角,方向确定 | 镜子、抛光表面 |
| 漫反射 | 向各个方向均匀反射 | 粗糙表面、白墙 |
| 混合反射 | 镜面+漫反射的组合 | 大多数真实表面 |
镜面反射的数学很简单:反射角等于入射角。但实际工程中,几乎没有完美的镜面。我记得有一次做汽车大灯仿真,灯杯表面抛光得再好,还是会有少量漫反射成分。忽略这一点,配光结果就不准。
我的经验:在非序列追迹中,表面粗糙度参数一定要设对。我曾经因为偷懒用了默认值,结果仿真出来的光斑形状跟实测完全对不上。后来老老实实测了表面粗糙度,重新跑一遍,数据就吻合了。
折射模型:光怎么穿过去
折射比反射复杂一些。除了斯涅尔定律,还要考虑透射率。光不是全部穿过去的,有一部分会被反射回来。这个比例由菲涅耳公式决定。
菲涅耳公式长这样:
R = [(n₁cosθ₁ - n₂cosθ₂) / (n₁cosθ₁ + n₂cosθ₂)]²
嗯,看着有点吓人。但实际用的时候,大多数光学软件都帮你算好了。你只需要告诉它表面是什么材料、什么镀膜就行。
注意:当光从光密介质射向光疏介质时,如果入射角大于临界角,会发生全反射。这个现象在光纤通信里是宝贝,但在透镜设计中可能是灾难。我见过有人把棱镜角度算错,结果本该透射的光全反射回去了,整个系统直接报废。
光线与表面的交互:追迹的核心
光线追迹说白了就是不断重复三件事:
- 找交点——光线跟哪个表面撞上了
- 算方向——反射还是折射,往哪走
- 更新状态——记录能量、路径、相位等信息
这个过程在非序列系统中尤其重要。因为光线可能跟多个表面交互,顺序还不固定。我刚开始做非序列追迹时,总习惯用序列思维去想问题,结果经常漏掉一些意料之外的交互路径。
下面这张图展示了光线追迹的核心流程:
这张图把追迹过程拆成了几个关键步骤。你注意看,反射和折射之后还有一条虚线箭头指回「找交点」——这就是非序列追迹的循环本质。一条光线可能跟多个表面交互,直到被吸收或跑出系统边界。
实际工程中的注意事项
说了这么多理论,最后聊点实际的。做光线追迹时,有几个坑我踩过,你们注意避开:
- 精度问题——追迹步长设得太大会漏掉细节,设得太小计算量爆炸。我一般先跑一个粗网格看看趋势,再局部加密。
- 边界处理——光线刚好擦过表面边缘时,很多软件会报错。我的做法是给表面加一个微小的容差。
- 能量守恒——反射+折射+吸收的能量必须等于入射能量。如果仿真结果能量不守恒,八成是模型有问题。
一句话总结:几何光学给了我们追迹的规则,斯涅尔定律给了我们拐弯的公式,反射折射模型给了我们交互的算法。把这些串起来,就是光线追迹的全部秘密。剩下的,就是多跑、多试、多踩坑。
好了,这一章就聊到这儿。下一章咱们会深入非序列系统的建模方法,到时候见。
公众号:蓝海资料掘金营,微信deep3321