真实地形快速建模方法和滑坡可视化技术与流程

文档序号:13032374阅读:444来源:国知局
真实地形快速建模方法和滑坡可视化技术与流程

本发明属于计算机图像处理技术与计算机动画生成领域,涉及真实地形快速建模的方法和基于布尔运算与刚体破碎的滑坡模拟方法。



背景技术:

最初对地形的模拟,是读取dem文件中的数据,将真实环境的坐标转换为计算机3d世界中的坐标逐一显示在屏幕上,从而得到了地形的点云模型。然而,这种方法得到的模型是离散的,不利于观察和做进一步的修正,而且当数据量较大的时候,这种方法速度较慢。因此,现在往往用3d建模软件来建立地形模型。

在3d建模软件中,图像的颜色数据可以转化为三维坐标数据,利用这一点,可以将地形高程图转化为三维模型,再根据实际影像资料进行调整,从而使模型更符合真实地形。

对地貌的模拟,可以在地表添加草木土石等自然景观模型,这个方法得到的结果通常很接近真实的自然环境,但难度较大,同时这些模型对滑坡过程的模拟也会产生影响,导致渲染速度变慢。

将平面纹理制作成uv贴图加到地形模型表面是另一个模拟地貌的方法。uv可以控制2d纹理在模型上的对应关系,在地形范围较大的情况下,不需要对自然景观进行细节模拟,通过uv贴图可以在地形表面绘制合适的纹理,从而表现出不同的地貌。

滑坡前后的山体网格大体上是一样的,只有很小的区域有差别,这是因为滑坡后地形起伏发生了局部的变化,因此只要得到发生了变化的区域就可以进一步得到滑坡体。

滑坡体的建立以布尔运算的结果为基础,通过对滑坡前后的山体表皮进行布尔差值运算,得到滑坡块表面,实体化后,经过细微调整,得到完整的滑坡体。布尔运算采用sutherland-hodgman算法,对多边形的每条边进行处理,最终得到新多边形。

滑坡的模拟主要基于山体的刚体模拟,通过滑坡块与山体的刚体在一定的力场条件下碰撞实现滑坡效果。刚体属性的破碎算法基本几何思想是泰森多边形(voronoidiagram)法。最早是用来根据离散分布的气象站的降雨量来计算平均降雨量的一种几何分割法。这种从离散数据到三角网的构建方法被封装于voro++等软件库中,方便后续的刚体破碎计算的调用。该方法的优点是:voronoi多边形的构造过程可以离线处理,得到的物体表面多边形结构可以在线使用而无须再细分。



技术实现要素:

本发明的目的是在3d建模软件blender中快速建立接近真实环境的地形模型并通过刚体破碎模拟来实现滑坡等自然灾害现象的模拟。

为此,本发明公开了一种能快速生成真实地形模型、模拟真实地貌环境并在此基础上进行基于布尔运算与刚体破碎的可视化滑坡模拟的方法,包括如下步骤:

1)将地形高程灰度图导入blender中,得到地形模型网格并对网格进行调整,自动合成纹理图片为地形曲面绘制uv贴图模拟不同地貌;

2)设计碎块生成管线,包括使用基于sutherland-hodgman算法的布尔运算得到滑坡体将碰撞的刚体基础化为点云,点云三角化后得到泰森多边形,并生成voronoicell模拟滑坡碎块;

3)贴合地形数据,生成碎块交互阻挡面,与碎块组合运算,生成连续帧动画。

附图说明

图1:流程图

图2:灰度图

图3:谷歌地球中的真实地形效果

图4:调整地形所使用的数据

图5:使用的纹理贴图及效果

图6:delaunay三角剖分算法

图7:voronoi多边形划分

图8:细胞分离示意图

图9:碰撞检测算法框架

具体实施方式

下面结合附图对本发明作进一步详细的说明。

图1为真实地形快速建模和滑坡模拟过程的流程图。下面将结合图1从两大部分对我们的方法进行详尽的描述。

步骤1:将地形高程灰度图导入blender中,得到地形模型网格并对网格进行调整,自动合成纹理图片为地形曲面绘制uv贴图模拟不同地貌:

