《基于GPU加速的水下海洋环境光照模拟的研究》由会员分享,可在线阅读,更多相关《基于GPU加速的水下海洋环境光照模拟的研究(16页珍藏版)》请在金锄头文库上搜索。
1、 基于GPU加速的水下海洋环境光照模拟的研究 张雨侬秦勃梁艺摘要:该文依据FFT(快速傅立叶变换)方法创建水面三角网格,通过加载三角网格数据的计算水下光线,利用OpenGL在屏幕上绘制出水下海洋环境中的光照模拟效果,再使用GPU并行算法对计算过程进行优化加速,最后通过使用OpenGL的VBO(顶点缓冲区对象)和VAO(顶点数组对象)两种方式来实现两者的交互。通过优化数据结构及存储器分配,有效缓解了模拟方法在GPU架构上的性能瓶颈。实验结果表明,该方法能够实时逼真地模拟水下光照,与已有的方法相比处理速度有显著的提升。关键词:光照模拟;GPU加速;OpenGL;像素緩冲区对象;顶点缓冲区对象:TP
2、302 :A :1009-3044(2018)02-0271-05Research on Underwater Marine Environment Lighting Simulation Based on GPU AccelerationZHANG Yu-nong, QIN Bo, LIANG Yi(Department of Computer Science & Technology, Ocean University of China, Qingdao 266100,China)Abstract: In this paper, according to the FFT (Fast Fou
3、rier Transform) method to create the surface triangular grid, by loading triangular grid data to calculate the underwater light, using OpenGL on the screen to draw the underwater marine environment in the light simulation effect, and then use the GPU parallel algorithm pair The process of optimizati
4、on to accelerate, and finally through the use of OpenGL VBO (vertex buffer object) and VAO (vertex array object) in two ways to achieve the interaction between the two. By optimizing the data structure and memory allocation, effectively alleviate the performance bottleneck of the simulation method o
5、n the GPU architecture. The experimental results show that the method can simulate the underwater lighting in real time, and the processing speed is significantly improved compared with the existing methods.Key words: lighting simulation; GPU acceleration; OpenGL; pixel buffer object; vertex buffer
6、object1 概述近年来,“智慧海洋”逐渐成为海洋信息智能化发展最前沿的课题之一。水下光照的模拟是海洋虚拟场景模拟中的一个重要的课题,由于受到海洋复杂多变的环境影响,水下光线可能会产生折射、焦散、衰减等现象,而为了实现更加逼真的渲染效果,如何提高程序的并行性和计算效率、提高渲染的实时性成为了国内外学者研究的一个难点。2001年,Mitchell1和Dobashi2通过将视域体分割成平行的平面来渲染水下光束,每个分割平面上采用Godray模型计算光强积分,并将结果累加到帧缓存中,阴影通过映射来实现。2001年,Jensen3通过把视域体分割成32个切片来表示光强,使用体渲染技术来渲染,并且将一
7、个有动画效果的焦散纹理投射到每一个切片上。2002年,Iwasaki4,5,6描述了一种基于物理模型的水下光束渲染的方法,为每个光束构建一个平行六面体,并将其分割成若干子体,以准确计算各个子体的光强,最后把结果累加到帧缓存中;同样,采用阴影映射方式描述阴影。2013年,方贵盛7对近年来水模拟的方法进行了总结,介绍了一些水体渲染的加速和改进的方法。2009年Hilko Cords8在GPU上实现了浮动物体与水面的交互。2010年,Prashant Goswamiy9等人提出了一种交互式SPH(Smoothed Particle Hydrodynamics)仿真和渲染的方法来实现高质量的可视化。关
8、键粒子的邻域搜索基于Z索引和并行排序,利用模拟数据从SPH粒子云中有效地提取所有表面粒子,然后从表面颗粒光栅化后的部分快速生成距离场,最后使用最先进的GPU光线投射直接渲染距离场。2012年,NVIDIA在一个叫做Nalu10的演示中用图像过滤器来模拟Godray。它首先将光线多次折射后照射到Nalu身上和头发上,然后渲染阴影投射体,并将它们从明亮的像素中减去。最后,它可以快速的模糊图像,制造出Godray的幻象。2011年,G?abor Liktor和Carsten Dachsbacher11提出了一个新颖的自适应和可伸缩的渲染算法,可用于在表面或体积单散射焦散的实时渲染。利用了焦散图和三角
9、形体积的方法,捕获光空间中的镜面,但是跟踪光束而不是单个光子。光束从光源投射到场景的表面上自适应地生成,根据几何和光子分布的不连续性被迭代地改进,这使得其能够重建锐度体积的焦散图案,同时降低散焦区域的采样分辨率和填充率。endprint此外,有些学者使用了混合的方法来进行模拟。2010年,Nuttapong Chentanez12结合基于网格和基于粒子的方法,都在CUDA中实现。2015年,E Darles,B Crespin13等人利用光谱和混合模型以及使用了Navier-Stokes方程来表示海洋表面,同时关注模拟泡沫和喷雾等现象以及光与海洋表面的相互作用。近年来osgEarth也越来越多
10、地被用来渲染模拟海洋场景14。本文根据Iwasaki提出的基于物理模型的方法,结合最新的研究方法,对光照模拟的算法进行了改进,使用CUDA8.0版本将水下光照模拟的计算过程在GPU上实现,并在Maxwell架构下的GTX960和Pascal架构下的GTX1080上进行测试、分析,充分利用CUDA并行计算的性能优势,并通过使用OpenGL的VBO(顶点缓冲区对象)和VAO(顶点数组对象)两种方式实现两者的结合,优化数据结构以及存储器分配,测试证明了这种算法有效缓解了在GPU架构上的性能瓶颈,提高了程序执行效率。2 模型与方法2.1 水下光照模型在Iwasaki提出的基于物理模型的方法中,使用了照
11、明体来表现光柱。首先,计算到达视点的光强度时,必须考虑由于水颗粒的光的散射。如图1所示,当视点位于水内时,使用公式1计算水面上的点Q到达视点Pv的光的强度Iv()。如果观察光线与水面的法线之间的角度小于临界角,则强度IQ由公式2表示。如果观察射线与水表面的法线之间的角度大于临界角(48.6 度),则入射光是在水面(图1中的P2)上一点处的反射光。因此,把在点P2处到达视点的反射光认为是环境光,然后用环境光乘以P2Pv之间的水粒子的衰减比。光柱的强度由公式1的积分项计算。为简单起见,将积分项表示为Ishaft。如图2所示,水面被细分为三角形网格,然后计算每个网格点处的折射矢量。照明体由每个扫描平
12、面切片,并且照明体和扫描平面之间的交叉区域被定义为焦散三角形(如图3)。散射光的积分等于观察射线相交的焦散三角形的强度的总和。公式1的第二项Ishaft由公式3近似。0LIPexp-cldl=iIpidiexp-cli (3)再使用公式4计算点P处的散射强度IP()。IP=IsunTii,tiFp,exp-cls+Ia (4)渲染光柱的基本思想是显示照明体的阴影正面。通过沿着观察射线与照明体的交叉线段对散射光进行积分来计算照明体的强度。如图2所示,通过水平面将每个照明体细分为几个子体积。由于在水表面处折射的太阳光的强度被指数地衰减,使沿着子体积的散射光的强度可以线性近似。这也使得可以通过使用G
13、ouraud阴影功能来显示照明体。在Iwasaki的方法中,对每一个光柱都做如下处理:首先将光柱分为子体积,删除自相交的子体积,然后对子体积重复如下过程:(1) 将每个子体积细分为三个四面体。(2) 将每个四面体投影到屏幕上。(3) 将四面体分为两种情况,一种是投影到屏幕前的,一种是投影到屏幕后的,然后分别处理。(4) 计算三角形顶点的强度。(5) 显示三角形并在帧缓冲区中累加强度。该方法以在子体积内沿着观察射线聚集散射光的强度,通过绘制子体积的三个四面体来渲染光柱。然而通过这种方法计算四面体的光强虽然能够减少计算时间,但是却失去了计算的准确性,本文中采用直接计算的方法,通过计算光柱侧面中点来
14、绘制光柱,使得渲染的光柱更具真实性。如图4所示,在由六个点Pi(i = 1,.,6)组成的子体积中,关注P1P4和P3P6两条光线。由于光线照射到水下以后会发生折射,所以P1P4和P3P6两条光线并不一定共面,不能直接用四个顶点绘制成两个三角形来表现光柱。此时,我们用这四个顶点的坐标依据公式5求出一个中点的坐标位置。通过公式6计算子体积点Pi处的强度IPi。IPi=IsPiexp-cli (6)使用中点坐标和四个顶点分别可以绘制出四个三角形面,对于每一个子體积需要计算出三个侧面中点,绘制12个小三角形,最后渲染这些小三角形表现光柱。对于光柱的强度,我们使用公式7的积分值来进行计算。Ic=0TI
15、b-IaTt+Iadt=Ia+Ib2T (7)2.2 GPU架构图形处理器(GPU)是处理计算机图形的专用设备,近年来, GPU逐渐发展成为高并行度、多线程、多核的处理器,可以满足高清晰度复杂图形实时处理的需求。2007年6月, NVIDIA公司推出了统一计算设计架构CUDA(Compute Unified Device Architecture),作为一种GPU的编程方法,它提供了丰富的高性能数学函数库,可在NVIDIA的GPU上运行,目前已发布CUDA8.0版本。Pascal架构是NVIDIA公司推出的第6代GPU架构,相对于Maxwell架构,Pascal架构还引入了不少新技术,提供了更
16、强大的性能。(1) 拥有超高的浮点运算性能,提供了5.3Tflops双精度运算性能,9Tflops单精度浮点运算性能和21.2Tflops半精度运算性能。(2) NVLink技术,能支持多GPU间或者CPU与GPU间的通信,双向通信带宽可达到160GB/s。(3) 引入HBM2高速GPU存储架构,访存带宽同比增长3倍,最高可达720GB/s。(4) 引入统一存储空间,提供了CPU和GPU存储的统一地址空间。endprint(5) 计算抢占:允许计算任务在指令级被中断,可以打破kernel函数的运行时间限制,不必考虑超时问题。2016年5月7日,NVIDIA公司正式发布了新一代旗舰显卡GeForce GTX 1080。它采用Pascal架构,拥有2560个CUDA处理