射线追踪噪声

3
我希望有经验的光线追踪者能够帮我解决一些程序问题,但由于这个程序是学校作业,我不能发布太多代码。我只是想知道是否可以得到一些提示,以帮助我朝着正确的方向前进。提前感谢!
第一)正如您所见,我的光线追踪图像中存在大量噪点。场景由一个悬浮在平面上的单个三角形和一个单独的点光源组成。
第二)当我计算阴影射线时,噪声不会出现,但它会计算错误的阴影颜色。
我的光线追踪算法:
for each pixel,
    color c;
    for each shape in the scene
        send a ray through each pixel and see if it collides with a shape
        if it does
            color = calculate color of ray
        else, color = background color
    return color

To calculate color of ray...
    color c = 0,0,0 // rgb
    for each light source in the scene
        make a new ray (shad_ray) that starts at where the original ray hit the shape...
        ... and ends at the light source
        see if the shadow ray hits a shape on its way to the light
        if it does, 
            calculate ambient color using ambient color of shape material and...
            ... ambient light intensity 
        if not,
            calculate shading with sum of ambient/diffuse/specular components 

我知道这是一种算法的非常笼统的描述。但如果需要,我可以提供更多信息。 不好的光线追踪

我认为你会感到欣慰,因为专业的光线追踪引擎也存在严重的噪点问题:https://brigade.otoy.com/gtc/brigade/2014/03/28/brigade-3-preview-at-gtc-2014.html -- 观看他们的视频;他们承认这个问题,但目前还不清楚他们是否会找到一个可接受的解决方案,而不会影响图形质量。也许他们需要更高位深度的浮点硬件来支持GPU? - allquixotic
1个回答

11
这看起来很熟悉,被称为"表面粉刺"。光线追踪阴影的常见错误是阴影射线与发射阴影射线的对象相交。由于有限的浮点精度,交点不总是恰好在表面上 - 它最终会略微高于或低于表面。当你投射阴影射线时,可以再次与该表面相交。它看起来嘈杂,因为有些位置会自相交,而有些位置则不会。
处理这种情况的典型方法是将阴影射线的起点稍微向后移动到眼睛点,或忽略在非常短的距离内发生的阴影交点,或忽略与该表面的所有交点(如果您的表面是平面或凸面)。
关于阴影区域的颜色,你可能需要发布实际代码,但看起来你正在使用阴影光线相交的物体材质而不是主光线。

啊,这就是我的教授所说的,好的。他的指示很模糊,但我认为你解释清楚了。非常感谢! - FateNuller

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接