CN106570929A - 一种动态体积云的构建与绘制方法 - Google Patents
一种动态体积云的构建与绘制方法 Download PDFInfo
- Publication number
- CN106570929A CN106570929A CN201610975202.7A CN201610975202A CN106570929A CN 106570929 A CN106570929 A CN 106570929A CN 201610975202 A CN201610975202 A CN 201610975202A CN 106570929 A CN106570929 A CN 106570929A
- Authority
- CN
- China
- Prior art keywords
- cloud
- cloud layer
- thickness
- pixel
- drafting
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Granted
Links
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/50—Lighting effects
- G06T15/506—Illumination models
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T15/00—3D [Three Dimensional] image rendering
- G06T15/005—General purpose rendering architectures
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T17/00—Three dimensional [3D] modelling, e.g. data description of 3D objects
- G06T17/05—Geographic models
Landscapes
- Engineering & Computer Science (AREA)
- Physics & Mathematics (AREA)
- Computer Graphics (AREA)
- General Physics & Mathematics (AREA)
- Theoretical Computer Science (AREA)
- Geometry (AREA)
- Software Systems (AREA)
- Remote Sensing (AREA)
- Image Generation (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明提供一种动态体积云的构建与绘制方法。包括以下步骤:构建云层数据场;根据云层数据场绘制云层。本发明通过以Perlin噪声为基础噪声并叠加生成三维云层厚度场,再以厚度场为基础生成密度场,可以构造出各种三维体积云所需的形状及动态变化的形状,并通过加速的光深度和光照明计算方法获得高效率的云层绘制效果。
Description
技术领域
本发明涉及计算机视景仿真技术领域,尤其涉及对天空云层及其动态效果的模拟,具体涉及在一种动态体积云的构建与绘制方法。
背景技术
云层是户外场景中一个重要的组成部分,在大多数的小规模三维场景或者视点位于地面附近的场景的实时绘制系统中,云通常采用天空盒纹理进行绘制实现。如果视点处于天空中近距离观看云层,甚至进入云层之中,天空盒方法所绘制的结果就无法获得足够的真实感,此时就需要采用三维的云层绘制方法从而产生较为逼真的三维效果的云层特效。
针对三维云层的表示与绘制方法中,文献(Harris MJ,Lastra A.Visualsimulation of clouds.Eurographics.2001:76~84)提出运用动态纹理映射加速渲染效果,即离线计算、在线渲染的方式。Dobashi等提出预计算每个Metaball的云阴影,然后应用Alpha混合进行纹理映射的方法(Dobashi Y,et al.A Simple,Efficient Method forRealistic Animation of Clouds.SIGGRAPH 2000: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·h
hu=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为本发明一实施例中生成顺序的路径积分采样点的示意图。
图8为本发明一实施例中天空云层绘制效果图。
图9a、图9b、图9c、图9d及图9e为本发明一实施例中视点逐渐穿越体积云的过程及其效果图。
具体实施方式
下面将结合本发明实施例中的附图,对本发明实施例中的技术方案进行清楚、完整的描述。
动态体积云的构建及绘制流程如下:
图1展示了体积云的构造及绘制流程。图中实线代表过程的执行顺序,而虚线代表数据的流动方向,矩形方框代表流程中的一个步骤,而斜平行四边形代表所产生的或者使用的数据。本发明的过程分为云层的构造和绘制两部分。云层的构造原理及其过程为:以Perlin噪声为基础生成三维云层厚度场,再以厚度场为基础生成密度场,从而形成了整个云层的数据场,其中云层可以随时间的变化动态更新,从而模拟时变的体积云;云层的绘制原理及其过程为:首先由云层数据场构造云层的包络网格,然后通过绘制云层包络网格形成在GPU(Graphics Processing Unit图形处理器)上的多个缓冲区,包含链表头指针缓冲区,节点缓冲区,节点计数器,它们构成了逐像素链表,通过一个GPU上的片元深度排序步骤,每个像素都获得了由远及近的严格的片元顺序链表,基于此片元顺序链表采用光深度计算和光照明计算方法,最终计算出每个像素的光照明并进行绘制得到一帧绘制结果,如果系统运行并未结束,可以进入下一帧继续进行绘制。绘制过程中,如果云层数据场没有发生变化,则不需要重新构建、构造包络网格;如果云层数据场发生了改变,则需要重新构建包络网格。
1.云层构建
1.1云层厚度场的构建
本发明将体积云建模为基准云底面上的有厚度的区域,因此生成云层密度场的基础是二维的云层厚度场,厚度场表示为多个Perlin噪声叠加的形式:
该公式表示了一系列不同频率的噪声的叠加,其中H0是云层基准厚度,P()函数表示基础噪声,从纹理中采样获得,fi为第i个噪声的频率,wi为该噪声的振幅;Dg为全局的坐标偏移量,调节该参数可以实现云层整体移动的效果;Di为第i个噪声的偏移系数。给不同频率的噪声使用不同的偏移系数,在卷动云层时各层噪声的移动幅度不同,可以实现云层形态的动态变化。
厚度场的取值范围为-1到+1。默认情况下,使用0作为有云/无云的分界阈值。即当厚度场数值大于0时,表示该位置有云,厚度场的数值与云层在该位置的厚度成正比;当厚度场数值小于0时,表示该位置没有云。实际应用中,可以通过调节该阈值来调整空中云层的覆盖率。
本发明实施例中共设计了9级噪声,频率依次为1,2,4…,128,振幅依次为1,1/2,1/4,…,1/128。由于实时计算中9级噪声叠加的时间消耗较大,因此根据实时需求的实施例可以使用基础噪声是前三级的叠加。预先叠加更多的噪声层级可以进一步提高计算性能,但是实时叠加噪声时能够使用的偏移系数Di也会相应变少,这会导致云层卷动的层次细节减少。在极端情况下,预先计算所有层级的噪声叠加,此时实时计算的性能最高,但偏移系数只有D0一个,云层只能做整体移动,无法实现细节变化。采用三层噪声是权衡效率与细节丰富程度后的结果。
1.2云层密度场的构建
自然条件下的云通常底面较平、上方起伏较大,根据厚度场构造密度场时也需要遵循这样的规律。假设基准云底面的海拔高度为L,其上某处的厚度场数值为h,那么该点处云层覆盖的区域,即密度场大于零的区域定义为:
hl=L-Al·h
hu=L+Au·h(公式2)
hl和hu分别为覆盖区域的下界和上界,Al和Au是预先设定的常量,Al·h和Au·h称作该位置的云层下表面厚度和上表面厚度。只要Al与Au相比足够小,就能保证云层有较平的底面。
为了方便引出密度场的表达式,引入归一化的厚度参数t,用于表示空间中某一点到基准云底面的距离d与该位置的云层下表面/上表面厚度的比值:
显然,在云层的上/下表面处t=0,在基准云底面处t=1。当h=0时该位置云层厚度为零,上式无意义,这种情况下定义t=0。
一般来说云层边缘处水珠密度比中间要薄,因此设定t从一区间例如0到0.2之间取值的区域为密度过渡区,该区间范围可根据需求设定,得到相对密度q的表达:
其中smoothstep函数为三次平滑过渡函数(可采用GLSL内置函数实现)。
根据相对密度可以计算出任意位置的散射率:
β=q·β0(公式5)
其中β0为预先给定的参数,表示云层中密度最大位置的散射率。通过调节此参数可以云层的整体透光率。
1.3云层的动态变化
云层的动态变化是指随着时间的变化,云层的外观形态会随时间连续变化。相对于依赖预先建模的粒子云效果,体积云效果的一个重要优势就是密度场的形态可以随时间动态变化。本发明基于密度场的云层动态变化效果用两种方法实现:
(1)调整基础Perlin噪声。
公式1中使用二维Perlin噪声作为厚度场的基础噪声。在一些实施例中,可以设计将时间作为第三个维度,将基础噪声转换成三维Perlin噪声,就能实现噪声形态随时间变化的效果。这样每帧需要根据当前时间重新计算Perlin噪声的形态,会带来一些计算上的开销。
(2)在叠加噪声时调整各层级的坐标偏移量。
公式1中Perlin噪声的坐标包含一个平移项DgDi。其中Dg是全局平移量,该变量的值随时间线性变化,可以实现随着时间推移噪声整体的平移效果;Di是分层平移量,采样不同噪声层级的Di各不相同,这样在调整Dg时各层噪声的移动幅度不同,最后的叠加得到的厚度场形态也会呈现随时间变化的效果。实践中通常将Di的值设定得比Dg的值大,因为Di代表的是高频信号,这样云层的整体形态平移较慢,但细节变化比较丰富。
2.云层绘制方法
2.1云层光照模型
云层中水珠的体积一般很小,吸收作用不明显,在绘制云层时通常不作考虑,绘制云层时主要考虑云层中水珠对光的散射作用。与海洋的光照模型类似,绘制云层效果时也假设光在云层中散射后很快达到各向同性的效果,因此绘制云层时也使用和海洋类似的等效环境光模型。在不考虑吸收作用的情况下,近似认为云层中各处的等效环境光为常量E。因此光在云层中的传播可以表示为:
上式中β为云层中的散射率,根据云层中的水珠密度分布,散射率在云层不同位置的散射率一般不同。上式忽略了环境光在4π球面角上的积分,因为在E是常量的条件下总是可以通过调整E的大小达到和该积分等价的效果。给定初始条件L(0)=L0,由上式解得:
上式中出现的光线传播路径上的散射率积分,其中x为积分路径的长度,称作该路径的光深度(optical depth)。令那么上式可写为:
L(x)=αL0+(1-α)E(公式8)
注意到该公式与GPU光栅化单元的alpha(不透明度值)混合的计算方法相同,在绘制时可以利用这一特性稍微减少一些像素着色器中的计算量。
2.2光深度计算及光照明计算方法
整个云层的绘制过程中,最核心的就是计算光深度以及相应的光照明结果,由上面的公式8可知,只要光深度被计算出来之后,光照明自然而然就可以得到。计算光照明和光深度的最简单方法是沿着每个像素的视线方向作路径积分。首先从视点位置沿着视线方向发出一根射线,假设该射线与云层密度场区域的上下界,即海拔高度L+Al和L+Au的两个平面(如果考虑到地球的曲率,其实是两个曲面)交于A和A′。将线段AA′等分为m段,假设每段长度为l,在每段的中点位置采样散射率βi,然后以βi·l作为该段的光深度。将每一段的光深度求和后得到整个积分路径AA′上的光深度。
这种策略的问题在于整个积分路径上云层密度大于零的区域(下文中简称云层区域)非常少,如图2所示,两条平行线表示公式2中由L、Al和Au共同限定的云层的上下边界,中间有两个云层区域,用灰色标出。从视点O处向A-F点引出6条射线,射线与两条平行线相交的中间部分(AA′、BB′、CC′、DD′、EE′、FF′)就是计算光深度时需要进行路径积分的部分。可以看到DD′、EE′两条路径没有与任何云层区域相交,剩余的四条路径中,AA′、BB′、FF′与云层区域相交的部分较多,CC′只有一小部分与云层区域相交。在云层区域之外散射率为零,这部分积分路径对光深度没有贡献,但是却浪费了大量的采样点。
只有少量采样点落在云层区域内的另一个后果是路径积分的精度不高,这个问题在视线与基准云底面接近平行时尤为明显。如图3所示,图中有三段积分路径AA′、BB′、CC′,云层区域标为灰色。三段积分路径均被三等分,取每段等分的中点为采样点,采样点在图中用“×”标记。从图中可以看出,虽然三条积分路径都穿过了云层区域,但是只有AA′和CC′两条路径中有一个采样点落在了云层区域内,BB′路径上三个采样点都没有落在云层区域内。这就造成了沿AA′路径和CC′路径计算的光深度大于零,沿BB′路径计算的光深度等于零。视觉效果上,一朵完整的云在BB′路径处断开了,这是非常严重的错误。。
增加采样点可以缓解路径积分的精度问题,例如上面的例子中如果把积分路径由三等分改为四等分,BB′路径上就会有一个采样点落在云层区域内。但这无法从根本上解决问题,只要云层区域的分布足够稀疏,而且视线与基准云底面足够平行,在给定的积分路径划分规则下,总能找到一些视线穿过了某个云层区域,该视线上却没有采样点落入其中。
由此,本发明提出采用在GPU上逐像素片元排序的方式,可以实现精确的积分路径裁剪,使得每个采样点都落入云层区域内,该算法分为构造云层区域包络网格、绘制云层包络网格、形成排序链表并进行路径积分这三步:
1)构造云层区域的包络网格。
云层区域包络网格指的是一个封闭的多边形网格,其中包含了所有云层密度大于零的空间。该网格的构造方法为:
(1)在基准云底面上生成二维网格,然后在这个二维网格的每个顶点上采样云层厚度场。
(2)根据Al的数值,计算出每个顶点对应的云层下表面的位置。
(3)将每个顶点移动到对应的下表面位置上,并保持拓扑关系不变,这样就生成了下表面的包络网格。
(4)用相同的方法生成上表面网格。上下表面网格共同构成云层区域的包络网格。
上图4给出了一个构造云层区域包络网格的实例。图中AB是基准云底面上的网格的一个截线,这条截线上连同A、B在内共有7个顶点。A、B处云层厚度场数值刚好为零,因此这两个点不作位移;其余的五个点上云层厚度场不为零,这五个顶点需要向上和向下移动,在基准云底面上下各生成五个顶点,构成包络网格的上表面和下表面。实际场景中基准云底面上的网格顶点不太可能刚好落到云层厚度场为零的位置。此外,如果网格上某个顶点对应的云层厚度场的值为负数,按照正常流程计算顶点位移,会造成下表面的顶点移动到基准云底面之上,上表面的顶点移动到基准云底面之下的情况。为了避免这些情况影响云层区域包络网格的生成,可以采取以下两种手段:
使用GPU的面片裁剪功能,将顶点处采样到的云层厚度场的值作为裁剪距离(即GLSL中的gl_ClipDistance变量),裁掉包络网格中厚度场为负值的部分。
将顶点处采样到的云层厚度场的值传递到像素着色器中,然后在像素着色器中丢弃厚度场为负值的像素。生成的网格如图5所示。
2)绘制云层区域包络网格。
绘制上一步生成的包络网格,采用(Jason C Yang,Justin Hensley,Holgeret al.“Real-Time Concurrent Linked List Construction on the GPU”.In:ComputerGraphics Forum,2010:1297–1304.)中的方法,在GPU中构造逐像素链表,其中包含了GPU上形成的链表头指针缓冲区(与帧缓冲的维度大小一致,其元素为指向节点缓冲区中作为链表头的节点),节点缓冲区(存储每一个片元所对应形成的一个节点),节点计数器(节点缓冲区中当前节点的数目),过程如图6所示,图中,逐像素链表并未排序。最为重要的是,本发明方法所设计的逐像素链表节点中除了存储光栅化过程中生成的每个片元的深度信息之外,还存储该片元对应的三角形是正面朝向视点(即正面,图中的F1、F2、F3)还是反面朝向视点(即反面,图中的B1、B2、B3,定义包络网格上面向视点的面为正面,背向视点的则为反面。)
3)排序像素链表,在包络网格内部进行路径积分。
将屏幕上每个像素位置对应的链表中链表节点的片元数据在GPU中按照深度从远到近排序,然后遍历这些链表节点,如图7所示,生成顺序的路径积分采样点(用“×”表示)。在遍历过程中,每遇到一个表示反面朝向视点的片元,就表示进入了云层区域;每遇到一个正面朝向视点的片元,就表示离开了云层区域。这样,每一对相邻的反面/正面片元就表示一个连续的云层区域。在这些区域中执行密度场采样就能得到比较精确的光深度积分结果。
4)计算光深度和光照明。
针对每一个像素所对应的排序之后的像素链表,按照由远及近的顺序(如图7中所示,从最远处的1号云朵开始)依次取出由(Bk,Fk)所组成的片元对,由于该片元对中包含了深度信息,其深度差可以作为近似的路径长度x,以此可以按照“云层光照模型”中所示的方法计算光深度,并将光深度值代入公式8中,从而计算出视线穿越第k朵云之后的光照。如此过程一直持续到计算完一条视线穿越的所有的云,并通过最后一朵离视点最近的云而进入到视点中,形成最终的光照值。
3.云层绘制效果
图8展示了本发明一实施例中体积云的绘制效果,四幅图分别展示了四个顺序时刻的云的形态。从图中可以看出随时间流逝造成的云的位置漂移和形态变化,也可以看到由于采用了精确的积分路径检测,大片空白区域中散布的小片云层区域也能准确地表现出来。
体积云可以实现在穿越云层时视觉效果的平滑过渡,这是该方法与基于粒子和公告板的云层绘制方法相比的一个非常明显的优势。图9a至图9e展示了视点从云层之外进入云层然后穿出云层的情景,可以看到整个过程中云层保持了一致的观感效果。图9a中视点位于云层外,图9b中视点即将进入云层,图9c中视点位于云层中,图9d中视点即将穿出云层,图9e中视点穿出云层。
显然,所描述的实施例仅是本发明一部分实施例,而不是全部的实施例。基于本发明中的实施例,本领域普通技术人员在没有做出创造性劳动前提下所获得的所有其他实施例,都属于本发明保护的范围。
Claims (10)
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)中计算光深度及光照明包括:针对每一个像素所对应的排序之后的像素链表,按照由远及近的顺序从链表中依次取出由(Bk,Fk)所组成的片元对,其中,Bk表示反面朝向视点的片元,Fk表示正面朝向视点的片元;由于该片元对中包含深度信息,其深度差作为近似的路径长度x,定义为光深度,并将光深度x值代入
L(x)=αL0+(1-α)E
中,计算出视线穿越第k朵云之后的光照;上式中,β为云层中的散射率,E为常量,表示云层中各处的等效环境光;
重复上述过程直至计算完一条视线穿越的所有的云,并通过最后一朵离视点最近的云而进入到视点中,形成最终的光照值。
7.如权利要求1所述的动态体积云的构建与绘制方法,其特征在于,步骤1-1)中所述云层厚度场表示为多个Perlin噪声叠加的形式:
其中,H0是云层基准厚度,P()函数表示采用Perlin噪声函数作为基础噪声,fi为第i个噪声的频率,wi为该噪声的振幅;Dg为全局的坐标偏移量,Di为第i个噪声的偏移系数。
8.如权利要求7所述的动态体积云的构建与绘制方法,其特征在于,构建云层厚度场过程中,通过如下设置:Dg为全局平移量,设置其随时间线性变化;Di为分层平移量,设置在采样不同噪声层级的Di各不相同;设置Di的值大于Dg的值大;实现构造随时间变化的动态云层。
9.如权利要求7所述的动态体积云的构建与绘制方法,其特征在于,构建云层厚度场过程中,将时间作为第三个维度,将基础噪声转换成三维Perlin噪声,实现噪声形态随时间变化的效果。
10.如权利要求1所述的动态体积云的构建与绘制方法,其特征在于,步骤1-2)包括:
1-2-1)定义密度场大于零的区域,定义L为基准云底面的海拔高度,定义h为其上某处的厚度场数值,该处云层覆盖的区域为:
hl=L-Al·h
hu=L+Au·h
其中,hl和hu分别为覆盖区域的下界和上界,Al和Au是预先设定的常量,Al·h和Au·h定义为该位置的云层下表面厚度和上表面厚度;
1-2-2)定义归一化的厚度参数t,用于表示空间中某一点到基准云底面的距离d与该位置的云层下表面/上表面厚度的比值:
设定t从0到0.2的区域为密度过渡区,得到相对密度q的表达:
其中smoothstep函数为三次平滑过渡函数。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610975202.7A CN106570929B (zh) | 2016-11-07 | 2016-11-07 | 一种动态体积云的构建与绘制方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN201610975202.7A CN106570929B (zh) | 2016-11-07 | 2016-11-07 | 一种动态体积云的构建与绘制方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN106570929A true CN106570929A (zh) | 2017-04-19 |
CN106570929B CN106570929B (zh) | 2020-02-07 |
Family
ID=58540076
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN201610975202.7A Active CN106570929B (zh) | 2016-11-07 | 2016-11-07 | 一种动态体积云的构建与绘制方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN106570929B (zh) |
Cited By (15)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN107943891A (zh) * | 2017-11-16 | 2018-04-20 | 广州鑫燕网络科技有限公司 | 一种基于图形化的传播关系分析方法、系统及装置 |
CN109461197A (zh) * | 2017-08-23 | 2019-03-12 | 当家移动绿色互联网技术集团有限公司 | 一种基于球面uv和重投影的云实时绘制优化算法 |
CN109727185A (zh) * | 2018-12-12 | 2019-05-07 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于网格的多gpu图形绘制系统管理方法 |
CN109887078A (zh) * | 2019-03-12 | 2019-06-14 | 百度在线网络技术(北京)有限公司 | 天空绘制方法、装置、设备和介质 |
CN110827391A (zh) * | 2019-11-12 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、设备及存储介质 |
CN111563947A (zh) * | 2020-03-25 | 2020-08-21 | 南京舆图科技发展有限公司 | 全球三维云的互动实时体渲染方法 |
CN111951362A (zh) * | 2020-07-01 | 2020-11-17 | 北京领为军融科技有限公司 | 一种基于三维噪声图的三维体积云渲染方法及系统 |
CN113160413A (zh) * | 2021-02-25 | 2021-07-23 | 北京大学 | 一种基于细胞自动机的实时动态云层绘制方法 |
CN114494550A (zh) * | 2021-12-30 | 2022-05-13 | 北京城市网邻信息技术有限公司 | 基于WebGPU的渲染方法、电子设备及存储介质 |
WO2022116659A1 (zh) * | 2020-12-02 | 2022-06-09 | 成都完美时空网络技术有限公司 | 一种体积云渲染方法、装置、程序和可读介质 |
CN114822215A (zh) * | 2022-05-11 | 2022-07-29 | 中海环境科技(上海)股份有限公司 | 一种基于移动大数据的噪声地图绘制方法及系统 |
WO2023273112A1 (zh) * | 2021-06-30 | 2023-01-05 | 完美世界(北京)软件科技发展有限公司 | 虚拟环境中容积云的光照确定方法、相关设备及存储介质 |
CN116188633A (zh) * | 2023-04-25 | 2023-05-30 | 之江实验室 | 一种仿真遥感影像生成的方法、装置、介质及电子设备 |
CN117523026A (zh) * | 2024-01-08 | 2024-02-06 | 北京理工大学 | 面向红外遥感成像的云雾图仿真方法、系统、介质及终端 |
CN117710557A (zh) * | 2024-02-05 | 2024-03-15 | 杭州经纬信息技术股份有限公司 | 一种真实感体积云的构建方法、装置、设备及介质 |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104091363A (zh) * | 2014-07-09 | 2014-10-08 | 无锡梵天信息技术股份有限公司 | 一种基于屏幕空间实时的体积云计算方法 |
CN104143205A (zh) * | 2013-05-11 | 2014-11-12 | 哈尔滨点石仿真科技有限公司 | 大规模真实感体积云的实时渲染方法 |
-
2016
- 2016-11-07 CN CN201610975202.7A patent/CN106570929B/zh active Active
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN104143205A (zh) * | 2013-05-11 | 2014-11-12 | 哈尔滨点石仿真科技有限公司 | 大规模真实感体积云的实时渲染方法 |
CN104091363A (zh) * | 2014-07-09 | 2014-10-08 | 无锡梵天信息技术股份有限公司 | 一种基于屏幕空间实时的体积云计算方法 |
Non-Patent Citations (4)
Title |
---|
KEN PERLIN: "An Image Synthesizer", 《ACM SIGGRAPH COMPUTER GRAPHICS》 * |
冯玉康 等: "基于GPU地球大气层和三维体积云仿真", 《计算机工程》 * |
刘芳 等: "三维场景中体积云的研究与实现", 《计算机技术与发展》 * |
李思昆: "《大规模流场科学计算可视化》", 31 August 2013 * |
Cited By (22)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109461197A (zh) * | 2017-08-23 | 2019-03-12 | 当家移动绿色互联网技术集团有限公司 | 一种基于球面uv和重投影的云实时绘制优化算法 |
CN109461197B (zh) * | 2017-08-23 | 2023-06-30 | 北京五一视界数字孪生科技股份有限公司 | 一种基于球面uv和重投影的云实时绘制优化方法 |
CN107943891A (zh) * | 2017-11-16 | 2018-04-20 | 广州鑫燕网络科技有限公司 | 一种基于图形化的传播关系分析方法、系统及装置 |
CN109727185A (zh) * | 2018-12-12 | 2019-05-07 | 中国航空工业集团公司西安航空计算技术研究所 | 一种基于网格的多gpu图形绘制系统管理方法 |
CN109887078A (zh) * | 2019-03-12 | 2019-06-14 | 百度在线网络技术(北京)有限公司 | 天空绘制方法、装置、设备和介质 |
CN109887078B (zh) * | 2019-03-12 | 2023-04-07 | 阿波罗智联(北京)科技有限公司 | 天空绘制方法、装置、设备和介质 |
CN110827391A (zh) * | 2019-11-12 | 2020-02-21 | 腾讯科技(深圳)有限公司 | 图像渲染方法、装置、设备及存储介质 |
CN111563947A (zh) * | 2020-03-25 | 2020-08-21 | 南京舆图科技发展有限公司 | 全球三维云的互动实时体渲染方法 |
CN111951362A (zh) * | 2020-07-01 | 2020-11-17 | 北京领为军融科技有限公司 | 一种基于三维噪声图的三维体积云渲染方法及系统 |
WO2022116659A1 (zh) * | 2020-12-02 | 2022-06-09 | 成都完美时空网络技术有限公司 | 一种体积云渲染方法、装置、程序和可读介质 |
CN113160413B (zh) * | 2021-02-25 | 2022-07-12 | 北京大学 | 一种基于细胞自动机的实时动态云层绘制方法 |
CN113160413A (zh) * | 2021-02-25 | 2021-07-23 | 北京大学 | 一种基于细胞自动机的实时动态云层绘制方法 |
WO2023273112A1 (zh) * | 2021-06-30 | 2023-01-05 | 完美世界(北京)软件科技发展有限公司 | 虚拟环境中容积云的光照确定方法、相关设备及存储介质 |
CN114494550B (zh) * | 2021-12-30 | 2022-11-22 | 北京城市网邻信息技术有限公司 | 基于WebGPU的渲染方法、电子设备及存储介质 |
CN114494550A (zh) * | 2021-12-30 | 2022-05-13 | 北京城市网邻信息技术有限公司 | 基于WebGPU的渲染方法、电子设备及存储介质 |
CN114822215A (zh) * | 2022-05-11 | 2022-07-29 | 中海环境科技(上海)股份有限公司 | 一种基于移动大数据的噪声地图绘制方法及系统 |
CN114822215B (zh) * | 2022-05-11 | 2024-05-31 | 中海环境科技(上海)股份有限公司 | 一种基于移动大数据的噪声地图绘制方法及系统 |
CN116188633A (zh) * | 2023-04-25 | 2023-05-30 | 之江实验室 | 一种仿真遥感影像生成的方法、装置、介质及电子设备 |
CN117523026A (zh) * | 2024-01-08 | 2024-02-06 | 北京理工大学 | 面向红外遥感成像的云雾图仿真方法、系统、介质及终端 |
CN117523026B (zh) * | 2024-01-08 | 2024-03-29 | 北京理工大学 | 面向红外遥感成像的云雾图仿真方法、系统、介质及终端 |
CN117710557A (zh) * | 2024-02-05 | 2024-03-15 | 杭州经纬信息技术股份有限公司 | 一种真实感体积云的构建方法、装置、设备及介质 |
CN117710557B (zh) * | 2024-02-05 | 2024-05-03 | 杭州经纬信息技术股份有限公司 | 一种真实感体积云的构建方法、装置、设备及介质 |
Also Published As
Publication number | Publication date |
---|---|
CN106570929B (zh) | 2020-02-07 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN106570929A (zh) | 一种动态体积云的构建与绘制方法 | |
CN105336003B (zh) | 结合gpu技术实时流畅绘制出三维地形模型的方法 | |
CN108537869B (zh) | 一种基于级联纹理的圆锥追踪动态全局光照方法 | |
CN104463948A (zh) | 三维虚拟现实系统与地理信息系统的无缝可视化方法 | |
CN102855400A (zh) | 一种基于投影网格的海洋表面建模及实时光照方法 | |
KR20090114860A (ko) | 3d 네비게이션을 위한 영상표현 방법, 장치 및 그 장치를포함한 모바일 장치 | |
CN102855662A (zh) | 海洋环境的可视化方法 | |
CN106570926B (zh) | 一种飞行视景仿真中高效的粒子云层绘制方法 | |
CN104143205A (zh) | 大规模真实感体积云的实时渲染方法 | |
CN110400366B (zh) | 一种基于OpenGL的实时洪水灾害可视化仿真方法 | |
CN115690344A (zh) | 海绵城市沙盘及天气模拟系统 | |
Du | Application of CAD aided intelligent technology in landscape design | |
CN104463937A (zh) | 基于不规则物体的动画生成方法及装置 | |
CN104299262B (zh) | 一种基于速度场流线的三维云模拟方法 | |
CN110232846A (zh) | 一种冲锋舟模拟驾驶方法、系统及相关装置 | |
CN117689805A (zh) | 一种基于噪声与粒子的大规模云景仿真方法 | |
Xu et al. | Accurate Design and Layout of Landscape Elements Based on Improved Particle Swarm Optimization | |
Nilsson | 3D Cloud Visualization In Real-Time | |
Nishita et al. | Modeling and rendering methods of clouds | |
Boulanger | Real-time realistic rendering of nature scenes with dynamic lighting | |
Stiver et al. | Sketch based volumetric clouds | |
Chen et al. | The merging of water droplets base-on metaball | |
CN117710557B (zh) | 一种真实感体积云的构建方法、装置、设备及介质 | |
Lachman | An open programming architecture for modeling ocean waves | |
Bajo et al. | A Comprehensive Method for Liquid-to-Solid Interactions |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |