3

我有一个简单的光线追踪器,它只能返回到第一个交叉点。使用两个不同的光源时,场景看起来不错,但是当两个灯都在场景中时,即使在来自另一个光源的照明区域的中间,也会在一个照明区域的末端出现暗阴影(尤其是在绿球)。从“两种光源照明的区域”到“仅一种光源照明的区域”的过渡似乎比“仅一种光源照明的区域”稍暗。

由 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];
            }
        }

我怎样才能使它看起来正确?

4

4 回答 4

7

这是一种称为Mach banding的感知效应。

您也很可能在错误的色彩空间中查看图像。您的光线追踪器正在“线性”空间中进行照明数学运算,但您几乎可以肯定在显示器上以非线性响应查看这些图像,因此甚至看不到正确的结果。与正确显示它们相比,这很容易使马赫带更加突出。尝试学习伽玛校正

于 2010-04-17T05:44:19.630 回答
3

你的眼睛在欺骗你。如果将 3 张图片中的球体一起移动,您会非常清楚地看到,单光时这些区域颜色相同,而双光时则更亮。如果你想让它看起来更好,我建议你在当前光源之间添加一整弧光源。

于 2010-04-16T23:33:58.573 回答
0

您已经使图像中的一个颜色通道饱和;把亮度调低一点,看看会发生什么。

于 2010-04-16T23:39:07.433 回答
0

你确定你的照明方向都是标准化的吗?

在那里抛出一个断言可能是值得的。

于 2010-04-17T10:12:16.593 回答