我正在编写一个光线跟踪器。到目前为止,我有漫射和镜面照明,我也计划实现反射和折射。
到目前为止,我已经使用了白光,其中我计算的表面颜色如下:surface_color * light_intensity
,除以适当的距离^2值,因为我使用的是点光源。对于镜面反射,它是light_color * light_intensity
。当然,镜面反射不会改变光的颜色,所以这也应该适用于不同颜色的光源。
当光源不是白色时,如何计算漫反射表面反射的颜色?例如,(0.7,0.2,0)光照射到(0.5,0.5,0.5)表面。此外,在这种情况下,距离因素是否不同?
此外,如何添加来自不同颜色光源的单个点的光贡献?例如,通过(0.5,0.5,1)和(1,0.7,0.2)灯光来照明(1,0.5,2)曲面。我只是简单地计算两者(包括距离)并将它们相加吗?
- 我发现RGB是一个很难进行照明计算的颜色空间,因为你必须考虑一系列特殊情况才能得到任何看起来逼真或行为符合你期望的东西
- 话虽如此,在概念上,用HSL而不是RGB进行照明计算可能更容易。根据您使用的语言和工具包,这应该是标准库/发行版或可用工具包的一部分
- 一个更精确的物理替代方案是实现光谱渲染,其中跟踪函数不是返回RGB值,而是返回采样的光谱功率分布。SPD比跟踪一大堆RGB混合特殊情况更准确、更容易使用,代价是轻微但明显的性能打击(尤其是在未优化的情况下)。镜面反射高光和彩色灯光是该模型的自然结果,在一般情况下不需要任何特殊处理