光线跟踪(也叫ray tracing或者光束投射法)是一个在二维(
2D)屏幕上呈现
三维(3D)图像的方法。
一个光线
跟踪程序数学地确定和复制从一幅图像的光线的路线,但是方向相反(从眼睛返回原点).
光线跟踪被广泛用于
计算机游戏和动画,电视和
DVD制作,电影产品中。许多厂商提供用于
个人电脑的光线跟踪程序,在光线跟踪中,每一个光线的路径由多重直线组成,几乎总是包含从原点到场景的反射,折射和
阴影效应。在动画中,每一束光线的直线部分的位置和方向总是在不断变化,因此每一条光线都要用一个
数学方程式来表示,定义光线的空间路径为时间的函数,根据光线在到达屏幕前经过的场景中的目标的色素或颜色来分配给每一束光线一种颜色。屏幕上的每一个像素符合每一时刻可以回溯到源头的的每条光线。光线跟踪最先是由一个叫
数学应用组的组织中的科学家在20世纪60年代发明的。这些科学家中的一些人变得对光线跟踪作为一种艺术感兴趣,成为绘画艺术家,并建立了一个动画
摄影工作室,使用光线跟踪为电视和
电影制作3D电脑肖像和动画。
微软新一代
Windows Vista操作系统的发布,标志着
电脑游戏也将步入DirectX 10时代,微软在这一代游戏接口中添加了很多更复杂、也更真实的3D效果。光线追踪(Ray Tracing)就是其中重要的新技术。
光线追踪是一种“来自
几何光学的
通用技术,它通过追踪与
光学表面发生
交互作用的光线,得到光线经过路径的模型”。这个定义听起来有些晦涩,我们不妨说简单一点:首先假设屏幕内的世界是真实的,显示器只是一个完全透明的框框,那么屏幕内世界里应该有哪些光线会透过屏幕投入人的眼睛呢?光线追踪技术正是为了解决这个问题,以确保3D画面看起来更真实。
中学物理中就曾讲过光学知识,当光线投射到物体表面时,通常会同时发生3件事,那就是光被吸收、反射和折射。特别是当光被折射到不同方向时,光谱就会发生变化。无论怎样,光线总会经过一系列的衰减最后进入人的眼睛,光线追踪就是要计算出光线发出后经过一系列衰减再进入人眼时的情况,特别是对第一人称的游戏来说,这种技术非常有助于提高游戏场景的真实感。其实,这种技术并不是在DirectX 10时代才诞生的,它被提出、被研究已经超过30年了。近些年来也常被应用于电影
3D特效中。不过应用于电脑游戏中,还是从DirectX 10开始的。
现在游戏基本都没有应用光源追踪技术,光线都是由你能看到的亮光的物体自身发出的,电脑也不会计算每个光源从哪里来,到哪里去,更不会计算这些光源的相互叠加。只是通过及时演算物体阴影和控制光线的强弱来“模拟”人眼看到的真实情况。尽管很多采用了
HDR(高
动态范围)效果的游戏都有很不错的光影效果,但是那远非真实的光影效果。你很难通过影子和光线的遮蔽来判断,移动的目标(比如射击游戏中的敌人)所处的位置。
如图2 为游戏《
孤岛惊魂》的截图,海面上的倒影显然没有采用光线
跟踪技术,且不说山体在海中倒影的形状和面积是否合理,单就海中没有
椰子树倒影这一点就很不真实。实际上,在游戏中使用的光源越多,画面在越貌似华丽的同时,破绽也会越多,解决办法就是采用光源跟踪技术。
既然光线追踪技术能够营造出更真实的光影效果,而且大大超越人们靠想像模拟出的效果,那么为什么这么多年来,它都没有被运用在
3D游戏中呢?原因很简单,使用光线追踪技术的运算量异常庞大,这么多年来的历代显卡都无法胜任这项工作。
光学追踪技术在3D游戏中的应用尚属初级阶段,DirectX 10为这种技术的发挥提供了良好的基础,再加上新一代高性能显卡的推出,相信在不久的将来就会有更真实的光影效果呈现在您眼前。