光线跟踪工件与反射

时间:2016-12-18 19:10:33

标签: raytracing

所以我正在尝试建造一个牵引器。我遵循了本教程:https://www.youtube.com/watch?v=SMOJGxyd9BE&list=PLHm_I0tE5kKPPWXkTTtOn8fkcwEGZNETh&index=9

所以一切都很好,除了遇到一个问题。我试图让球体在球体下反射,但是当我这样做时,我得到了这种奇怪的效果

http://imgur.com/UuW2nqZ

如果您注意到地面上的反射有这些黑斑。我一直试图找出最新情况,但奇怪的是因为整个飞机具有相同的法线,所以反射应该是正确的。有没有人有这方面的经验?我检查了它与阴影无关。

1 个答案:

答案 0 :(得分:6)

看起来像“表面痤疮”,当由于精度有限而导致阴影测试射线的原点(刚刚勉强)在你交叉的表面的错误一侧时发生。因此表面阴影本身。

例如,您可以计算撞击球体的相机光线的交点(x,y,z)。由于即使双精度值的精度有限,也有可能(x,y,z)在球体表面上 。接下来,您将从(x,y,z)向光源创建一条光线,以查看它是否在阴影中。如果(x,y,z)由于精度有限,实际上只是在球体内部,那么阴影测试将失败,因为球体遮挡了内部的所有点。

这通常通过在交点处朝向表面法线的方向微移(x,y,z)一小部分来固定。您使用微移点作为阴影射线的原点,因为您知道它位于球体的正确一侧。

在你的情况下,球体本身不会出现痤疮,但它的反射确实如此。这表明微调有时小于从初始射线到反射射线到球体的累积精度损失。也许你的轻推太小了。在计算反射光线时可能出现问题。

也可能是与平面的交点有时位于错误的一侧,因此您的反射光线会从地板下方而不是向后移动。

要进行调试,我会将“我什么都没打”的颜色变成粉红色而“我在阴影中”的颜色是浅绿色。如果你在那些斑点看到粉红色,那么计算反射光线就会出错。如果你看到柠檬绿,那么它是表面痤疮,你需要确保你没有系统的精确度损失,并且你的推动因素是足够的。