本篇笔记将从投影相机模型,景深和环境相机模型三个方面介绍pbrt中的相机模型。
(1)投影相机模型
投影相机模型的功能是根据采样器提供的像素采样点坐标生成世界坐标系下的光线。在投影相机模型中涉及了世界坐标系、相机坐标系,成像空间坐标系,标准成像设备坐标系和屏幕坐标系。除第四个坐标系外,其余与DirectX3D所涉及的各个坐标系含义相同。而这里的第四个坐标系只是将第五个坐标的坐标范围由整数形式的像素宽度缩小到0到1的范围。
投影相机模型有正交相机模型和透视相机模型两种具体实现。两种相机模型的实现差异主要体现在从相机坐标系向成像空间坐标系的变换矩阵上。透视变换的矩阵已经在之前的笔记中进行过详细的介绍,而正交透视的变换则更为简单,只需要保持x轴和y轴坐标不变,把z轴坐标根据近平面和远平面线性压缩到0到1的范围即可。
Pbrt中的投影相机模型除了生成该像素采样点位置处的光线外,还需要生成微分位移后的光线,即生成屏幕坐标系中横纵坐标各增加1个像素位置处的光线。该光线的计算结果将用于后续的纹理滤波。在实现该功能时,需要考虑屏幕坐标系与成像空间坐标系的变换问题。这也是投影相机模型所需要提供的功能。
(2)景深。
景深所考虑的是把摄像机镜头由最简单的小孔成像转化为透镜成像,这样就更符合实际情况。摄像机镜头转换成透镜形式后,就会存在焦距已经清晰和模糊的问题。而清晰与模糊,其实就是景深问题。在景深附近的图像成像是最为清晰的,比景深近和比景深远的图像都会呈现处模糊状态,且离景深距离越远模糊程度越大。在pbrt的相机模型中,为了实现景深效果,引入了镜头半径和焦距两个参数。通过这两个参数调整每次采样的光线,通过采样结果的合成,形成景深效果。焦距确定景深,镜头半径越大,模糊的程度也越大。具体实现时,首先根据采样器提供的镜头位置横纵坐标按镜头半径进行缩放后使用concentricSampleDIsk函数对分布进行重新调整,调整的含义暂时未理解。在不进行景深处理时,光线的出发点在摄像机坐标系中为坐标原点,经景深调整后的光线出发点为镜头平面上的一个点。在进行景深处理时,认为调整前后的光线都应该通过焦平面上的同一点。根据这一原则,用焦距除以原光线的z轴分量确定这个点距离原点的距离,再根据这个距离确定这个点的三维坐标。由这个点以及镜头平面上新生成的光线原点确定出新光线的方向,据此再生成经过景深调整的新光线。
(3)环境相机模型。
环境相机模型的名称并不够直观,字面上的意思并不能让人明白这个相机模型的作用。实际上,这个相机会生成一幅以周围环境为基础的球形纹理。它的横轴对应着球体0到2pi的经度,纵轴对应着球体0到pi的纬度。它具体的做法就是在零点坐标位置,即相机位置处,向周围的球体发出射线,每根射线的方向由像素坐标转换为球面坐标后得到。所有射线都确定颜色后,就形成了最终的球形纹理。作者在书中并未明确说明该模型的作用,我猜测它的作用主要就是为了周围固定不变的环境的渲染工作量,以及为物体反射周围环境减少工作量。而且这一模型可以在渲染过程中随时使用,因而也适用于一些动态场景。