众所周知,自然、物理界的光照不是靠RGB
三个离散分量描述的,而是由不同强度的不同波长\(\lambda\)的光组成的,因此如果要基于物理地渲染,对于自然光谱的模拟是必不可少的,在pbrt
和mistuba
两款渲染器中,都采用了Spectrum
类来承载光谱数据,对于不同波长的数据,我们描述为SPD,aka spectral power distribution,光谱能量分布。
Spectrum
自然界光谱不是离散描述的,于是我们可以像傅立叶变换一样,用一组带系数的基底函数\(c_iB_i(\lambda)\)来逼近实际的波形。
pbrt中,定义了两种实际的Spectrum
类,并且使用一个typedef
来在实际的使用中切换两者的类型:
1 | typedef RGBSpectrum Spectrum; |