我有一个关于光线追踪中区域照明的快速问题。我正在从地面上的光线追踪中学习这个主题,当没有应用抗锯齿时,我的区域光的结果是这样的:
如您所见,图像中有很多噪点。当我应用抗锯齿时,它看起来很好,并且在应用 256x AA 时看起来像这样:
[阴影颜色的改变是微不足道的,我改变了阴影的一些属性]
我的问题,这是区域灯的行为方式还是我做错了什么?因为渲染第一个只需要 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());
}