实时光线跟踪与OptiX预研

发表于2016-02-02
评论5 2.9k浏览
  春节期间(2015年2月)除了抢红包,也会抽空思考点工作上的事情。现在的实时图形技术发展很快,一些游戏和游戏引擎,在光栅图形学的应用研究已经做到了一定高度,各种全局光方案,反走样技术,物理材质及灯光,…综合在一起就是各种复杂,《刀锋铁骑》也一直在各种借(chao)鉴(xi)。为什么搞这么复杂呐,原因很简答,就是光栅化。光栅化因为速度极快,实时渲染一直在朝这个方向发展,但是最近几年实时光线跟踪技术发展也相当快,感觉这个离线渲染领域的技术离游戏真的近了。

1、首先大概介绍下“光栅化”与“光线跟踪”


  光栅化是一种将几何图元变为二维图像的过程,是目前3D游戏成像主流算法,覆盖市面上几乎100%的游戏。
由于实时3D渲染程序要求对用户的即时操作作出迅速反应,通常要求每秒20帧以上的渲染速率(像《刀锋铁骑》这种竞技类动作游戏需要60帧☺),这也使得高效率的“光栅化”成为当今最受青睐的3D即时成像技术。
  “光栅化”的计算速度与“光线追踪”相比极快,不过由于它并非基于对物理光线的传递计算,因此对于现实中复杂的光照效果的真实模拟方面,“光栅化”有点无能为力。
  光线追踪并不是一项什么新鲜技术,多年来这种技术一直在离线渲染领域被广泛使用,像是电影特效的处理,但是由于光线追踪的计算量巨大,所以对于3D游戏等即时渲染领域,即使使用当时PC上最强劲的电脑(一般是使用CPU计算),渲染一帧简单的图像也需要耗费相当长的时间,还达不到即时3D渲染的标准。这也是即时3D渲染领域多年来一直朝“光栅化”方向发展的主要原因。

2、再来介绍一下NVIDIA的黑科技 OptiX
  NVIDIA® OptiX™是一个基于NVIDIA® CUDA™ 运算架构的光线追踪引擎,光线追踪计算速度极快,在GTX 680上大概达到了每秒350M条射线(实际上不同场景性能有差异,这是一个较大值).目前OptiX已经有3.5版本了,有了CPU模拟方式,不必须CUDA显卡了.下图基本解释了它的执行过程,Launch生成射线,Traverse计算射线线与场景相交,Shade做相交后的计算,细节看文档,这里不解释。


  简单的说,OptiX主要就做了一件事情,极快速的计算射线与场景相交,至于应用,除了渲染领域,其它物理碰撞,辐射研究,声音研究等均有价值。

3、最后用OptiX写个简单例子
  下面是一个OptiX例子微改了一下,后续会使用铁骑场景数据及材质测试做GI的预览(公司机器的GTX660显得有点单薄).
  在OptiX下计算下面的全局光,需要的代码非常少,用光栅化方式得到同样的结果灰常复杂。


  这是一个Path Tracing计算全局光的例子,里面有基于物理的材质和面光源,左边是完全漫反射材质(粗糙度1.0),右边”顶面””背面”和”地面”对应的粗糙度由高到低,反射也由模糊到清晰. 一般用Path Tracing产生参考图像来评估其它全局光算法,其本身计算量巨大,速度非常慢,但是上面的画面GTX760在512x512分辨率下面大约有9fps,算是近实时了(实际上有水分,移动时有很多噪点,因为是多帧积累的效果).
  “光线跟踪”直接用在游戏,在目前看来性能还差点(性能大概还差几十倍),但是混合光栅化和光线跟踪的方法有一定前途(有个赛车Demo用过,用OptiX计算准确反射,再与D3D互操作混合渲染),交互式全局光照编辑与一些应用计算(PVS,烘焙AO,烘焙GI等)是比较有实际价值的方向,后续有机会可尝试开发。

如社区发表内容存在侵权行为,您可以点击这里查看侵权投诉指引