我正在尝试实现自己的路径追踪器,但在提出问题之前,我想简要概述一下:
在渲染方程的实现中,我使用一些特定的技术来对表面进行采样。例如:当我的一条光线照射到漫反射曲面时,将使用余弦加权随机方向计算从该曲面反射的下一条光线。这意味着在我的渲染方程中,我必须考虑这个特定随机分布所暗示的PDF,并在我的等式中具体划分这个PDF。到目前为止,一切都很好。
现在,我的问题。我想实现一种称为“下一个事件估计”的特殊技术,它只是对灯光进行采样。为了做到这一点,我想通过使用以下代码(C ++)在我的光线上选择一个随机点,它是球形的:
Vec3<float> randomPoint() const
{
float x;
float y;
float z;
// random vector in unit sphere
do
{
x = ((float)rand() / (RAND_MAX)) * 2 - 1; // random coordinates between -1 and 1
y = ((float)rand() / (RAND_MAX)) * 2 - 1;
z = ((float)rand() / (RAND_MAX)) * 2 - 1;
} while (pow(x, 2) + pow(y, 2) + pow(z, 2) > 1); // simple rejection sampling
return centerOfSphere + Vec3<float>(x, y, z) * radius;
}
据我了解(如果错误,请纠正我),这会实现统一随机抽样。另外,据我所知,这种采样的PDF = 1 /(b - a)。我的问题:我是否必须像使用余弦加权随机分布一样使用此PDF,因为它是统一分布?如果是的话,PDF谈论的范围(b-a)是什么?提前谢谢!