2011-12-16 123 views
1

我想实现一个物理光线追踪器(即使用具有给定波长的实际光子),将我自己限制在小场景(如两个球体和一个封闭盒子)中进行实验。这并不意味着速度很快,但我会在稍后优化它。我正在收集我所知道的关于光子如何与表面相互作用的所有知识,即它们要么反射(吸收,然后再发射),要么折射的概率是基于表面的吸收光谱和反射率/折射率指数,以及折射是依赖于波长(这自然导致色散)等...光线追踪和光线

我明白如何从发射材料(如“灯”)射出光子,并使它们在场景中反弹,直到它们碰巧进入相机产生一个准确的结果,但是速度慢得不能接受,因此需要做反向拍摄(从相机拍摄光子)

但是我有无法理解如何将“表面相互作用”建模为“向后” - 例如,如果来自相机的光子碰到红色盒子的一侧,如果光子具有与红色相对应的波长,则它将被反射,并且所有其他波长将被吸收,这会产生红色。但是,通过拍摄很多非常接近的光子样本来确定颜色的强度,然后检查哪一个最终与光线发生碰撞,哪些不会?因为最终,无论是光子碰到光还是光(没有经过给定次数的反弹),都没有局部碰撞的概念。

所以基本上我的问题是 - 一个像素接收的光的强度是该像素的光子样本的数量的函数,它实际上是光源,还是还有其他一些参与?

+0

这是不是非常有帮助你的实际问题(对不起),但您可能希望使用[康奈尔箱(http://en.wikipedia.org/wiki/Cornell_Box)(或变种)测试:) – Hybrid 2011-12-16 17:57:58

回答

2

听起来好像你想做一些叫做http://en.wikipedia.org/wiki/Path_tracing的东西,就像光线追踪一样,只是当相机的直接光线撞击到一个表面时它不会直接采样光源(导致它非常慢,但速度不如射线从光源“向前”)。

然而,你似乎通过考虑来自相机的“逆光子”,你认为它已经具有属性(“光子具有对应于红色的波长”),你实际上试图在第一个地点。为了解决这个问题,您可能需要先阅读“常规”光线跟踪。因此,想想照相机发出的光线在场景中跳动到某个弹跳深度,或者直到它们碰到物体,然后直接采样光源,看它们是否照亮物体。

关于您的最终问题“像素接收到的光的强度是该像素的光子样本数量的函数,它实际上是光源,还是还有其他内容?我会向您推荐http://en.wikipedia.org/wiki/Rendering_equation,您可以在其中找到渲染方程(所有3D图形算法(如光线追踪试图解决的一般数学问题))和一个列表及其限制,这些列表在负面(即光源除外)这些效果也参与决定的像素的最终颜色和强度):

  • 磷光,当光在一个时刻在时间吸收并在不同的时间发射的发生,
  • 荧光,其中吸收和发射的光具有不同的波长,干涉,其中e表现出光的波特性,并且其中入射光和出射光的空间位置不同,其中子表面散射是地下散射,其中入射光和出射光的空间位置是不同的。不考虑次表面散射的表面可能显得不自然不透明。
+0

所以我最好的选择是实施路径跟踪。看起来荧光问题可以很容易地解决,因为我的光子将具有波长属性(所以我可以根据材料的属性改变反射光子的波长),但其他三个似乎难以处理。我仍然不太明白连续射线样品(二次,三次射线等)对最终颜色的贡献,但一些阅读应该不会受到伤害。谢谢! – Thomas 2011-12-16 18:37:39