“过滤”在真实光线追踪中意味着什么?

时间:2017-12-08 06:38:02

标签: raytracing

我正在阅读逼真的光线追踪这本书,我无法理解盒子过滤器代码:

void boxFilter(Vector2* samples, int num_samples)
{
    for (int i = 0; i < num_samples; i++)
    {
        samples[i].x = samples[i].x - 0.5f;
        samples[i].y = samples[i].y - 0.5f;
    }
} 

在我看来,“filter”是一个权重数组,而sampling是生成位置以产生光线,filter是结合结果(所以filter方法应该返回float[],但上面的函数返回Vector2[])。代码是什么意思?

1 个答案:

答案 0 :(得分:0)

盒子过滤的基本思想是无论在图像平面上的哪个位置&#34;像素&#34;样本着陆后,盒式滤镜会使渲染器就像它落在该像素的正中心一样。

我还没看过那本特定的书,但我猜测在那段代码片段中,sample[].x.yint(或之前的{{ 1}} ed)返回光线在像素坐标中击中图像平面的位置。因此,从每个中减去floor()会将样本放在每个像素的几何中心,因此,它是一个盒式过滤器。

有关框过滤(和其他过滤器)的深入讨论,请参阅基于物理的渲染,第7章,&#34;采样和重建&#34;。