按百分比偏离反射

时间:2013-09-25 13:11:52

标签: c# raytracing

我正在研究一种带有漫反射的光线跟踪器(每次反射时有64或128个样本)。

例如,材料可能是75%反射,这意味着反射光线需要偏离“完美”反射25%。

我一直试图通过计算反射光线的向右和向上矢量并使用百分比将所有三个相乘以组合成偏差矢量来解决这个问题。

right = cross(intersectionNormal, ray)
up = cross(right, ray)
ray' = (ray * w) + (up * u) + (right * v)

我似乎无法使数学正确。我已经尝试根据球面坐标(围绕完美反射的随机角度随机倾斜)为每个组件生成乘数,但我的数学运算不正常。结果永远不会像半漫反射。他们看起来错了。我正在使用Random.NextDouble()在材料的反射率范围内获得随机球面坐标。

鉴于1.0(完美)和0.0(漫反射)之间的反射率,交叉法线和完美反射光线,我如何通过反射率百分比偏离它?

1 个答案:

答案 0 :(得分:0)

从你想要实现的目标看来,“正确”和“向上”不应该依赖于入射光线的方向,而只是形成与法线的标准正交基础。所以你会选择up = cross(right, intersectionNormal)

但是我不建议你选择其中一个标准的反射模型,比如Blinn / Phong,其中指数几乎与你想要的反射率参数有关。