MCPLive > 杂志文章 > 3D未来争夺战 光线追踪算法浅析

3D未来争夺战 光线追踪算法浅析

2010-01-28刘泽申《微型计算机》2010年1月上

显卡何时才能实时光线追踪?

光线追踪有着如此明显的优势,而且在实现方法上和现在的光栅化算法也没任何“不共戴天”之仇,那为什么我们至今仍然没有看到任何显卡能提供实时光线追踪渲染呢?答案首先是光线追踪惊人的运算量,即便光线追踪是并行度相当高的运算,在多内核时代计算机并行性能和内核数量几乎呈线性增长关系,但要实现每秒30帧的实时光线追踪计算,依然有很远的路要走。

根据Intel和Daniel的说法,要用光线追踪渲染出达到现代游戏的画面质量,同时跑出可流畅运行的帧数,每秒需要计算大概10亿束光线。这个数字包括每帧每像素需要大概30束不同的光线,分别用来计算着色、光照跟其它各种特效,按照这个公式,在1024×768这样的入门级分辨率下,一共有786432个像素,乘以每像素30束光线以及每秒60帧,我们就需要每秒能运算141.5亿束光线的硬件,而Intel双路4内核处理器每秒也不过只能处理830万束光线。


由2个FPGA组成的SaarCOR

虽然光线追踪算法有着极高的并行度,但光线追踪中主光线仅仅是为了判别多边形是否可见而存在,和传统光栅化的Z-Buffer计算方式一样,对画质不会有任何贡献。更要命的是,光线追踪的辅助光线每一条都没有任何相关性,这意味着包括各种缓存技术在内的“投机取巧”方式都没有用武之地,计算光线追踪辅助光线的所有的计算都将直接读取内存—这对于内存延迟和带宽来说都是惊人的考验。

在过去的几年间,显卡显存延迟的降低小得可怜。根据某显卡厂商的统计预期,在2004年显卡内存延迟大约在40ns左右,到了2014年显卡延迟也不过减少到了23ns—在10年间节省出来的17ns显然无法满足光线追踪技术的需要。而在这10年里,显卡的晶体管数量会从2.2亿只增加到22.37亿只。

既然传统的显卡架构和发展趋势,完全无法满足光线追踪算法的需求,那推倒重来会怎么样?2003年德国SaarLand大学就拿出了业界首个硬件加速光线追踪算法方案,这个被称作SaarCOR的光线追踪加速卡,使用FPGA(Field Programmable Gate Array现场可编程门阵列)堆砌,在66MHz的频率下就能获得和Pentium 4 2.5GHz相当的光线追踪性能。随后SaarCOR的研发人员接触到了IBM德国的技术人员,获得了一台拥有一枚CELL处理器的工程样机。在IBM技术人员的协助下,SaarCOR在短短两周的时间里就在这台机器上实现了全屏的实时光线追踪渲染效果。SaarCOR的研究人员目前已经在Cinema-4D上以插件方式实现了实时光线追踪。golem还透露了另外一个鲜为人知的消息,那就是SaarCOR其实获得了NVIDIA 2.5万美元的赞助,之前的F PGA原型就是在NVIDIA资助下进行的。SaarCOR至今未能量产,随后SaarCOR项目并入了OpenRT光线追踪开发项目中。

Caustic 1光线追踪卡采用PCI-E 1.0 x4接口,两块黑色散热片下边就是两颗传说中的“光线追踪处理器”(RTPU)。其实这些“处理器”只是简单的FPGA(现场可编程门阵列),运行频率100MHz,每颗搭配自己的一条64bit DDR2 SO-DIMM内存,另外蓝色散热片之下是PCI-E桥接芯片,总功耗约20W。

在2009年3月,光线追踪的困局,由一家叫Caustic Graphic的公司打破。根据该公司的说法,他们的算法之所以独特是因为它解决了传统光线追踪算法偏向随机性的问题。新算法大幅提高了光线追踪计算地局部性,但这部分的算法需要一颗协处理器来完成。Caustic Graphics的工程师们相当明智,他们对于该硬件的定位仅仅是一颗专注于光线追踪运算的协处理器,而绝不会干越俎代庖的蠢事—Shader之类的传统光棚化操作依旧由GPU来完成。

我们之前已经提及,实现硬件光线追踪加速的命门在于存储子系统,Caustic展示的Caustic 1号样卡仅仅搭配了一条64bit DDR2 SO-DIMM内存,这和RV770的GDDR5显存规格对比有较大差异。由于知识产权保护,Caustic Graphics没有披露他们是如何解决存储瓶颈的,但在一个包含500万个三角形(包括两辆汽车的360万个)的场景中,所有可见效果都是使用一块Caustic 1光线追踪卡程序化光线追踪渲染而来的,实时帧率大约为3fps~5fps——这个数字虽然已经数十倍领先于显卡,但austic Graphics坦言,完全实现实时光线追踪化的游戏引擎还得等很多年,并估计至少四五年后他们的硬件才能在1920×1200分辨率下达到60fps的有效帧率。

分享到:

用户评论

用户名:

密码: