光线追踪技术先驱讲述其全局光照研究历程
2018-10-15 12:28
编者按
您或许没听说过光线追踪,但您肯定见过它。此项图形渲染技术可模拟光线的实际传播方式,以打造现代电影中的超强特效。随着RTX实时光线追踪技术的问世,我们正努力加快此项复杂技术的应用速度、降低其应用难度,致力于为游戏、产品设计等各类应用带来电影级质感。作为光线追踪技术的先驱之一,J. Turner Whitted将为大家分享一段关于现代光线追踪技术产生的重要历程。他撰写的开创性论文《An Improved Illumination Model for Shaded Display》,为现代光线追踪计算机图形技术的发展奠定了基础。Whitted现已加入NVIDIA研究团队。
以下内容翻译自J. Turner Whitted撰写的文章。
光线追踪与全局光照
光线追踪的概念已诞生有数个世纪之久,相比之下,计算机图形学中全局光照的历史则较为短暂。
由Henri Gouraud和Bui Tuong Phong等人提出的早期计算机图形着色模型会根据光源和表面上某个点之间的空间关系来计算反射。随后,Jim Blinn基于Ken Torrance有关表面微观结构相互反射的研究,开发出了一款反射模型(后来,该反射模型由Rob Cook和Ken Torrance本人拓展为应用广泛的Cook-Torrance着色模型)。此后不久,Blinn和Martin Newell发表了一篇关于环境映射的论文,该技术会使用一张360度周围环境纹理图来代替光源。
就是这项环境映射技术的发展引起了我的注意。对茶壶表面反射的门窗进行的渲染,产生了我从未想象过的计算机生成图像的逼真效果。我对着这幅图凝视了几个小时,苦苦思索该如何提升图像的逼真度。环境映射确实存在很大的局限性,因为这项技术无法精确渲染目标物体附近的物体所反射的图像。
Turner Whitted在1979年发表的SIGGRAPH论文中提供了一幅类似贝尔实验大楼(位于新泽西州霍姆德尔镇)的建筑特写图,Whitted正是在此处完成了研究工作。
显然,Phong的模型注重局部效果,而Torrance的模型及其衍生模型均注重微观效果。如此看来,Blinn和Newell的模型自然会被视为注重“全局”效果。这便是“全局光照”之名的由来。自此,我们的问题也就演变为如何在不受环境映射限制的前提下应用此技术。
为什么光线追踪是全局光照的自然之选?
因为光线追踪的原理非常简单,本应成为在计算机图形学中实现全局光照效果的不二选择。来自IBM的Arthur Appel率先提出了用于生成图像的光线投射概念(ray casting),而来自MAGI的Robert Goldstein及其同事则实现了这项技术的商业化应用。MAGI 最初运用多次反射光线追踪来追踪容器内的辐射光线。我在早期的职业生涯中接触过海洋声学,依稀记得有一幅在海洋不同深度折射及从海洋表面反射的光线追踪声波图。最终,关于那幅图的记忆涌入我的脑海,我也由此清晰地认识到应如何改良Blinn和Newell提出的全局光照方法。
我对使用光线追踪唯一存疑的地方就是性能问题。实时交互中的计算机图形与电影中的图形之间始终存有些许不同。GE的月球着陆模拟器显然必须保持实时运行才能训练宇航员。David Evans和Ivan Sutherland的飞行模拟器以及犹他大学的类似研究中同样存在这一限制。Henri Gouraud的平滑着色基本能实现无成本的实时运行。在Bui Tuong Phong的学位论文中有一个章节鲜为人知,该章节包含了对实时着色的电路描述,尽管Phong着色法的大多数着色并未以实时运行。
帧缓冲器(frame buffers)的可用性显著改变了计算机图形的格局。以任意速度渲染图像,并在屏幕中查看静态图像成为可能,而不是尝试以CRT的刷新率渲染图像。Ed Catmull的细分算法与z缓冲区(z-buffer)结合使用,可在几分钟内(而非几毫秒)将复杂的曲面随机渲染到帧存储器中。而使用Blinn和Newell的环境映射法,每帧图像需要渲染几十分钟。这种逼真度变高而渲染速率变低的趋势,让我鼓足勇气去尝试一些渲染速率更低的方法。
添加阴影和折射效果
1978年,贝尔实验室的计算机系统研究实验室配备了一台PDP-11/45迷你计算机数字设备和一个每像素9位的帧缓冲器。这些资源与C编程语言的结合,为尝试通过光线追踪改良Blinn和Newell的方案营造出一个绝佳环境。(在尝试编写第一个C程序之前,我本该深入研读Brian Kernighan和Dennis Ritchie的编程手册。我是一名未经专业培训的汇编语言编程人员,对C语言支持递归并不了解。我费力地建立自己的堆栈,并手动编写多次反射递归式光线追踪程序,而没有使用该语言自带的递归函数。)
最终,相互反射球面图出现在了屏幕上。Newell和Frank Crow已在其早期的某些图像中包含方格图案,我觉得有必要仿效其做法。目前为止,效果很好。此时,我们便可轻松追踪射向光源的更多光线。生成阴影虽会耗费些许时间,但却只需额外执行少量代码工作,因此结果是值得的。
微小的编码变化可将一组光线转变为光线树。作为一名毫无计算机科学背景的电气工程师和硬件设计师,这是我从未处理过的数据结构。不过,真的有效。
1979年,Whitted利用计算机生成的开创性相互反射球面图诠释了光线追踪对于全局光照的重要价值。
如果我们能够取得那样的成就,何不放手一搏,就像在高中物理课上所了解到的那样加入折射效果呢?虽然这需要花些工夫,但结果却令人十分惊叹。
使用自适应超级采样救场
可以想象,这些新技术的执行时间难以掌控。为估算每幅图像的渲染时间,我将512×512的图像分辨率减少为原来的64分之一,并用手表计时。将此时间值乘以64,可相当准确地估算全分辨率渲染时间。但当我们需要消除全分辨率渲染出现的锯齿时,超级采样便是唯一切实可行的方法。不过,此法会让估算的渲染时间延长16倍。
我曾经为SIGGRAPH大会写过一篇论文,并要渲染论文中附带的插图。作品提交截止日期已经临近,但若使用16倍超级采样,预计渲染时间便会超出截止日期。我想到了堪比救星的自适应超级采样法,它只会在需要的地方增加额外样本。利用这一方法,我在几小时内便完成了此项工作,并且还在渲染插图时修改了论文,加入了这一新概念。
在几个月后的一次午餐中,贝尔实验室高管询问了运行实时光线追踪所需要的资源。那时,我们的新式VAX-11/780在计算简单场景的每个像素时需耗费1/60秒,因此我提议配备大量Cray超级计算机,按单个像素进行分配,并且在每台计算机上方分别安装一个红色、绿色和蓝色的灯泡。这听起来像个笑话,但结果并非如此。
实时光线追踪
在我1979年发表的光线追踪论文中,我曾提及多个处理器之间的任务划分。之后,我偶尔会听到有关光线追踪“不易并行”的言论。我在最初的论文中还简单提到,当一个球面恰好包含在另一个球面中时,要使用加速结构。几年后,我与Steve Rubin合作,将他的层次包围盒(hierarchical bounding volumes)概念应用于光线追踪技术中。此方法卓有成效,我们可以凭此渲染比漂浮在方格图案上的球面更为复杂的场景,但这仍然不是实时渲染。
光线和阴影:窗口的这个瓶子取自一篇发表于1980年的SIGGRAPH论文,该论文介绍了使用包围盒层次结构来加速光线追踪的方法。
之后的几年中,我编写了几个说明性的光线追踪器作为教学工具,但那基本都转移到其他主题上去了。庆幸的是,其他研究人员利用加速技术弥补了这一不足,让先前不切实际的算法变得切实可行。与此同时,我们还取得了其他进步,即生成的画质远远优于使用球面和方格图案所呈现的画质。
所有成果均得益于摩尔定律的发展顶端以及并行处理的可行性。恰似计算机图形领域的Rip van Winkle,我也会在近40年后顿悟,将实时光线追踪推向商业化。精尖人士将会为之付出心血并推动其实现。