首页> 中国专利> 基于表面积保持的3D网格变形方法

基于表面积保持的3D网格变形方法

摘要

本发明涉及基于表面积保持的3D网格变形方法,针对柔软物体3D模型的变形问题,给出了一种有效、快速、逼真的3D网格物体变形方法,属于计算机应用领域,特别是计算机图形学、虚拟现实技术领域。该方法将各种形式的变形看成由基本弯曲变形组成,各基本弯曲变形的局部区域进行独立计算,通过各区域的接合获得整体的变形结果;根据控制曲线划分变形区域,通过分离和合成变形基础网格和细节网格,提出与原网格模型无关的基础网格变形算法;使用阻尼振荡曲线仿真柔软物体弯曲变形内侧的表面皱褶;通过保持基础模型的顶点列长度实现表面积保持,提高网格变形的真实感,从而实现3D网格模型的变形。

著录项

  • 公开/公告号CN101383053A

    专利类型发明专利

  • 公开/公告日2009-03-11

    原文格式PDF

  • 申请/专利权人 北京理工大学;

    申请/专利号CN200810172233.4

  • 申请日2008-10-31

  • 分类号G06T17/00(20060101);

  • 代理机构11120 北京理工大学专利中心;

  • 代理人张利萍

  • 地址 100081 北京市海淀区中关村南大街5号

  • 入库时间 2023-12-17 21:36:28

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2013-12-18

    未缴年费专利权终止 IPC(主分类):G06T17/00 授权公告日:20120314 终止日期:20121031 申请日:20081031

    专利权的终止

  • 2012-03-14

    授权

    授权

  • 2009-05-06

    实质审查的生效

    实质审查的生效

  • 2009-03-11

    公开

    公开

说明书

技术领域

本发明涉及计算机图形学及虚拟现实技术,尤其涉及一种高效、逼真的3D网格物体变形方法,属于计算机应用领域。

技术背景

3D几何模型变形技术是计算机图形学中的重要技术之一,广泛应用于角色动画、交互建模、受力仿真和医疗手术等领域中。随着扫描技术和数据可视化技术的发展,模型的获取途径及表现能力越来越强,3D网格变形的应用也得到推广。一个好的3D模型变形方法通常追求三个目标:简单的用户操作、快速的变形计算和合理逼真的变形结果,为此国内外学者进行了大量研究。

在虚拟现实的表面模型中,几何形状的表达主要包括参数曲面表示、多边形表示、子分平面表示和内隐面表示四种表示方式,参数曲面表示方法使用B样条等表示曲面曲线,该方法方便进行复杂的变形处理,但不利于表示复杂拓扑结构的形体;多边形表示方法可以表示拓扑结构复杂的物体,但变形算法较繁琐;子分平面先将整个表面划分为多个多边形子表面,然后使用参数曲面表示每个子表面;内隐面类似于等值面,是在一个连续空间中,通过计算某一值的表面获得,内隐面表示方法主要应用于流体仿真等。

主流的变形方法有直接顶点控制方法,形状插值法(ShapeInterpolation)、自由体变形方法(Free-Form Deformation)、基本骨骼变形方法、细节保持方法(Displacement maps)和基于物理的变形方法(physicallybased animation)七类方法,其中形状插值法、自由体变形方法和基本骨骼变形方法应用最为广泛。

近年来,细节保持(Detail-Preservation)的网格变形方法越来越受到开发人员的重视。该方法提供了一个高质量模型变形的途径,由于变形处理常常会引起模型丢失尖角凸起等细节,导致模型表面变得平缓。细节保持方法将原始模型分离为一个分辨率较低的基础模型和若干个高变化率的细节模型,分别对其实行变形计算,然后再将二者合并实现最终的变形结果。对于变形结果的形状控制,主要采用基于控制曲线的变形方法、逆运动学求解变形方法、引入黎曼几何距离概念的变形方法等。

目前计算机图形学变形技术大多针对刚体变形、人物及动物角色变形,对于柔软物体变形的研究较少,尤其对于柔软物体的表面皱褶目前尚无法仿真实现。而柔软物体在现实世界中十分常见,如软体动物、橡胶以及毛绒玩具等,它们的一个显著特征是弯曲方向最外侧在变形过程中不会被拉伸,而在弯曲方向内侧受挤压部分会出现多条凹凸纹——皱褶。经过研究发现,皱褶的形成是因为软体表面可拉伸性低但可挤压性高,外表面总面积在变形时试图保持不变,从而出现折叠皱褶。此外,以往的各类变形方法,需要为特定几何模型计算变形基础网格,设计不同的变形算法,并没有一种通用的变形算法。

