光线跟踪是一种渲染算法,该算法模拟灯光穿过场景的方式:从光源发出,经具有特定材质属性的几何对象反射或折射,最终显示在观察者的眼中,通常是在摄影机的胶片上。为了最大限度地减少计算成本并只渲染场景的可见部分,该算法采用向后计算:它从摄影机处开始,沿着当前视图方向发送光线。如果该光线遇到某个对象,则将对其材质求值,然后返回并存储最终的颜色信息。如果材质能够进行反射或折射,则会将光线进一步发送到场景中以计算对最终颜色的贡献。此过程会递归重复,直到达到特定遍历深度。
可以将光线跟踪与其他技术(如扫描线或光栅化器)结合使用,以加速对主要显示给观察者的对象进行检测和着色。在这种情况下,将会延缓使用较昂贵的光线跟踪算法,除非真正需要计算次效果。
光线跟踪的一些应用
- 计算反射和折射。
- 通过对点和光源之间是否存在任何对象进行求值计算非常精确的阴影。也可以通过其他方法计算阴影;这些方法虽然速度更快,但精确度较低。
- 光线跟踪能够创建半透明阴影(例如,彩色玻璃的阴影投射)。
- 光线跟踪能够支持来自区域光源的柔和的模糊阴影。
光线跟踪提供所有这些功能时,将处理大量的任务,因此使用光线跟踪进行渲染通常会比使用其他方法需要更长的时间。
注意使用光线跟踪与扫描线/光栅化器可能会影响场景的渲染,但渲染结果也取决于场景的设置方式。例如,所使用的环境将影响渲染的图像。暗室中的反射性非常强的铬对象与室外环境中的同一反射性铬对象会生成截然不同的渲染。
同样,场景中的照明也会影响最终渲染。例如,点光源从单一点发光,模拟的是灯泡的效果。它会产生具有聚光区的软阴影。相反,平行光提供没有聚光区的均匀照明,模拟的是室外日光。
光线跟踪与扫描线
当扫描线算法处于启用状态时,场景中的所有对象都将投影到二维平面上。随后会根据其垂直和水平顺序对这些对象进行排序。该技术需要的渲染时间少于光线跟踪,因为它不包含在三维场景数据中重复搜索以查找下一个起作用的对象。
如果对象是透明的,则可以始终使用扫描线渲染(光线不会更改方向)。如果有反射或折射,则在光线开始弯曲之前会使用扫描线,在这种情况下,mental Ray 随后会切换到光线跟踪(如果已启用)。
扫描线算法的局限
虽然扫描线算法比光线跟踪更加高效,但它也有一些局限。仅当使用针孔摄影机时,才能使用扫描线算法,该算法不能用于使镜头着色器(如鱼眼镜头)或景深扭曲。
快速扫描线(也称为快速运动)
mental Ray 3.2 中引入了更快的扫描线算法 — 光栅化器(以前称为快速运动)。光栅化器算法加速了对以下场景的渲染:a) 运动模糊和 b) 具有较高深度复杂性的场景。该算法通过将颜色烘焙为三角形来提高运动模糊的速度。当三角形移动时,将对每个像素重用烘焙的颜色,三角形不必重新计算其新颜色就可以移动。但是,光栅化器也有自己的局限。由于反射计算是在进行着色时执行的(且着色只计算一次,然后重用),因此对象移动时,其反射和折射不会随对象而更改,而是始终保持恒定。