一种基于三维烟雾的实时模拟研究
2018-07-20邓定胜
邓定胜
摘要:随着当前电影行业及动画行业不断发展,对于烟雾模拟技术也有着越来越大的需求,因而研究烟雾实时模拟也就十分必要。在当前烟雾模拟中,在利用GPU的基础上可实现三维烟雾模拟,从而可使三维烟雾模拟真实感得以增强,达到更加理想的效果,使人们产生更好的视觉体验。本文主要就在GPU基础上实现三维烟雾模拟进行分析,以保证三维烟雾实时模拟能够得到更加理想的效果,增强其真实性。
关键词:GPU;三维烟雾;实时模拟
中图分类号:TP311 文献标识码:A 文章编号:1009-3044(2018)13-0211-02
A Real-Time Simulation Study Based on Three Dimensional Smoke
DENG Ding-sheng
(School of Science and Technology,Sichuan University Nationalities, Kangding 626001,China)
Abstract: with the continuous development of the film industry and animation industry, the smoke simulation technology is also becoming more and more demanding, so it is necessary to study the real-time simulation of smoke. In the current smoke simulation, 3D smoke simulation can be realized on the basis of GPU, which can enhance the realistic sense of 3D smoke simulation, achieve more ideal effect, and make people have better visual experience. This paper mainly analyzes the 3D smoke simulation on the basis of GPU, in order to ensure that the real time simulation of three-dimensional smoke can get more ideal effect and enhance its authenticity.
Key words: GPU; three-dimensional smoke; real time simulation
三维烟雾实时模拟技术属于十分重要的一种计算机技术,并且在很多领域内均有着十分广泛的应用,发挥着十分重要的作用,因而进一步提升三维烟雾实时模拟技术水平也就十分必要,同时也是必然需求。就目前实际情况而言,基于GPU的三维烟雾实时模拟得以出现,并且得到越来越广泛的应用,且表现出十分明显的优势,因而了解并掌握基于GPU的三维烟雾实时模拟也就十分必要,有利于三维烟雾模拟技术的进一步更好发展,保证其得以更好应用。
1基于CPU的三维烟雾模拟具体流程
在本文研究中选择CPU+GPU方式对三维烟雾运动过程进行加速模拟,在实际工作中其具体流程如下:首先,在利用CPU的基础上对密度场及速度场进行初始化,而后获得速度场及密度场外力,在此基础上将相关数据由内存中向显存拷贝,之后对密度场及速度场进行计算,然后由显存中将相关数据拷贝至内存中,最后渲染密度场及速度场,在以上这些步骤完成后,开始下一时间步长。对于该模拟过程而言,其组成主要包括以下三个部分内容。
在实际模拟过程中,第一部分内容为CPU部分,其工作任务主要就是对密度场及速度场进行存储空间创建,并且实行初始化工作,在此基础上可得到外力源,也就能够在计算中提供较好依据,而后拷贝密度场及速度场内相关数据,将其放置于显存中,以提供较好依据在CPU上实现流体计算。第二部分为GPU部分,这一部分的工作主要就是在GPU上进行各个方面步骤的计算,主要有NS方程组外力项、扩散项、对流项以及投影过程与修正过程,从而可将不同时间步长流体中密度场及速度场相关数据获取,也就能够提供数据进行下一时间步长计算。第三部分为CPU部分,这一部分的工作内容主要就是由显存中将有关数据拷贝至内存中,利用OpenGL技术渲染密度场及速度场,从而显示在计算机屏幕上。
2 CPU端初始化工作
在本文研究过程中,对于流体区域將其离散成为笛卡尔坐标,对于处于离散化状态的有关物理量,其所处位置为每个网格单元中心点,在每个网格单元中均存在唯一对应笛卡尔坐标,也就是选择交错网格方法对流体计算区域进行离散。若网格大小为(M,N,O),为能够使访问效率得以提升,对于三维网格中相关物理量数据场,选择一位数组方式进行存储,其网格单元为(xi,yj,zk),其所对应相关一维索引值为xi+yj+zk·M·N。由于考虑到处理流体边界问题,在每个坐标轴之下,均向外扩展一个单元格,以对边界区域进行表示,也就是具备边界的网格单元数量为(M+2,N+2,O+2),因而网格单元的所对应相关一维索引值实际上就是xi+yj·M+2+zk·M+2·N+2。
在模拟流体前,需要将流体初始状态给定。在实际模拟过程中,为能使其复杂性得以降低,本次研究中特假设在模拟开始时,在整个流体区域中不同网格位置的相关密度值以及速度值均为0。在本文研究中,通过对简单人机交互进行设计,使流体区域旋转及控制外力源获取得以实现,其具体流程及步骤如下图。
由上图内容可知,通过对键盘进行利用,可将速度源或者密度源获取,其相关信息在主机端内存相关数组中进行存储。由于只有Tesla系列设备才能够对CUDA4.0中统一虚拟地址实际应用支持,因而在计算流体速度场及密度场前,需要应用CUDA技术由主机端内存中将相关信息向设备端显存中进行拷贝[1-2]。
3 GPU端相关工作
在设备端获取给流体施加的相关外力数据之后,需要在GPU上选择CUDA技术实行模拟。通过对NS方程组进行求解,可知GPU端的工作主要就是计算NS方程组中各项,在实际计算过程中,对于NS方程组中速度场计算而言,其所包括内容主要就是外力项、扩散项以及对流项与投影过程;而密度场计算所包括内容主要为外力项、扩散项及对流项。
3.1外力项目映射
依据实际计算可知,在每个网格单元中,其外力源均是独立存在的,因而适合利用CUDA技术实行求解。所以,本文研究中通过在GPU上并行执行方式对流体外力源进行加速计算。在实际操作过程中,依据GPU端内核函数处理过程,首先需要划分处理的相关任务,对于任务执行过程中Grid中block结构以及所有block中thread结构应当确定,在此基础上由thread负责处理每个网格单元中外力源计算。在本文研究过程中,对于Grid中block而言,其定义为一维结构,并且在每个block中thread同样为一维结构,在每个block中共包括256个线程。对于Grid中block结构及block中thread结构而言,其与流体区域间关系如下图。
由上图内容可知,对于流体域中每个小区域而言,均由block块实行处理,而对于小区域中网格单元,额利用对应block块中线程实行处理。
3.2 扩散项、对流项及投影映射
在本文研究中,在GPU上利用CUDA技术计算扩散项、对流项及投射过程。依据GPU端内核函数具体处理过程,首先需要划分处理任务,对于执行任务中Grid中bloc结构及每个block中相关thread结构进行确认。对于扩散项、对流项及投射过程,均选择相同CUDA两层架构体系,对Grid中block,将其定义为二维结果,而对于block中thread而言,将其定义为三维结果,在每个block中的线程共有8·8·8个。在受到外力作用情况下,对于流体中相关网格单元而言,其密度及速度均会出现一定变化,从而导致扩散现象产生。另外,在速度场中流体密度及速度也会有对流作用发生,从而导致有对流现象产生,本文研究中选择半拉格朗日方法求解该过程[2-3]。在流体局部区域内,将初始速度场及密度场给定之后,可得到三维烟雾模拟效果图,如下图。
4 结语
三维烟雾模拟技术作为一项现代化技术,有着十分广泛的应用,并且表现出十分重要的作用。本文通過对基于GPU的三维烟雾实时模拟进行分析,阐述实际操作流程,最终得到三维烟雾模拟效果。作为相关专业人员,应当对这一技术加强了解及掌握,以对其进行更好应用。
参考文献:
[1]吕梦雅,翟松青,唐勇,等.风环境下烟雾的实时模拟[J].小型微型计算机系统,2012,33(01):165-168.
[2] 隋连升,葛靖青,程荣刚.三维烟雾的实时模拟[J].计算机工程与应用,2011,47(14):174-176+179.
[3] 陈阁,何伟,李云飞.基于GPU编程的三维烟雾实时渲染[J].微电子学与计算机,2010,27(06):89-91+96.