一种动态体积云的构建与绘制方法技术

技术编号:15191288 阅读:423 留言:0更新日期:2017-04-20 08:52
本发明专利技术提供一种动态体积云的构建与绘制方法。包括以下步骤:构建云层数据场;根据云层数据场绘制云层。本发明专利技术通过以Perlin噪声为基础噪声并叠加生成三维云层厚度场,再以厚度场为基础生成密度场,可以构造出各种三维体积云所需的形状及动态变化的形状,并通过加速的光深度和光照明计算方法获得高效率的云层绘制效果。

【技术实现步骤摘要】

本专利技术涉及计算机视景仿真
,尤其涉及对天空云层及其动态效果的模拟,具体涉及在一种动态体积云的构建与绘制方法
技术介绍
云层是户外场景中一个重要的组成部分,在大多数的小规模三维场景或者视点位于地面附近的场景的实时绘制系统中,云通常采用天空盒纹理进行绘制实现。如果视点处于天空中近距离观看云层,甚至进入云层之中,天空盒方法所绘制的结果就无法获得足够的真实感,此时就需要采用三维的云层绘制方法从而产生较为逼真的三维效果的云层特效。针对三维云层的表示与绘制方法中,文献(HarrisMJ,LastraA.Visualsimulationofclouds.Eurographics.2001:76~84)提出运用动态纹理映射加速渲染效果,即离线计算、在线渲染的方式。Dobashi等提出预计算每个Metaball的云阴影,然后应用Alpha混合进行纹理映射的方法(DobashiY,etal.ASimple,EfficientMethodforRealisticAnimationofClouds.SIGGRAPH2000:19~28)。齐越等基于Perlin(泊林)噪声原理进行了3D云绘制的初步研究(齐越,沈旭昆,段米毅,程惠琳.基于Perlin噪音绘制云的方法.系统仿真学报.2002,9:1204~1207),而文献(刘芳,刘贤梅,吴琼.三维场景中体积云的研究与实现[J].计算机技术与发展,2015(5):135-137.)也分别提出了三维体积云的表示与绘制方法。然而,现有技术中关于三维体积云的绘制方法在效率上仍存在不足,尤其是当面向飞行模拟器中飞行视景仿真应用时,如何构造表示出大规模、大面积的天空云层,并克服大规模体积云的绘制效率的瓶颈,是本专利技术需要解决的问题。
技术实现思路
针对上述情况,本专利技术的目的在于提供一种动态体积云的构建与绘制方法。本专利技术通过以Perlin噪声为基础生成三维云层厚度场,再以厚度场为基础生成密度场,可以构造出各种三维体积云所需的形状及动态变化的形状,并通过加速的光深度和光照明计算方法获得高效率的云层绘制效果。为实现上述目的,本专利技术采取的具体技术方案是:一种动态体积云的构建与绘制方法,包括以下步骤:1)预处理阶段,构建云层数据场;1-1)通过基础噪声叠加构建云层厚度场;1-2)根据云层厚度场构建云层密度场;2)在系统运行时阶段,根据云层数据场绘制云层;2-1)为云层数据场构造云层区域包络网格;2-2)绘制步骤2-1)构造的云层包络网格,在GPU中构造逐像素链表;2-3)将逐像素链表中的片元数据在GPU中按照深度从远到近排序,在包络网格内生成顺序的路径积分采样点;2-4)沿着每个像素的视线方向作路径积分,计算光深度及光照明,得到当前帧云层绘制结果;2-5)如果系统任务并未结束,则进入下一帧的绘制,即如果云层数据场发生了改变,则重复步骤2-1)至2-4),否则重复步骤2-2)至2-4)。进一步地,步骤2-1)包括:2-1-1)在基准云底面上生成二维网格,然后在该二维网格的每个顶点上采样云层厚度场;2-1-2)计算出每个顶点对应的云层下表面的位置,将每个顶点移动到对应的下表面位置上,并保持拓扑关系不变,生成下表面的包络网格;2-1-3)将每个顶点移动到对应的上表面位置上,并保持拓扑关系不变,生成上表面的包络网格;2-1-4)由上下表面网格共同构成云层区域的包络网格。进一步地,步骤2-1-1)包括:步骤i)通过GPU的面片裁剪功能,将顶点处采样到的云层厚度场的值作为裁剪距离,裁掉包络网格中厚度场为负值的部分;和/或步骤ii)将顶点处采样到的云层厚度场的值传递到像素着色器中,然后在像素着色器中丢弃厚度场为负值的像素。进一步地,步骤2-2)中所述逐像素链表包含GPU上形成的链表头指针缓冲区,节点缓冲区,节点计数器,逐像素链表的每个节点包含光栅化过程中生成的每个片元的深度信息及该片元对应的三角形是视点朝向信息,即正面或者反面。进一步地,步骤2-3)包括将每个像素位置对应的链表中的片元数据在GPU中按照深度从远到近排序,然后遍历这些片元数据,生成顺序的路径积分采样点;每遇到一个反面朝向视点的片元,就表示进入了云层区域;每遇到一个正面朝向视点的片元,就表示离开了云层区域。进一步地,步骤2-4)中计算光深度及光照明包括:针对每一个像素所对应的排序之后的像素链表,按照由远及近的顺序从链表中依次取出由(Bk,Fk)所组成的片元对,其中,Bk表示反面朝向视点的片元,Fk表示正面朝向视点的片元;由于该片元对中包含深度信息,其深度差作为近似的路径长度x,定义为光深度,并将光深度x值代入L(x)=αL0+(1-α)E中,计算出视线穿越第k朵云之后的光照;上式中,β为云层中的散射率,E为常量,表示云层中各处的等效环境光;重复上述过程直至计算完一条视线穿越的所有的云,并通过最后一朵离视点最近的云而进入到视点中,形成最终的光照值。进一步的,步骤1-1)中所述云层厚度场表示为多个Perlin噪声叠加的形式:其中,H0是云层基准厚度,P()函数表示采用Perlin噪声函数作为基础噪声,fi为第i个噪声的频率,wi为该噪声的振幅;Dg为全局的坐标偏移量,Di为第i个噪声的偏移系数。进一步地,构建云层厚度场过程中,通过如下设置:Dg为全局平移量,设置其随时间线性变化;Di为分层平移量,设置在采样不同噪声层级的Di各不相同;设置Di的值大于Dg的值大;实现构造随时间变化的动态云层。进一步地,构建云层厚度场过程中,将时间作为第三个维度,将基础噪声转换成三维Perlin噪声,实现噪声形态随时间变化的效果。进一步地,步骤1-2)包括:1-2-1)定义密度场大于零的区域,定义L为基准云底面的海拔高度,定义h为其上某处的厚度场数值,该处云层覆盖的区域为:hl=L-Al·hhu=L+Au·h其中,hl和hu分别为覆盖区域的下界和上界,Al和Au是预先设定的常量,Al·h和Au·h定义为该位置的云层下表面厚度和上表面厚度;1-2-2)定义归一化的厚度参数t,用于表示空间中某一点到基准云底面的距离d与该位置的云层下表面/上表面厚度的比值:设定t从0到0.2的区域为密度过渡区,得到相对密度q的表达:其中smoothstep函数为三次平滑过渡函数。本专利技术的优势在于,可以通过厚度场和密度场的灵活设置生成各种形状以及具有不同厚度、云高、云底高的云,同时可以模拟云的形状的动态变化;在体积云绘制过程中,本专利技术为了加速体积云绘制特效中的核心步骤光深度计算及其光照明计算,首先构造云朵的包络网格,并据此采用逐像素链表和片元深度排序方法实现积分路径裁剪,克服了以往采样不精确且效率低下的问题,从而加速整个云层的光照明计算及其绘制效率,能够获得较好的云层绘制特效。附图说明图1为本专利技术一实施例中的动态体积云的构建与绘制方法的实施流程图。图2为本专利技术一实施例中简单路径积分算法的采样路径示意图。图3为本专利技术一实施例中视线与基准云底面接近平行时简单路径积分算法的采样路径示意图。图4为本专利技术一实施例中构造云层区域包络网格示意图。图5为本专利技术一实施例中天空中云层区域的包络网格示意图。图6为本专利技术一实施例中绘制云层区域包络网格过程中构造逐像素链表示意图。图7为本专利技术一实施例本文档来自技高网
...
一种动态体积云的构建与绘制方法

