【问题标题】:Ray tracing - color mixing光线追踪 - 颜色混合
【发布时间】:2014-12-28 18:41:48
【问题描述】:

我正在编写光线追踪器。到目前为止,我有漫反射和镜面光照,我也计划实现反射和折射。

到目前为止,我使用了白光,我这样计算表面颜色:surface_color * light_intensity,除以适当的距离^2 值,因为我使用的是点光源。对于镜面反射,它是light_color * light_intensity。 Afaik,镜面反射不会改变光的颜色,所以这也应该适用于不同颜色的光源。

当光源不是白色时,如何计算从漫反射表面反射的颜色?例如,(0.7, 0.2, 0) 光照射 (0.5, 0.5, 0.5) 表面。另外,在这种情况下,距离因素会有所不同吗?

另外,我如何添加来自不同颜色光源的单个点的光贡献?例如,(1, 0.5, 1) 表面由 (0.5, 0.5, 1) 和 (1, 0.7, 0.2) 灯照亮。我是否只需计算两者(包括距离)并将它们相加?

【问题讨论】:

    标签: graphics raytracing color-blending


    【解决方案1】:
    • 我发现 RGB 不适合在其中进行光照计算,因为您必须考虑一系列特殊情况才能获得看起来逼真或行为符合您预期的任何东西。
    • 话虽如此,从概念上讲,在 HSL 中而不是 RGB 中进行照明计算可能更容易。根据您使用的语言和工具包,这应该是标准库/发行版或可用工具包的一部分。
    • 更精确的物理替代方法是实现光谱渲染,其中跟踪函数不是返回 RGB 值,而是返回采样的光谱功率分布。与跟踪一大堆 RGB 混合特殊情况相比,SPD 更准确、更易于使用,但代价是性能受到轻微但明显的影响(尤其是在未优化的情况下)。镜面高光和彩色灯光是此模型的自然结果,在一般情况下不需要任何特殊处理。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-01-08
      • 2019-11-29
      相关资源
      最近更新 更多