第2章:光源定义与设置——从点亮第一根光线开始
做非序列光线追迹,第一步就是定义光源。说白了,光源就是整个系统的“起点”。你光源设错了,后面追迹再精确也是白搭。我记得刚接触Code V那会儿,就因为在点光源和面光源之间选错了类型,折腾了整整一个下午。
这一章,我们就把光源的定义与设置彻底讲透。包括点光源、面光源、准直光源的区别,波长与功率怎么配,还有偏振属性怎么玩。
2.1 光源类型:点、面、准直
Code V的非序列模式里,光源分三大类。我习惯把它们比作“手电筒”、“日光灯”和“激光笔”。你想想看,这三样东西的发光方式完全不同,对吧?
| 光源类型 | 英文名称 | 核心特征 | 典型应用场景 |
|---|---|---|---|
| 点光源 | Point Source | 从空间一点向所有方向发光 | LED模拟、小孔径照明、光纤端面 |
| 面光源 | Surface Source | 从某个几何面(矩形、圆形、环形)发光 | 背光模组、大面积照明、显示屏 |
| 准直光源 | Collimated Source | 所有光线平行出射,无发散角 | 激光系统、干涉仪、平行光管 |
2.1.1 点光源
点光源是最基础的光源类型。它在Code V里用 SOURCE POINT 命令定义。你只需要指定位置坐标,光线就会从那个点向四面八方发射。
! 定义一个位于 (0, 0, 0) 的点光源
SOURCE POINT
POSITION 0 0 0
RAYS 10000
WAVELENGTH 0.55
POWER 1.0
END
这里有个坑——RAYS 参数控制的是追迹光线数量。我刚开始做项目时,为了省时间只设了100条光线,结果照度分布图全是锯齿。后来才明白,非序列追迹本质是蒙特卡洛方法,光线数量不够,统计噪声就大。一般建议至少5000条起步,复杂系统要上万条。
ANGULAR_DISTRIBUTION LAMBERTIAN 参数。
2.1.2 面光源
面光源比点光源复杂一些。它需要定义发光面的形状和尺寸。Code V支持矩形、圆形、环形、多边形等多种面光源。
! 定义一个矩形面光源,尺寸 10mm x 5mm
SOURCE RECTANGLE
POSITION 0 0 0
WIDTH 10
HEIGHT 5
RAYS 20000
WAVELENGTH 0.55
POWER 1.0
END
面光源的发光方向默认是法线方向。但你可以通过 ANGLE 参数让它倾斜,或者用 DIVERGENCE 参数控制发散角。
POWER 是总功率,不是单位面积功率。如果你把面光源面积放大一倍,单位面积的辐照度会下降一半。我曾经在背光模组设计里吃过这个亏,照度怎么调都不对,最后发现是功率理解错了。
2.1.3 准直光源
准直光源,说白了就是所有光线都平行。它没有发散角,光线方向完全一致。这在激光系统里用得最多。
! 定义一个准直光源,光束直径 5mm
SOURCE COLLIMATED
POSITION 0 0 0
DIAMETER 5
DIRECTION 0 0 1
RAYS 5000
WAVELENGTH 0.6328
POWER 0.5
END
准直光源的 DIRECTION 参数很关键。它决定了光线传播方向。默认是Z轴正方向,但你可以改成任意方向。我做过一个激光三角测距项目,需要把激光倾斜入射到被测物体上,就是靠调这个参数实现的。
2.2 波长与功率设置
光源的波长和功率,是光学系统最核心的两个物理量。波长决定了光与物质的相互作用方式,功率决定了系统的能量预算。
2.2.1 波长设置
Code V支持单波长和多波长两种模式。单波长用 WAVELENGTH 参数,单位是微米。多波长用 WAVELENGTHS 列表。
! 单波长:0.55μm(绿光)
WAVELENGTH 0.55
! 多波长:红绿蓝三色
WAVELENGTHS 0.45 0.55 0.65
WEIGHTS 1.0 1.0 1.0
多波长模式下,WEIGHTS 参数控制每个波长的相对权重。如果你模拟的是白光LED,权重就按光谱功率分布来设。我做过一个投影系统,需要精确匹配D65标准光源,权重配比调了十几轮才满意。
| 波长 (μm) | 颜色 | 典型应用 |
|---|---|---|
| 0.405 | 紫光 | 蓝光BD、紫外固化 |
| 0.532 | 绿光 | 激光指示、医疗 |
| 0.6328 | 红光 | He-Ne激光、干涉 |
| 0.85 | 近红外 | 光纤通信、传感 |
| 1.55 | 红外 | 长距离通信、激光雷达 |
2.2.2 功率设置
功率的单位是瓦特(W)。Code V里用 POWER 参数设置。但要注意,这个功率是光源发射的总功率,不是到达接收面的功率。
实际系统中,光线经过反射、折射、吸收后,能量会衰减。非序列追迹会精确计算每条光线的能量传递。你可以在接收面上用 DETECTOR 查看实际接收到的功率。
2.3 光源的偏振属性
偏振,是很多初学者容易忽略的属性。但在某些系统里,偏振决定了成败。比如液晶显示、偏振分光、激光干涉,这些系统对偏振极其敏感。
2.3.1 偏振状态定义
Code V支持多种偏振状态:
- 非偏振(Unpolarized): 默认状态,光线偏振方向随机
- 线偏振(Linear): 电场方向固定,用
POLARIZATION ANGLE指定角度 - 圆偏振(Circular): 左旋或右旋,用
POLARIZATION TYPE CIRCULAR - 椭圆偏振(Elliptical): 介于线偏振和圆偏振之间
! 设置线偏振,偏振角45度
SOURCE POINT
POSITION 0 0 0
POLARIZATION LINEAR
POLARIZATION_ANGLE 45
END
! 设置右旋圆偏振
SOURCE POINT
POSITION 0 0 0
POLARIZATION CIRCULAR
POLARIZATION_HANDEDNESS RIGHT
END
2.3.2 偏振追迹的开启
默认情况下,Code V的非序列追迹不计算偏振。你需要手动开启偏振追迹功能:
! 开启偏振追迹
POLARIZATION ON
开启后,系统会追踪每条光线的琼斯矢量(Jones Vector)或斯托克斯参数(Stokes Parameters)。你可以在探测器上查看偏振态的变化。
2.3.3 偏振相关的避坑指南
我曾经做过一个偏振分光棱镜(PBS)的仿真。一开始怎么都得不到正确的分光比,后来发现是光源的偏振方向没对准PBS的偏振轴。你想想看,线偏振光入射角度差10度,分光比就可能从50:50变成70:30。
另一个常见问题是:很多人忘了在材料属性里设置双折射。如果系统里有双折射晶体(如石英、方解石),必须定义材料的 BIRERRINGENCE 参数,否则偏振追迹结果完全不对。
2.4 本章知识体系
下面这张图,把光源定义的核心逻辑串起来了。你可以把它当作一个快速参考。
嗯,这一章的内容就到这里。光源定义看起来简单,但每个参数背后都有讲究。我建议你打开Code V,把上面几个例子都跑一遍。亲手试试点光源、面光源、准直光源的区别,再调调波长和偏振,感受一下参数变化对追迹结果的影响。