用于几何光学的光线追踪
Go to file
2023-11-11 15:28:13 -05:00
.gitignore add PNG 2023-11-10 09:36:31 -05:00
colorspace.py not yet.. 2023-11-10 11:32:11 -05:00
image16k.png nice run! 2023-11-10 14:02:37 -05:00
image.png a long run 2023-11-10 12:12:34 -05:00
rainbow.nb clean 2023-11-09 20:53:55 -05:00
rainbow.py add interp 2023-11-11 15:28:13 -05:00
raytrace_2D.py fix bugs, first working version 2023-10-30 15:09:10 -04:00
README.md add readme 2023-11-11 11:30:52 -05:00
saved.npz nice run! 2023-11-10 14:02:37 -05:00
test.png finish! 2023-11-10 11:29:28 -05:00

几何光学模拟及彩虹模拟

写了几何光学正向光追。考虑了阳光在水珠中的折射反射,统计角度分布从而模拟彩虹

使用的数据

  • 水的密度:$$\rho(t) = 999.974950 \frac{1 - (t - 3.983035)^2 (t + 301.797)}{522528.9(t+69.34881)}$$ 其中 t 是摄氏温度
  • 水的折射率:
     n = \sqrt{\frac{2C + 1}{1- C}}, \\ C = \bar{\rho} \left( a_0 + a_1 \bar{\rho} + a_2 \bar{T} + a_{3}{\bar{\lambda }}^{2}{\bar{T}}+{\frac {a_{4}}{{\bar{\lambda }}^{2}}}+{\frac {a_{5}}{{\bar{\lambda }}^{2}-{\bar{\lambda }}_{\mathit {UV}}^{2}}}+{\frac {a_{6}}{{\bar{\lambda }}^{2}-{\bar{\lambda }}_{\mathit {IR}}^{2}}}+a_{7}{\bar{\rho }}^{2} \right)
    其中:\bar{T} = T/T^*, \bar{\rho} = \rho/\rho^*, \bar{\lambda} = \lambda/\lambda^* 是约化量,a_{0} = 0.244257733, a_{1} = 0.00974634476, a_{2} = 0.00373234996, a_{3} = 0.000268678472, a_4 = 0.0015892057, a_{5} = 0.00245934259, a_{6} = 0.90070492, a_{7} = 0.0166626219, T^{*} = 273.15 \ \mathrm{K}, \rho^{*} = 1000\ \mathrm{kg/m^3}, \lambda^{*} = 589\ \mathrm{nm}, \bar\lambda_{\text{IR}} = 5.432937, $\bar\lambda_{\text{UV}} = 0.229202$。
  • 单色光引起的色觉:见 CIE 1931详细数据在 colorspace.py 中的 _CIEXYZ_1931_table
  • 阳光设为 5250\ {}\degree\rm C 的黑体辐射。这与大气上层吻合较好,但与大气底层相比,忽略了水分子的大量吸收峰和氧分子、二氧化碳分子等的吸收峰。

模拟过程

  • 给定温度
  • 对每隔 1\ \rm{nm} 的单色光:
    • 计算折射率,进行正向光追。假设光只与单个水珠相遇。入射光的瞄准距离 $d_i = r \sqrt{u_i}$,其中 u[0,1) 中均匀分布;入射光按照黑体辐射设置
    • 统计背向出射的光强 - 角度分布
    • 转化为 XYZ - 角度分布
  • 求和,得到整个频谱的 XYZ - 角度分布
  • 转化为 sRGB - 角度分布,作图

TODO

  • 考虑散射效应:
    • 这将导致背景不是黑色,而是天空蓝
    • 这将导致水珠反射回的光强被削弱