第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条起步,复杂系统要上万条。

我的经验: 点光源的发光角度默认是4π球面度(全向)。如果你需要模拟LED的朗伯体发光,记得加 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,把上面几个例子都跑一遍。亲手试试点光源、面光源、准直光源的区别,再调调波长和偏振,感受一下参数变化对追迹结果的影响。