您不需要从入口点和出口点开始进行光线追踪。想想什么样的光击中了这些点。以不同于照射目标物体的角度照射半透明表面的光线不会影响照射到目标物体的光线的颜色。
+ * +
+ * +
+ * +
+ * +
----------
| +*+ |
| + * + |
| + * + |
----------
+ * +
*
*
-------
当然,这假设材料中没有折射。
现在,如果您想将光线追踪器扩展到更高级的东西,例如路径追踪,那么您需要考虑从半透明物体反弹并击中最终物体的光线,但对于光线追踪器,您不需要这样做担心它。
对于半透明物体,我会将光强度的降低建模为距离的线性函数(大多数现实世界的物体都遵循这个假设)。如果您将灯光建模为具有 RGB 组件(不是物理上真实的......),那么您将根据对象内该组件的值按比例减少每个组件。
如果您想真正了解光线在物体中的作用,那么您将需要转向次表面散射(玻璃中的牛奶看起来不像白色固体的原因以及为什么人类很难在 CGI 中建模)。
编辑:您提到的光无限地来回反弹并使用许多计算的现象是真实光的行为。现在的高级渲染器不可能集成所有这些光组件,而是随机采样光分布。采集的样本越多,图像越接近真实,光积分越接近其真实值。这称为蒙特卡罗渲染。路径追踪、双向路径追踪和都市光传输都是试图完全模拟光传输的蒙特卡罗算法。每个算法,只要有足够的时间,都会收敛到相同的最终图像,但是,有些算法比其他算法更有效。(见路径追踪在维基百科上。在文章的底部是一张比我试图画的更好的图像)。