为什么我的光线追踪球在使用多个光源照明时会有暗线?

3
我有一个简单的光线跟踪器,只能在第一次相交时运行。场景中有两个不同的光源,看起来还不错,但当两个灯都出现在场景中时,其中一个光源照亮的区域结束后会变得很暗,即使在另一个光源照亮的区域中间(特别是在绿色球上最明显)。从“两个光源都照亮的区域”过渡到“只有一个光源照亮的区域”的过程似乎比“只有一个光源照亮的区域”略微暗一些。
我添加照明效果的代码如下: Hosted by imgur.com
// trace lights
        for ( int l=0; l<primitives.count; l++) {

            Primitive* p = [primitives objectAtIndex:l];
            if (p.light) 
            {
                Sphere * lightSource = (Sphere *)p;

                // calculate diffuse shading
                Vector3 *light = [[Vector3 alloc] init];
                light.x = lightSource.centre.x - intersectionPoint.x;
                light.y = lightSource.centre.y - intersectionPoint.y;
                light.z = lightSource.centre.z - intersectionPoint.z;

                [light normalize];

                Vector3 * normal = [[primitiveThatWasHit getNormalAt:intersectionPoint] retain];
                if (primitiveThatWasHit.material.diffuse > 0)
                {
                    float illumination = DOT(normal, light);
                    if (illumination > 0)
                    {
                        float diff = illumination * primitiveThatWasHit.material.diffuse;
                        // add diffuse component to ray color
                        colour.red += diff * primitiveThatWasHit.material.colour.red * lightSource.material.colour.red;
                        colour.blue += diff * primitiveThatWasHit.material.colour.blue * lightSource.material.colour.blue;
                        colour.green += diff * primitiveThatWasHit.material.colour.green * lightSource.material.colour.green;
                    }
                }
                [normal release];
                [light release];
            }
        }

如何使其看起来正确?

很确定这只是重叠的高光中的一种错觉。 - Alex Wayne
4个回答

7

这是一种名为Mach banding的知觉效应。

您很可能也是在错误的颜色空间中查看图像。您的光线追踪器在“线性”空间中进行光照计算,但您几乎肯定是在具有非线性响应的显示器上查看这些图像,因此甚至无法看到正确的结果。这可能会使Mach条纹比您正确显示它们时更加突出。尝试了解伽马校正


3

你的眼睛欺骗了你。如果你把这三张图片中的球放在一起,你会非常清楚地看到当单个光源时颜色相同,当双重照明时更亮。如果你想让它看起来更好,我建议你在当前的光源之间添加一个完整的弧形光源。


嗯,是的,你说得对。我使用了一个颜色选择器工具,并比较了我怀疑的像素。结果发现它们只是看起来更暗,实际上它们是相同的颜色。 - Curyous

0

您已经饱和了图像中的一个颜色通道;请稍微降低亮度,看看会发生什么。


0

你确定你的光照方向已经归一化了吗?

也许值得在那里加入一个断言。


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