将如图2所示的灰度图以导入平面的方式加载到blender中,并将该平面细分为若干网格,使用“置换”修改器可以快速将每个网格点的高度调整至与灰度数据成正比的位置。我们对细分次数和置换强度选取不同的值分别进行模拟,将生成的地形与如图3所示真实地形的影像资料(来源于谷歌地球)进行对比,综合考虑模型的细节效果和制作及渲染的速度,选择了细分次数为500、置换强度为0.088的组合。

由于卫星获取的数据时间与滑坡发生前后的时间相隔较远,地形数据和滑坡发生时相比有一定的变化,因此要根据相关论文、图片等资料,改变地形模型中某些网格点的高度,从而将滑坡发生时的地形重现,使地形模拟尽可能接近真实地形。如图4是调整地形所使用的数据。

材质是记录物体表面对光线影响的参数集合,在3d场景中通过计算场景中的光线和物体表面材质反射光线颜色的数学交互,可以使模型渲染后接近真实世界的物体。通常采用的方法是调整物体漫射和高光的颜色、强弱等数据来模拟材质,像水等透明的物体要另外调整光线追踪、z向透明等的alpha、高光、菲涅尔等参数。

在曲面的的任一点p(u,v),处,作出单位法向量并平行移动使它的始点与原点o重合,那么,的终点就落到以o为球心的单位球面s上,从而得到一点p’,我们称从∑到s的这一映射p→p′为曲面的高斯映射。是把整个曲面映射到单位球面上的,曲面∑在球面上的象是s上的一个点集σ。若已知曲面∑的方程为那么,∑在高斯映射下的球面象σ的方程为

上式即为高斯映射的向量表示式。

通过高斯映射,我们可以很方便地将纹理图从二维平面映射到球面形成材质球,再通过高斯映射的逆运算,将材质球的表面映射到地形曲面上,从而形成uv贴图。

在实际操作中,首先对地形模型的表面做uv展开,将3d坐标与uv坐标对应起来。为了使贴图更加精细,我们对地形表面的顶点进行分组,每个组对应一张uv贴图,这样使得纹理像素更高,渲染后更接近真实效果。对每个区域逐一设置好贴图后,使用画刷工具在纹理表面进行细节绘制,比如石头、裸露在外的土地等,使地形看起来更加真实。绘制完成后保存贴图,这样就实现地貌的仿真模拟。如图5,是使用的纹理贴图及其渲染效果。

步骤2:设计碎块生成管线,包括使用基于sutherland-hodgman算法的布尔运算得到滑坡体将碰撞的刚体基础化为点云,点云三角化后得到泰森多边形,并生成voronoicell模拟滑坡碎块:

sutherland-hodgman算法开始于输入列表中的主多边形的所有顶点。接着,对夹多边形的一条边在两个方向被无限延伸,并对主多边形的每条边都这样做。如果它们位于多边形线的可见侧,则从输入列表的顶点将其插入到输出列表中,与多边形边相交的点被加入到输出列表。对多边形的每条边进行重复迭代,并利用输出列表作为下一阶段输入列表。多边形的所有边都已经处理过后,新的多边形便形成。将sutherland-hodgman算法应用于两个多边形网格可以得到它们进行布尔运算后的结果。对滑坡前和滑坡后的地形网格做布尔运算,取滑坡前和滑坡后的差集,所得到的新网格就是滑坡体的数据。

点云三角化采取的是delaunay三角剖分算法,delaunay算法获得的最优三角形将尽可能使三角形的三内角程锐角。对离散点和形成的三角形进行编号,记录每个离散点所相邻的所有三角形编号,方便后续索引;再分别作三角形各边的垂直平分线,如图6,图中虚线表示各边中垂线。每个点周围都有一个由若干条垂直平分线围成的多边形,这些多边形是泰森多边形。具体过程是:分析模型,按照一定规则在其表面散布一些种子点,然后根据voronoi图的生成算法生成每个种子的delaunay三角形,连接delaunay三角形的外接圆心,得到模型表面的voronoi划分,并以此作为预破碎的基础。

在三维空间中,我们可以根据构造得到的voronoi图来计算物体的细胞划分。在构造单一的voronoicell时,要动态寻找邻近的离散点,每次新加入一个离散点相当于引入了一张切平面,接下来的过程如下:判断切平面是否与目前的voronoi细胞相交,如果相交,找出原来voronoi细胞上某条与切平面相交的边(特殊情况下,可能是点),由该边出发,有方向性的找出原voronoi细胞的面,重构voronoi细胞的边和顶点结构,并删去原voronoi细胞多余的边和顶点。

在一个三维物体中,以泰森多边形为基础,该算法会在新加入一个离散点v后,不断的重新计算新加入离散点的voronoicell,框定一个特定的影响区域,直到确定其它离散点离新加入的离散点v足够远,不会对目前构造出的voronoicell产生影响为止。不断重复这个过程,最终可以将物体分成多个voronoicell。这些最终得到的voronoicell就是刚体破碎轮廓,刚体遇到障碍物后会按照这个轮廓破碎成独立的碎块。如图7,是voronoi多边形划分的一个例子。

在划分好各碎块区域的voronoi图基础上,对相邻共面细胞进行分离处理。只需将除外表面以外的内部所有面在原位置增生一份,分别分给该面矢量两旁的细胞。如图8所示,为了区分明显,将两个边分开画,实际上它们处于同一个位置,只是碰撞时会分开。最终为每个块形成独立的网格细胞。根据碰撞的力,角度等参数形成不同的破碎效果。设置一个能使块分裂的力的阈值,为每个重叠面计算当下施加于该面的合力,一但冲击的合力在该面的矢量的垂直方向上的力大小达到该阈值,该面即分离。如果一个块的所有面都分离,则该块也完整分离。碰撞检测相关的内容见步骤3。

由于在布尔运算中网格无法被进一步细分,得到的滑坡体边缘可能会和真实地形有一定差别,因此要根据资料中的数据对滑坡体和滑坡体周围的山体进行微调,使得最终渲染得到的结果尽可能接近真实地形环境。

步骤3:贴合地形数据,生成碎块交互阻挡面,与碎块组合运算,生成连续帧动画:

破碎块在生成之后,需要与地形进行破碎计算。但使用原始的地形作为阻挡面进行直接计算,运算量大,容易产生拓扑上的错误,产生错误,因此需要根据原始地形数据生成简化的阻挡面,具体方法为:

(1)设置简化阻挡面的单位大小,以实际三角面片为单位;

(2)依次遍历地形三角面片,获取相应的三角面片数,计算平均法向量以及相应的边界点,尽可能多的连接外部的边界点生成一个平面,并旋转平面使其法向量对齐已经获得的平均法向量;

(3)遍历完成后获得对整个地形简化后的离散阻挡面,遍历所有的阻挡面,获取相邻的边界点,并且连接,最终获得完成的阻挡面。

pnew=f(p{t1...tm});(4)

如上所示,公式2中,t表示原始的地形数据,t表示三角面片;公式3中,e表示对原始数据进行划分后的结果,p表示一个三角面片生成的组,作为e的单位,m表示一个组的三角面片数;公式4中,使用函数f完成对一个组p的简化运算,即得到平均法向量,并通过组p的边界点拟合出一个新的平面,将其作为一个新的计量单位;公式5中,逐个获取新的面片,通过函数q操作连接相邻面片,获得整个简化后的阻挡面。

在整个滑坡模拟过程中,滑坡体逐渐下滑,在遇到障碍物的时候,会根据我们的算法破碎并以碎块的形式继续下滑,堆积在山体的河道上,这个过程中主要使用碰撞检测。碰撞检测的算法框架如图9。

在初步检测阶段,通过空间场景剖分快速确定可能存在发生相交的区域,过滤掉没有发生碰撞的物体。在详细检测阶段,进行更加精确的碰撞判断,处理多边形面片与基本体素之间的相交检测。

碰撞响应处理主要采用混合动力学方法,将分离出的碎片作为理想刚体处理,拥有四个状态变量,质心,质心速度,旋转方向矩阵a,角速度。这些状态变量的初始化由前面的模拟过程完成。设未破碎前的物体为父体,破碎后生成的碎片设为子体,则子体的状态变量分别如下:

a0=identity(7)

ω0=ωp(8)

l0=i0ω(9)

由此可以得到下一时间步每个状态变量的值,最终得到完整的动画过程。

在所有参数都设置完成后,调整摄像机移动路径,可以渲染出动画。该动画完整地展示了整个滑坡过程,较为准确地表现出滑坡前后地形的改变及滑坡过程中山体破碎的效果。

当前第1页1 2 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1