基于光线跟踪的焦散模拟生成算法
2017-03-30许申益蒋聪
许申益,蒋聪
(长春理工大学计算机科学技术学院,长春 130022)
基于光线跟踪的焦散模拟生成算法
许申益,蒋聪
(长春理工大学计算机科学技术学院,长春 130022)
针对普通光线跟踪无法绘制出焦散效果的情况,提出了基于光线跟踪的焦散模拟生成算法。该算法首先从光源位置对场景进行绘制跟踪并获得焦散数据,接着将焦散数据通过坐标变换投射到正常视点的屏幕中,并与正常视平面上原有的亮度值进行叠加,从而生成具有焦散效果的图像,最后使用高斯滤波方法对图形进行滤波处理获得最终图像。通过对比,焦散模拟生成算法比普通的光子映射方法在效果差别不大的情况下帧速率有了明显的提高。实验表明,基于光线跟踪的焦散模拟生成算法可以逼真地绘制图像,同时能达到较高的帧数率。
光线跟踪;焦散;真实感;帧速率
焦散是在生活中常见的一种光学现象,它广泛地存在于具有透明物体的场景中,在游泳池的水底和四周清澈的溪流水底散布的石头上均能看到焦散现象。光线经透明物体进行传播时会发生折射,当这个透明物体的表面不平整时,光线经二次折射后最终会在部分区域发生汇聚,这些汇聚区域由于接受的光能比周围区域多,具有较高的亮度,从而形成了焦散效果。
焦散绘制在虚拟场景绘制、电影特效绘制、场景模拟、虚拟装配等各种仿真领域有着广泛的应用需求。作为一种经典的全局光照效果,焦散的逼真绘制对提升虚拟场景的真实性具有非常重要的意义。全局光照技术虽然可以实现焦散的逼真绘制,但由于全局光照算法所需的开销非常大,因此传统的全局光照算法往往只能用于离线的图像渲染。
光子映射算法问世于20世纪90年代,是一种常用的全局光照算法,可以较好的模拟焦散、辉映(Bleeding)、间接光照等多种全局光照效果。光子映射方法是一种需要两遍绘制的算法,第一遍从光源位置发射光子并跟踪和记录光子在场景中数次反射或折射的数据,第二遍从视点位置进行绘制。在绘制某一个像素时,首先收集这个像素周围某一范围内的所有光子,并对它们的值进行累加,得到这个像素点的颜色值。光子映射算法诞生后受到了广泛的关注,很快成为一种主流的全局光照算法。
近年来,实时真实感图形绘制是计算机图形学研究的焦点。为了使绘制的图像具有较高的真实性,可以采用光子映射的方法进行绘制,但由于光子映射需要发射大量的光子,这使得计算机的开销大大增加,严重影响了图像生成的速率。相比之下,光线跟踪具有较高的速率,但由于光线跟踪的光线是从相机位置出发,向屏幕中的每个像素发出一条光线,接着对每条光线进行跟踪并最终统计亮度,而焦散是光经过折射或反射导致光线的集中某些区域而形成的亮斑,因此在正常的光线跟踪的情况下无法形成焦散的效果。本文通过焦散模拟生成算法跟踪经过折射或者反射的光线,并记录最终光线与场景最终交点的位置和该点的亮度值。然后将得到的结果经过坐标变换后两次遍历所得数据对应相同的场景位置,将这两个结果组合后产生了具有焦散效果的图像,同时具有较高的帧速率,最后通过滤波将图像中存在的噪声去除得到与光子映射下几乎相同的效果。
1 相关工作
对于焦散绘制效果的研究已经有近30年的历史了,由于计算机硬件计算能力的限制,早期的焦散绘制只能离线进行。其中较为经典的焦散绘制算法主要有光束跟踪和粒子跟踪两类。
在焦散效果的绘制方面,Jenson[1]首先提出并利用光子映射对焦散进行绘制,该方法首先从光源位置向场景中发射大量的光子,然后从视点位置对光子进行收集。但该方法如果想产生较逼真的焦散效果,就需要从光源发射数百万个光子,而这些大量光子的跟踪和收集需要大量的计算机资源,因此该方法明显的缺陷是计算量太大。随后,又有学者提出了基于CPU集群的路径跟踪绘制算法[2],该算法将经典的路径跟踪算法做出了一定的改进,这虽然在某种程度上减轻了焦散效果绘制计算量较大的问题,但仍然很难实现焦散效果的实时交互式绘制,其中最主要受限的因素仍然是该方法在绘制时间和系统资源上开销过大。后来Wand和Strafer[3]提出了基于接受体表面采样的焦散绘制方法,该方法首先在可能形成焦散效果的漫反射物体表面采集一系列的点,然后对这些采样点及其周围的点进行绘制,最终模拟出焦散效果。该方法有一个明显的缺点:随着采样点的不断增加,算法的计算量也会随之急剧增加,该方法任然不能实时地绘制出较真实的焦散效果。随后Wyman等人[4]提出了基于预计算的焦散绘制方法,该方法首先将场景中初始的亮度值计算出来并存储在一个容量较大的共享存储器中,在绘制每一帧的过程中,直接从共享存储器中获取焦散信息,而不需要重复的计算焦散数据。该方法实现了实时地绘制出焦散效果,但它并不适用于动态场景下的焦散效果绘制,而且只支持可以采用预计算策略的三维场景绘制。最近Musawir A.Shah等人[5]提出了一种基于焦散图映射的焦散绘制方法,该方法类似于阴影映射算法:需要先生成一个焦散图,然后把焦散图直接贴到相应的三维场景中。该方法的优点是绘制速度快,计算量少,但它是基于OpenGL图形绘制流水线绘制的,并不能运用到光线跟踪的算法中。
在国内,李帅等人[6]基于图像空间的焦散实时逼真绘制算法研究。该算法将焦散的计算过程进行了分解并采用动态组织浮点纹理的方式将计算所需的几何数据从几何空间转换到了图像空间,可完全通过GPU编程实现实时逼真绘制。算法的主要优点是适用于可变形物体,可模拟由物体双面折射形成的焦散现象,算法效率受场景规模影响小并可方便地与阴影等绘制效果相结合。
2 算法综述
2.1 算法原理
通过研究光线跟踪算法的执行过程可以发现:在普通的光线跟踪算法下是无法绘制出焦散效果的。这是由于光线是从视点位置发出的,当检测到入射光线与漫反射面相交时,在交点处与光源所在的点用一条光线进行连接,如果光线穿过玻璃体,就直接把该点按处在阴影区处理,根本不会产生焦散效果[7]。
图1 基于光线跟踪的焦散效果生成原理图
为了产生焦散效果,本文提出了基于光线跟踪的焦散模拟生成算法,该算法总共分为四步:
第一步:在光源位置处对场景进行跟踪绘制,以完成与焦散相关的数据收集。
首先对场景进行两遍跟踪绘制,第一遍时将相机放在光源位置,把光线透过透明物体最终与漫反射表面相交的亮度值记录下来,形成只有焦散效果没有场景焦斑图;第二遍从正常视点进行跟踪并得到在正常光线跟踪绘制时的没有焦散的图像[8]。绘制场景的原理如图1所示。
第二步:坐标系变换与透视投影
借助图像我们可以分析出将上一步中产生的两遍绘制的图像进行合并后即可得到具有焦散效果的图像,但是在绘制中收集到的图像是在不同的坐标系下形成的,因此不能直接将它们合并。为了解决此问题,对第一遍形成的焦斑图全部投射到正常视点屏幕上(透视变换),与正常视平面上原有的像素值进行叠加,从而产生焦散效果。由于这一步需要确定焦斑投射正常视平面后,焦斑到底位于哪一个像素上,因此,需要知道正常视平面每一个像素中心的坐标值。正常视点的相机位于世界坐标系中,正常视平面的朝向是任意的,在世界坐标系下,很难确定视平面上每个像素中心的坐标值。而透视投影是同一个坐标系下进行的,有必要把光线透过玻璃与漫反射表面的交点的空间位置坐标从世界坐标系下变换到正常视点的相机坐标系下。将两遍绘制的图像都处于一个世界坐标系之后,就可以实施透视变换。透视投影原理如图2所示。而最终生成的焦斑图如图3所示。
图2 透视原理图
图3 焦斑图
第三步:图像合成
在上一步中,从世界坐标系转化到相机坐标系,然后根据相机在视点位置的一些参数进行了变换,使图像对应的位置相同。因此两次遍历生成的图像的位置将会一一对应,直接将颜色值相加即可得到初始焦散图像。
第四步:图像滤波
由于光线跟踪过程中生成的点都是离散的,这会使最终的可能图像在图像的边缘部分存在锐化和走样的情况,因此需要对最终的图像进行高斯平滑滤波处理,主要原理是在计算某一点亮度值时将附近的亮度值进行加权求平均。
2.2 算法实现
本文的三维场景是通过OptiX光线跟踪引擎绘制的[9]。OptiX是NVIDIA公司开发的一个基于CUDA架构的、面向对象的、通用的可编程并行渲染框架,其内核是对光线跟踪算法的抽象[9]。OptiX程序有两部分组成:主机API(host-based API)和CUDA C程序系统(CUDA C-based programming system)。开发语言是C、C++。
焦散效果生成算法如下:
第一步:在光源位置处对场景进行跟踪绘制,以完成与焦散相关的数据收集。
完成这一步需要对主机端和设备端代码进行如下处理:
(1)新建一个OptiX项目程序。在程序中创建的场景类,并绘制程序切入点(EntryPoint)的个数和光线类型均设定为3。为每个程序切入点绑定相应的光线产生程序(或触发程序)。例如第一个切入点绑定正常绘制场景所需要的光线产生程序;第二个切入点绑定在光源位置处采集焦散数据所需要的光线产生程序;第三个切入点绑定一个自定义的程序,用于坐标系变换、透视变换(用于确定漫反射表面上的焦斑投射到视平面后,交点在相机坐标系下的坐标值)、数据收集和平滑滤波。第一个切入点主要实现了对焦散数据进行采集;接着第二个切入点主要对焦散数据进行处理(坐标变换和滤波);最后一个切入点实现颜色叠加。而它们的光线类型分别为正常着色程序(Closest_Hit_Program)、阴影计算程序(Any_Hit_Shadow)、以及绑定焦散数据采集程序。
(2)在场景(InitScene)中设置在光源位置处的相机参数,使相机与视平面中心的连线穿过透明物体的中心。为了减少计算量,设置适当的视场角和分辨率(本程序的分辨率为300×300),使该相机的视平面正好包括住透明物体。
(3)在程序中创建三个缓存,第一个用于存储光源位置处相机对场景进行跟踪绘制所返回的漫反射表面上的焦散亮度值。第二个缓存将只有透过玻璃体并入射到漫反射表面的那部分光线所返回的亮度数据写入。第三个缓存用于存储光线透过玻璃体与漫反射表面的交点在世界坐标系下的空间位置坐标。定义缓存的大小与最终显示的图像大小相同,它用来存储从正常视点位置看到的焦斑图。最后将相应的缓存叠加就形成了最终图像。
第二步:坐标系变换生成焦斑图
这一步的主要目的是把采集到的焦散数据投射到正常的视点平面上显示出来。做法是:把漫反射表面上的焦散亮斑全部投射到正常视点屏幕上[10](透视变换),与正常视平面上原有的像素值进行叠加,从而产生焦散效果。由于这一步需要确定焦斑投射到正常视平面后,焦斑到底位于哪一个像素上,因此,需要知道正常视平面每一个像素中心的坐标值。正常视点的相机位于世界坐标系中,正常视平面的朝向是任意的,在世界坐标系下,很难确定视平面上每个像素中心的坐标值。如果在相机坐标系中确定每个像素中心的坐标值将会非常容易,因为视平面就位于垂直于W轴,距离坐标原点为-|W|的平面上,再根据相机参数的值,即可确定每个像素中心的坐标值。透视投影是同一个坐标系下进行的,有必要把光线透过玻璃与漫反射表面的交点的空间位置坐标从世界坐标系下变换到正常视点的相机坐标系下。等都处于一个世界坐标系之后,就可以实施透视变换。
第三步:颜色合成
图4 屏幕像素点
第四步:滤波
高斯滤波器是一类根据高斯函数的形状来选择权值的线性平滑滤波器,它是对整幅图像进行加权平均的过程,每一个像素点的值,都由其本身和邻域内的其他像素值经过加权平均后得到。高斯滤波公式为:
图5 图像颜色合成
在具体利用高斯函数进行滤波的时候,需要对高斯函数进行离散化,如图6所示,以离散点上的高斯函数值为权值,对采集到的灰度矩阵的每个像素点做一定范围邻域内的加权平均,即可有效消除焦斑图中噪声。
图6 图像滤波
图7 焦散绘制效果对比图
图8 焦散滤波前后
3 实验结果与分析
为了更好的对比分析,在本实验中将光子映射算法和本文提出的焦散模拟生成算法进行了对比,分别对四个不同的场景进行了绘制,如图7所示,表1是相关的实验结果数据。
从图7中可以看出,使用光子映射绘制出来的四个不同场景的图像与本文算法绘制的图像的效果非常接近,都能绘制出非常逼真的焦散效果。而从表1的数据分析中我们可以看出本文的算法在速度是相对光子映射有了较大的提高,例如在佛像中定点数约50多万,三角形数一百多万的场景中光子映射中只有两点多帧,而本文算法的速度达到了将近每秒7帧比光子映射快了两倍,在顶点数和三角形数较少的鱼和兔子模型中本文算法在速度上提高的更加明显本文提出的焦散模拟生成算法相比普通光线跟踪算法,也只是增加了焦散数据采样阶段。另外,采样相机在跟踪绘制的过程中,还忽略一些对焦散数据没有影响的多次反射光线。
表1 焦散算法绘制效率分析
但将几百万条光子缩减成1024×768个像素会造成算法所生成的原始焦散图中有很多噪声和锐化边缘。因此由采样不足导致的图像噪声和锐化边缘问题,需要用到滤波处理,本文使用了高斯平滑滤波来解决该问题[11]。滤波前后的焦散效果对比,如图8所示。由图可知,采取滤波前,焦散图像中存在着很多噪点和锐化边界[12],这造成生成的焦散图像与实际的真实效果有很大的不同。而经过滤波处理之后,原焦斑图中由焦散亮斑形成的细条纹和噪点被薄纱似的条带状亮度区域所取代[13],焦散图像也会变得更加平滑而柔和,效果看起来也更加逼真。
4 结论
本文给出了一种基于光线跟踪的焦散模拟生成算法,算法通过对焦散绘制过程进行合理分解,并通过矩阵变换实现数据投射的动态转换,可充分借助GPU的性能,实现焦散效果的快速绘制。该算法可以在光线跟踪下绘制出效果逼真的图像,与光子映射算法相比具有显著的效率优势。
本文算法的绘制效果的真实性有所欠缺,例如在具有镜面的场景中,无法在镜面中观察到焦散效果的影像。我们将在下一步工作中进一步深入研究这些问题。
[1]Ernst M,Akenine-Moller T,Jensen H W.Interactive rendering of caustics using interpolated warped volumes[C].Graphics Interface,2005.Ontario,Canada:Canadian Human-Computer Communications Society,2009:87-96.
[2]Biagio Cosenza,Carsten Dachsbacher,Ugo Erra.CPU costestimationforloadbalancinginparallelray tracing[C].In 8th International Conference on Computer Graphics Theory and Applications,Barcelona,2013:112-134.
[3]Wand E,Strafer N,Jensen H W.Interactive renderingofcausticsusingfastparallelconstructionof high-quality bounding[J].Computer Graphics Forum,2011,7(19):62-75.
[4]Chris Wyman,Scott Davis.Interactive image-space techniques for approximating caustics[C].Symposium on Interactive 3D Graphics and Games,2006.New York,USA:ACM Press,2006,9(21):153-160.
[5]Musawir Shah,Jaakko Konttinen,Sumanta Pattanaik. Caustics mapping:an image-space technique for real-time caustics[J].2012,7(29):63-74.
[6]李帅,郝爱民,朱磊.基于图像空间的焦散实时逼真绘制算法研究[J].系统仿真学报,2009,6(21):37-44.
[7]李瑞瑞,秦开怀,张一天.包含反射、折射和焦散效果的全局光照快速绘制算法[J].计算机辅助设计与图像学学报,2013,8(4):8-25.
[8]Havra V,Heraon R,Scidel H-p.Fast final gatheringviareversephotonmapping[C].Computer Graphics Forum(Proceedings of the IEEE Symposium on Interactive Ray Tracing,2007:1-10.
[9]Parker S,Bigler J,Dietrich A,et al.Optix:a general purpose ray tracing engine[J].ACM Transactions on Graphics,2010:231-254.
[10]Chunyi Chen,Huamin Yang,Hui Wang et al.Use of variance shadow map to accelerate ray tracing[C].Springer-VerlagBerlinHeidelBerg,2012:447-463.
[11]Zhang L,Wu X.An edge-guided image interpolation algorithm via directional filtering and data fusion[J].Image Processing,IEEE Transactions on,2011,15(8):2226-2238.
[12]梁鲜,曲福恒,杨勇,等.基于加权处罚的K-均值优化算法[J].长春理工大学学报:自然科学版,2015,38(4):132-137.
[13]秦雪,王欢,严晔,等.基于图像边缘检测的图像识别算法[J].长春理工大学学报:自然科学版,2015,38(4):127-131.
Caustics Simulation Algorithm Based on Ray Tracing
XU Shenyi,JIANG Cong
(School of Computer Science and Technology,Changchun University of Science and Technology,ChangChun 130022)
As general ray tracing cannot draw the caustics,we put forward simulation of caustics algorithm based on ray tracing algorithm.first we tracking caustics data from the position of the light source to the scene for rendering,then the data is projected to the normal view or screen,and with the normal plane of the original pixel values are superimposed,so generate images with caustics,finally using Gauss filtering method for graphics filter processing to obtain the final image.By contrast with the photon mapping method,this method can improve the frame rate significantly and the effect is almost the same.Experiments show that this method can achieve a higher frame rate,while the image effect is real.
ray tracing;caustics;authenticity;the frame rate
TP391
A
1672-9870(2017)01-0127-06
2016-05-04
许申益(1992-),男,硕士研究生,E-mail:1303230987@qq.com