【发布时间】:2021-05-30 14:01:47
【问题描述】:
总结
这是一个关于如何将光线追踪模型中计算的光强度值映射到人类感知的颜色值的问题。我建立了一个光线追踪模型,发现包括反平方定律来计算光强度会产生我认为不直观的图形结果。我认为这部分与 8 位彩色图像可用的亮度值范围有限有关,但我更可能不使用光强度和像素颜色之间的线性映射。
背景
我最近对使用光线追踪技术创建计算机图形产生了兴趣。
一个基本的光线追踪模型可能会像这样工作
- 计算从相机(眼睛)中心到要渲染的每个屏幕像素方向的光线矢量
- 对世界上的所有物体进行矢量碰撞测试
- 如果发生碰撞,记录碰撞发生点的物体颜色
- 创建一个从碰撞点到最近光源的新向量
- 将光的颜色乘以对象的颜色
即使在计算中包含表面法线时,这也会创建合理但外观平坦的图像。
模型扩展
我的兴趣是尝试通过将距离纳入光照计算来扩展此模型。
如果物体在距离d 处被一盏灯照亮,那么如果物体从光源移动一段距离2d,则照明强度会降低 4 倍。这就是平方反比定律。
它不适用于所有灯光模型。 (例如,来自无限远距离的光的强度与物体的位置无关。)
通过玩弄我的代码,我发现这个平方反比定律并不能产生我所希望的真实光照。
例如,我为房间/场景模型构建了一些初始对象,以进行测试。
- 距离相机 3-5 处有一些物体。
- 有墙壁构成了房间的边界,我将它们放置在距离相机 10 到 100 的位置。
- 有一些灯,距离相机 10 次。
我发现的是这个
- 如果房间边界距离摄像头的距离超过 10,则颜色值会非常暗淡。
- 如果房间的边界距离相机 100 距离,则它是完全不可见的。
这与我的直觉预期不符。这在数学上是有意义的,因为我使用线性函数在颜色强度和 RGB 像素值之间进行转换。
讨论
将对象从距离 10 移动到距离 100 会降低颜色强度 (100/10)^2 = 100。由于像素 RGB 颜色在 0 - 255 的范围内,显然 100 的系数很重要,这可以解释为什么距离 10 处的物体移动到距离 100 处变得完全不可见。
但是,我怀疑人类对颜色的感知在某种程度上是非线性的,我认为这是一个已经在计算机图形学中解决的问题。 (否则光线追踪引擎将无法工作。)
我的猜测是存在某种颜色感知函数,它描述了绝对光强度应如何映射到人类对光强度/颜色的感知。
有没有人知道这个问题或者可以指出我正确的方向?
【问题讨论】:
-
这是我找到的一个资源:Realistic Raytracing。亚马逊有几本涵盖光线追踪主题的书籍。
-
如果一个房间的墙壁距离所有的灯100m,那么你看不到它们是有道理的。与相机的距离无关。
-
@MattTimmermans 这没有任何意义。现实是这样运作的吗?
-
是的!关于与相机的距离:如果物体距离相机的距离是相机的两倍,那么它的每平方英寸向相机发送 1/4 的光,但每个像素的大小是它的 4 倍平方英寸,所以表面的感知亮度没有变化。
-
@MattTimmermans 我得出了同样的结论,在代码中实现了这个更改之后,我可以看到墙壁,正如我所期望的那样......所以你之前的评论没有任何意义对我来说。我们似乎仍然同意物理学。
标签: graphics raytracing