光线跟踪中的区域照明

时间:2012-08-14 13:53:26

标签: graphics area raytracing lighting

我对射线追踪中的区域照明有一个快速的问题。我正在从Ray Tracing from the Ground Up学习这个主题,当没有应用抗锯齿时,我的区域光的结果是这样的:NO AA

正如您所看到的,图像中存在大量噪音。当我使用抗锯齿时,它看起来很好,当应用256x AA时看起来像这样:

AA 256x

[阴影颜色的变化微不足道,我改变了阴影的一些属性]

我的问题是,这是区域灯的行为方式还是我做错了什么?因为渲染第一个只需要4个,但后者需要大约20 分钟。感觉有些不对劲。

我的点光类和区域光类之间的唯一区别是get_direction函数。

点光源的get_direction功能:

virtual Vec get_direction(ShadeRec& sr)
{
return Vec(position.x-sr.hit_point.x, position.y-sr.hit_point.y, position.z-sr.hit_point.z).norm();
}

区域灯的get_direction功能:

virtual Vec get_direction(ShadeRec& sr)
{
    Vec newLocation;
    newLocation.x = position.x + radius * (2.0 * rand_float() - 1.0);
    newLocation.y = position.y + radius * (2.0 * rand_float() - 1.0);
    newLocation.z = position.z + radius * (2.0 * rand_float() - 1.0);
    return ((newLocation - sr.hit_point).norm());
}

1 个答案:

答案 0 :(得分:2)

您发布的渲染时间对我来说非常有意义:

4 seconds * 256 ~= 17 minutes

随机数生成器引入的开销总计为其余数据。