【技术保护点】
一种动态体积云的构建与绘制方法,包括以下步骤:1)预处理阶段,构建云层数据场;1‑1)通过基础噪声叠加构建云层厚度场;1‑2)根据云层厚度场构建云层密度场;2)在系统运行时阶段,根据云层数据场绘制云层;2‑1)为云层数据场构造云层区域包络网格;2‑2)绘制步骤2‑1)构造的云层包络网格,在GPU中构造逐像素链表;2‑3)将逐像素链表中的片元数据在GPU中按照深度从远到近排序,在包络网格内生成顺序的路径积分采样点;2‑4)沿着每个像素的视线方向作路径积分,计算光深度及光照明,得到当前帧云层绘制结果;2‑5)如果系统任务并未结束,则进入下一帧的绘制,即如果云层数据场发生了改变,则重复步骤2‑1)至2‑4),否则重复步骤2‑2)至2‑4)。

【技术特征摘要】
1.一种动态体积云的构建与绘制方法,包括以下步骤:1)预处理阶段,构建云层数据场;1-1)通过基础噪声叠加构建云层厚度场;1-2)根据云层厚度场构建云层密度场;2)在系统运行时阶段,根据云层数据场绘制云层;2-1)为云层数据场构造云层区域包络网格;2-2)绘制步骤2-1)构造的云层包络网格,在GPU中构造逐像素链表;2-3)将逐像素链表中的片元数据在GPU中按照深度从远到近排序,在包络网格内生成顺序的路径积分采样点;2-4)沿着每个像素的视线方向作路径积分,计算光深度及光照明,得到当前帧云层绘制结果;2-5)如果系统任务并未结束,则进入下一帧的绘制,即如果云层数据场发生了改变,则重复步骤2-1)至2-4),否则重复步骤2-2)至2-4)。2.如权利要求1所述的动态体积云的构建与绘制方法,其特征在于,步骤2-1)包括:2-1-1)在基准云底面上生成二维网格,然后在该二维网格的每个顶点上采样云层厚度场;2-1-2)计算出每个顶点对应的云层下表面的位置,将每个顶点移动到对应的下表面位置上,并保持拓扑关系不变,生成下表面的包络网格;2-1-3)将每个顶点移动到对应的上表面位置上,并保持拓扑关系不变,生成上表面的包络网格;2-1-4)由上下表面网格共同构成云层区域的包络网格。3.如权利要求2所述的动态体积云的构建与绘制方法,其特征在于,步骤2-1-1)包括:步骤i)通过GPU的面片裁剪功能,将顶点处采样到的云层厚度场的值作为裁剪距离,裁掉包络网格中厚度场为负值的部分;和/或步骤ii)将顶点处采样到的云层厚度场的值传递到像素着色器中,然后在像素着色器中丢弃厚度场为负值的像素。4.如权利要求1所述的动态体积云的构建与绘制方法,其特征在于,步骤2-2)中所述逐像素链表包含GPU上形成的链表头指针缓冲区,节点缓冲区,节点计数器,逐像素链表的每个节点包含光栅化过程中生成的每个片元的深度信息及该片元对应的三角形是视点朝向信息,即正面或者反面。5.如权利要求4所述的动态体积云的构建与绘制方法,其特征在于,步骤2-3)包括将每个像素位置对应的链表中的片元数据在GPU中按照深度从远到近排序,然后遍历这些片元数据,生成顺序的路径积分采样点;每遇到一个反面朝向视点的片元,就表示进入了云层区域;每遇到一个正面朝向视点的片元,就表示离开了云层区域。6.如权利要求5所述的动态体积云的构建与绘制方法,其特征在于,步骤2-4)中计算光深度及光照明包括:针对每一个像素所对应的排序之后的像素链表,按照由...

【专利技术属性】
技术研发人员:李胜徐泽骅汪国平
申请(专利权)人:北京大学天津滨海新一代信息技术研究院
类型:发明
国别省市:天津;12

网友询问留言 已有0条评论
  • 还没有人留言评论。发表了对其他浏览者有用的留言会获得科技券。

1