发明内容

本发明提出的基于表面积保持的3D网格变形方法,为解决柔软物体3D模型的变形问题,提供了一种有效、快速、逼真的变形方法。

本发明方法的原理是:将各种形式的变形看成由基本弯曲变形组成,对各基本弯曲变形的局部区域进行独立计算,根据控制曲线划分变形区域;通过分离和合成变形基础网格和细节网格,提出与原模型无关的基础模型变形算法;使用阻尼振荡曲线仿真柔软物体弯曲变形内侧的表面皱褶;通过保持基础模型的顶点列长度实现表面积保持,提高模型变形的真实感,从而实现3D几何模型的变形。

本发明方法的流程如图1所示,具体步骤如下:

步骤一:初始化

首先读取3D几何模型的原始网格,然后确定局部变形网格区域,定义局部变形网格区域的控制曲线,控制曲线可采用NURBS、B样条或其他曲线,局部独立变形网格。根据控制曲线的设置,执行步骤二。

步骤二:分离网格

将步骤一中控制曲线所涉及的网格区域分离生成两层网格:基础网格和细节网格,其生成方法分别如下:

1)生成基础网格:对每个独立变形网格,采用规则圆柱体网格作为变形基础网格,其底面为当前变形区域与上一区域的接合面,底面半径为当前区域的横切面半径均值,高为区域长度。基础网格用于步骤三的输入。

2)生成细节网格:为在变形后保持模型的细节,将细节网格与原始网格顶点进行一一对应,使拓扑关系相同;细节网格通过原始网格与基础网格进行径向求差运算获得,每个顶点中保存相应顶点的径向高程差。细节网格用于步骤五的输入。

步骤三:计算变形

对步骤二中生成的基础网格,根据其控制曲线的弯曲状态,对基础网格上的任一顶点,首先计算该顶点所在的横截面,然后根据该顶点在该横截面中的相对位置,计算出变形后的最终位置,形成基础网格的变形,并将该变形结果作为步骤四的输入。

步骤四:生成褶皱

对步骤三中变形的基础网格,首先计算基础模型在弯曲变形过程中的表面积受压缩系数,根据该系数建立基于阻尼曲线的褶皱仿真函数,以便实现仿真物体弯曲变形内侧的皱褶;然后根据褶皱仿真函数计算基础网格上各顶点的高度调节值;之后通过保持各顶点列长度不变来实现模型变形中的表面积保持;最后将输出结果用于步骤五的输入。其主要计算过程如下:

1)计算网格压缩系数:规则基础模型的顶点按照列划分为顶点列,弯曲变形时除弯曲最外侧顶点列外,其余各顶点列的表面均被挤压,各列在弯曲与拉直状态的列长度比为压缩系数,压缩稀疏的取值为0到1,该系数越小表示压缩程度越大,压缩系数最大为1时表示未被压缩;

2)计算褶皱仿真函数:由于顶点列的长度被压缩,造成表面积减少,这里引入皱褶仿真函数,根据表面皱褶在变形区域中间起伏最大并向两端逐渐减弱的特征与振幅递减的阻尼振荡曲线相同的特征,采用该曲线仿真物体表面的皱褶,褶皱仿真函数定义为

f(x)=A*(1-xxmax)*cos(2*k*πxmax*x)

其中A为振荡曲线的最大振幅,xmax为振荡曲线的最大振荡时间,k为在变形仿真中决定皱褶个数;

3)计算表面积保持:为保持基础网格变形前后的表面积不变,通过振荡曲线调整模型顶点位置,使顶点列弯曲状态下的总长度等于拉直状态的总长度,基础模型的每一顶点列共用一条阻尼振荡曲线,曲线从中间向两端对称延伸,其长度计算公式表示为

length=2*0xmax1+f(x)2dx

其中f'(x)为阻尼振荡曲线函数的微分,Xmax为最大振荡时间,即该顶点列的圆弧半长度Xmax=height*Scale/2。由于振荡曲线函数的微分形式复杂,为简化积分,将按间隔划分压缩系数空间,根据顶点列在变形前后的总长度不变的条件,即length=height,采用数值方法求得每个压缩系数所对应的阻尼曲线最大振幅A;根据顶点的高度调整值调节基础网格顶点的位置,变形基础网格的每个顶点列在变形过程中保持长度不变,从而实现整个基础网格表面中变形中保持表面积不变。

步骤五:合成网格

将步骤二生成的细节网格和步骤四生成的褶皱变形基础网格进行合成,获得几何模型的变形结果,绘制变形网格。其主要计算过程为:

1)合成褶皱变形基础网格和细节网格,其过程是分离的反向运算。由于基础网格是规则网格,而原始网格一般是不规则网格,为使两网格的顶点一一对应,本发明使用三线性插值方法从变形后基础网格中获得投影点的坐标,针对细节模型的每一顶点,均采样其对应的基础网格坐标,然后叠加模型细节值,即可获得网格的最终变形结果。

2)实时绘制各变形区域网格模型变形效果。

有益效果

本发明提出的基于表面积保持的3D网格变形方法,能够快速有效的仿真出柔软物体的变形过程,并在变形过程中通过表面积保持和细节保持,提高变形结果的真实感。

附图说明

图1为本发明方法的流程图;

图2为本发明实施例基础网格变形垂直截面图和横截面图;

图3为本发明实施例细节网格变形垂直截面图和横截面图;

图4为本发明实施例基础网格的几个变形结果;

图5为本发明实施例表面积保持的基础网格变形结果;

图6为本发明实施例表面积保持的网格变形结果。

具体实施方式

下面结合附图和实施例对本发明作进一步说明,具体过程如下:

步骤一:初始化。

1)读取3D几何模型。

2)定义变形区域控制曲线。为简化计算,以普通圆弧曲线作为基本弯曲变形的控制线,通过如下两个参数来定义:控制曲线所在平面称为变形平面,它与XOZ平面的夹角称为变形方向角。图2(左)为以圆弧作为控制曲线的基础网格垂直截面图,P1P0P2-Q1Q0Q2是拉直状态的网格,P1P0P2-Q'1Q'0Q'2为弯曲状态的网格,P0Q0和P0Q'0分别是两状态下的控制线,∠P0Q0R0即α是变形旋转角。圆弧半径|R0P0|可由公式(1)求得,

radius=|P1Q1|α=|P1Q1|α=heightα---(1)

其中height是基础模型拉直状态下的总高度,α是该次弯曲变形的变形旋转角,由该半径和变形方向角即可得到焦点R0的位置坐标。

步骤二:分离网格。其具体过程如下:

1)生成基础网格:针对变形区域建立圆柱体基础网格,为了便于数据存储与快速计算,变形基础网格采用规则网格,网格水平方向按照旋转角度θ均分,垂直方向按照z坐标均分。当圆柱高度及底面半径分别为height和radius时,网格顶点(i,j)的位置坐标由公式(2)求得,

x=radius*cos(2*π*i/Nh)y=radius*sin(2*π*i/Nh)z=height*j/Nv---(2)

其中,Nh是横截面上的网格划分总数,Nv是垂直方向上的网格划分总数。

2)生成细节网格:计算与上述基础网格对应的细节网格。图3(左)为细节网格变形计算垂直截面图,其中R0是变形焦点,P0Q'0为变形控制曲线,平面R0P0Q'0为变形平面,P1P2Q'1Q'2是原模型对应的基础模型,不规则曲线M和N是原物体模型的交线。控制线交点C可以通过向量旋转获得,旋转后的向量的旋转角等于变形方向角,俯仰角αA为顶点A变形旋转角,根据公式(3)求得,

αA=arctanzA-zOdx2+dy2---(3)

对于模型顶点A,其模型细节的获取,首先作一过顶点A的横切面,R0A为该切面在变形平面中的投影,该切面与原模型以及基础模型相交获得横截面图如图3(右),其中A为控制曲线与切面的交点,圆BDQ为基础模型与切面的交线,为顶点A对应的模型细节值,即向量与的差。针对原模型中的每一个顶点,通过该点与对应控制点的距离求得模型细节值,即Detail=|AC|-rad,其中rad为基础模型的圆柱体底面半径。保存各顶点的旋转角αi、横切面内方向角θi以及细节值,得到该段基础网格对应的细节网格。

步骤三:计算变形。具体计算过程如下:

1)对于基础网格的任一顶点A,首先计算该顶点所在的横截面,即图2(右)中R0AB平面,其中R0为变形焦点,点O为控制曲线与横截面的交点,点B为顶点A在变形平面R0P1上的垂点。因为向量垂直于变形平面,顶点A变形后的位置可以通过计算得到。

在变形过程中,基础网格以焦点R0为中心弯曲,垂点B在变形平面中处于一条与变形控制曲线同圆心的弧线上,该弧线的半径由公式(4)求得,

R0B=|R0O|-|BO|                              (4)

=|R0O|-radius*cos(β-θ)

其中,radius为基础模型的圆柱体底面半径,β为顶点A的坐标方向角,θ为变形弯曲方向角。向量方向角等于本次弯曲变形的方向角,俯仰角αA=α*(zA/height)为顶点所在高度与总高度的比值。根据该向量的模、方向角和俯仰角,获得控制点O的位置坐标。

2)向量在横截面的局部坐标系中,方向角为变形的弯曲方向角θ,长度为顶点A到变形平面R0P1的距离,因此向量由公式(5)求得,

xAByAB=dist*-sin(θ)cos(θ)---(5)

其中,方向角θ为的∠XOR0,dist=xA*sin(θ)+yA*cos(θ)为向量AB的长度。

3)针对变形基础模型中的所有顶点Ai,计算其在变形平面中的垂点Bi及其垂线向量通过求解向量和得到顶点的初始弯曲变形后的位置。图4为变形基础模型初始弯曲变形的结果。

步骤四:生成褶皱。具体过程如下:

1)计算压缩系数:计算变形网格中各顶点受力变形的压缩系数,在基础网格变形垂直截面图2(左)中,最外侧顶点列P1Q1弯曲变为P1Q'1,该列在变形中未被压缩即|P1Q1|=|P1Q'1|,而对于其他列上的任一顶点A,其受压缩系数为该列的圆弧半径与最外侧圆弧半径之比,即

ScaleA=|P2Q2||P2Q2|=|P2Q2||P1Q1|=|P2Q2||P1Q1|=RAR1---(6)

在基础网格变形横截面图2(右)中可以得出,顶点A的基础模型弯曲压缩系数可用公式(7)求得,

ScaleA=RAR1=RBR1=|OR0|-rad*cos(β-θ)|R0P1|---(7)

2)计算褶皱仿真函数:根据模型表面各处压缩系数计算阻尼振荡曲线参数,皱褶仿真函数计算如下

f(x)=A*(1-xxmax)*cos(2*k*πxmax*x)---(8)

其中A为振荡曲线的最大振幅,xmax是振荡曲线的最大振荡时间,k为用户定义的皱褶个数。

3)计算表面积保持:通过振荡曲线调整模型顶点位置,使顶点列弯曲状态下的总长度等于拉直状态的总长度。基础模型的每一顶点列共用一条阻尼振荡曲线,曲线从中间向两端对称延伸,其长度为

length=2*0xmax1+f(x)2dx---(9)

其中f'(x)为阻尼振荡曲线函数的微分,Xmax为最大振荡时间,即该顶点列的圆弧半长度xmax=height*Scale/2。根据顶点列在变形前后的总长度不变的条件即length=height,可求得参数A。

对于每个顶点,从其变形横截面上的控制曲线交点,向该顶点发射一条射线,沿该射线方向叠加高度调节值,计算顶点的新位置。调节之后,变形基础网格的每顶点列在变形过程中可保持长度不变,从而实现整个基础模型表面中变形中保持表面积不变。图5为表面积保持的基础网格变形结果。

步骤五:合成网格。具体过程如下:

1)合成褶皱变形基础网格和细节网格:对于细节模型的任一顶点A,步骤二中的细节网格根据α和θ值求得其在基础模型上的投影点B,如图3(左)所示,合成细节网格与基础网格。采用三线性插值法获得基础模型投影点B的坐标,得到向量将顶点A的模型细节值与向量叠加求得向量向量的方向角与旋转角不变,向量的模变化,最终求得顶点A的变形后位置。针对细节模型的每一顶点,均采样其对应的基础网格坐标,然后叠加模型细节值,即可获得整个模型的最终变形结果。

2)实时绘制各变形区域网格模型的变形效果,如图6所示。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号