• 6.96 MB
  • 2022-04-29 14:00:01 发布

基于骨架球的建模和动画毕业论文.pdf

  • 43页
  • 当前文档由用户上传发布,收益归属用户
  1. 1、本文档共5页,可阅读全部内容。
  2. 2、本文档内容版权归属内容提供方,所产生的收益全部归内容提供方所有。如果您对本文有版权争议,可选择认领,认领后既往收益都归您。
  3. 3、本文档由用户上传,本站不保证质量和数量令人满意,可能有诸多瑕疵,付费之前,请仔细先通过免费阅读内容等途径辨别内容交易风险。如存在严重挂羊头卖狗肉之情形,可联系本站下载客服投诉处理。
  4. 文档侵权举报电话:19940600175。
'学士学位论文基于骨架球的建模和动画研究姓名:江博艺院系:计算与应用数学系学号:PB11001122导师:刘利刚教授完成时间:二〇一五年五月 UniversityofScienceandTechnologyofChinaAdissertationforbachelor"sdegreeResearchaboutmodelingandanimationbasedonskeletonballs 中国科学技术大学学士学位论文Author:BoyiJiangDepartment:StudentID:PB11001122Supervisor:Prof.LigangLiuFinishedTime:May,2015 中国科学技术大学学士学位论文致谢在中国科技大学完成本科学业的四年里,我所从事的学习和研究工作,都是在导师以及系里其他老师和同学的指导和帮助下进行的。在完成论文之际,请容许我对他们表达诚挚的谢意。首先感谢导师刘利刚教授的指导和教诲,是他把我带到了计算机图形学的研究领域。刘老师严谨的研究态度及忘我的工作精神,将使我受益终身。感谢班主任张瑞老师和皇甫越老师的关怀。感谢任光斌、宋光天、王毅等老师,他们本科阶段的指导给我研究生阶段的研究工作打下了基础。感谢陆炎、杨红庄、王士纬等师兄的指点和照顾;感谢高瑞良、李航、刘勇等几位同班同学,与你们的讨论使我受益良多。我们在中科大计算几何和图形实验室共同学习共同生活,一起走过了这段愉快而难忘的岁月。感谢科大,感谢一路走过来的兄弟姐妹们,在最宝贵年华里,是你们伴随着我的成长。最后,感谢我家人一贯的鼓励和支持,你们是我追求学业的坚强后盾。江博艺2015年5月28日I 中国科学技术大学学士学位论文目录致谢···························································I目录···························································III摘要···························································VABSTRACT·····················································VII第一章绪论····················································11.1相关工作····················································11.1.1基于草图的建模系统·········································11.1.2利用简单几何体的建模·······································21.2研究目标····················································3第二章相关算法和概念·········································52.1MarchingCubes···············································52.2蒙皮动画框架················································52.3网格光滑····················································52.3.1局部迭代光滑··············································62.3.2全局光滑··················································6第三章BMesh建模·············································93.1BMesh概念··················································93.1.1骨骼节点··················································93.1.2视图·····················································93.1.3节点编辑··················································103.1.4数据结构··················································113.2BMesh网格生成··············································113.3BMesh网格光滑··············································12第四章BMesh骨架驱动········································134.1BMesh骨架注册··············································134.2BMesh骨架动作迁移··········································144.2.1注册点迁移················································144.2.2非注册点迁移··············································144.3BMesh骨架的刚性恢复········································16III 中国科学技术大学学士学位论文第五章实验结果················································195.1用户界面····················································195.2其它结果····················································20第六章问题和展望·············································276.1建模方面····················································276.2骨架驱动方面················································306.3网格动画方面················································30参考文献·························································31IV 中国科学技术大学学士学位论文摘要这篇文章参考了前人的工作,借鉴了他们的想法,实现了一种新颖的、简单的利用骨架球的建模框架。此系统还集成了一种简单的骨骼驱动算法。为了降低建模的难度,用户只需要不断画出一维的骨骼来形成骨架。系统会自动根据骨架的形状生成模型。用户也可以通过编辑骨骼球来修改网格的形状。用户也可以利用一些体感设备提供的人体骨架数据来驱动骨架模型,所需的操作仅仅是简单地选取对应点而已。此系统的建模流程是直观而简单的,生成的模型对基于骨骼的动画算法是非常适用的。本文介绍了前人设计的一些具有类似要求的建模系统,简介了一些相关的算法,展示了不少此系统建造出的一些有趣的模型和一些动作驱动的结果,并且详细的讨论了此系统的优缺点,为未来的研究指明了方向。关键词:骨架球,网格,动画,BMesh,建模V 中国科学技术大学学士学位论文ABSTRACTThispaperreferencespreviouswork,usestheirideasandbuildsanovelandsimplemodelingsystembasedonskeletonballs.Thesystemintegratesasimplebonedrivenalgorithm.Toreducethedifficultyofmodeling,theuseronlyneedstodrawone-dimensionalbonescontinuallytobuildtheskeleton.Thesystemthenautomaticallygeneratesameshmodelbasedontheshapeoftheskeleton.Andtheusercanmodifytheshapebyeditingtheskeletonballs.Theusercanusethehumanskeletondataprovidedbysomesomatosensoryequipments,likeKinect,PrimeSense,todrivetheskeletonmodel,andtherequisiteoperationisjustsimplyselectcorrespondingpoints.Thesystem’smodelingprocessisintuitiveandsimple,andthegeneratedskeletonmodelisverysuitableforskeletalanimationalgorithm.Thepaperpresentssomepreviousmodelingsystemswithsimilarrequirements,brieflyintroducessomerelatedalgorithms,showsafewinterestingmodelsbuiltbythesystemandsomeresultsofaction-drivenfunction,discussesthesystem’smeritsanddrawbacksindetail,andpointsoutthedirectionoffutureresearch.Keywords:skeletonball,mesh,animation,BMesh,modelingVII 中国科学技术大学学士学位论文第一章绪论随着3D技术的发展,3D模型的需求越来越大,对简易有效的建模方法的需求也越来越大。不可避免的麻烦是,可能的几何形状空间实在是具有过高的维度,为了生成美观的模型,设计者需要在2D视图上通过点击、拖动等交互,耐心地修改顶点的3D位置。可以想象这个过程是相当的耗费时间和精力的,对于一些初学者,或者小孩来说,是相当痛苦的。另外,现在集成在一些大型建模软件中非常鲁棒的传统的建模方法通常是利用样条,隐式曲面,细分曲面等工具来生成复杂得模型,这要求设计者有较强的相关知识背景,提高了建模的门槛。为了降低建模的难度,利用简单的交互来设计出具有一定复杂度的美观的模型,大量的研究者在这方面作出了有意义的探索。1.1相关工作1.1.1基于草图的建模系统图1.1注:此图引用自Teddy[2]的Figure5。展示了Teddy建模的一些典型例子。基于草图的建模系统直接从用户绘画的线条创造出3D曲面。在这种系统中一个基本的操作叫作膨胀。在膨胀操作中,用户输入的2D封闭线条被看作一个3D物体的轮廓,通过特有的算法来猜测物体的形状,从而达到建模的目的。这种系统通常支持一些基于草图的编辑操作,包括凸起、切割、弯曲等等。但是,这些系统有一个明显的缺点,由于它们是完全利用平面的轮廓信息来猜测3D形状,很难精确地表达设计者的想法。这种思路的典型例子有Teddy[2]和FiberMesh[7]等。1 中国科学技术大学学士学位论文Teddy是基于草图建模概念的开创与推动者。通过用户绘制的2D闭曲线,计算其骨架,然后通过骨架和轮廓来膨胀出3D封闭的三角网格。基于草图的凸起、切割和光滑操作也被支持。通过基于局部二次隐式曲面估计的曲面重采样算法[1],生成的3D网格被进一步光滑。然而,Teddy局限于创造球面拓扑(亏格为0)和较低曲面复杂度的模型。图1.1给出了Teddy的一些建模结果。FiberMesh是利用用户手绘3D曲线集来自由设计3D曲面的系统。3D模型形状是由这些控制曲线来定义的,通过迭代方法求解一个优化问题得到曲面。FiberMesh可以生成更复杂拓扑的模型,模型的细节设计也有了一些提高,但是建模细节的精确控制难以实现,而且3D线条的交互控制也略为复杂。图1.2给出了FiberMesh的一些建模结果。图1.2注:此图引用自FiberMesh[7]的Figure16。展示了FiberMesh建模的一些典型例子。1.1.2利用简单几何体的建模此类建模方式的思路是利用一些简单的几何体,例如球体,来构造出物体的骨架或者是大致形状,再通过它们来设计出隐式曲面或者利用“扫“这种建模方式来得到模型。ZBrush和B-Mesh[4]是这一方法的典型例子。ZBrush是一款专业的建模软件,它提供了一个叫作ZSpheres的建模工具。从一个球,设计者可以生成新的球,然后还可以对这些球进行放缩,移动和旋转操作去形成一个模型。比较麻烦的是用户需要去小心地控制每个球的转向。而且,在自适应蒙皮的时候,球被换成了立方体,这导致了建模过程中会出现扭曲和自交的问题,降低了网格的质量。图1.3给出了ZBrush建模的一个例子。B-Mesh系统旨在创造出对后续雕刻操作和骨骼动画友好的四边形网格。B-Mesh利用简单的交互,用球体设计出模型的骨架,然后以沿着骨骼”扫“的2 中国科学技术大学学士学位论文方式来建模,最后再对模型进行一定的优化。B-Mesh能够生成高质量的网格,生成的基础模型也很美观,但是对细节的刻画上显得不足。图1.3注:此图引用自网络。展示了ZBrush建模的一个典型例子。1.2研究目标受到前人的工作的启发,为了让建模足够简单,甚至能够简单到小孩也能够快速使用并且创造出比较漂亮的易于动画化的模型,我设计了一个简单的建模框架。我的建模框架受到了上述几个系统的一些有益的建模思想的影响,主要采用了B-Mesh[4]里的骨架球的思想和它的隐式曲面构造方案,自己设计了交互方案,并且提出了一个简单的骨架动作迁移算法,使得利用一些体感设备,如Kinect、PrimeSense等,以人的动作来驱动骨架球模型成为可能。这个建模框架基本实现了上述的目标,但是仍有许多可以改进的地方和需要研究的问题,这些在后面将会谈到。由于我的建模框架的主要思想来自于B-Mesh[4],在后文我指代本系统时会称为BMesh,特此说明。3 中国科学技术大学学士学位论文第二章相关算法和概念2.1MarchingCubesMC算法是隐式曲面绘制算法中的经典算法,是W.Lorensen等人于1987年提出来的一种体素级重建方法。MC算法是一个分而治之的方法,它将包含等值面的空间以一定的分辨率划分成立方体的集合,每个立方体可以理解为一个体素,并且将等值面的抽取分布在每一个体素中进行。在每个被处理的体素内部,根据八个顶点的隐式表达式的数值,可以细分为各种情况,每种情况都有相应的三角面片逼近该等值面的方法。在等值面抽取的过程中将一系列二维切片数据看做是一个三维的数据场,从中将为零值的曲面片抽取出来,以某种拓扑形式连接成等值曲面,所以MC算法也被称为“等值面提取”算法。MC算法的实现通常依赖于一个“lookup”列表。然而,这个表可能导致拓扑的不连续。更多关于MC算法的细节和MC算法的保拓扑实现请参考[5]。2.2蒙皮动画框架在未进行蒙皮处理之前,模型和骨架是不相关的。蒙皮操作定义了如何将骨架的变形应用到网格上。广泛使用的一种方法是被称为线性混合蒙皮的LBS方法。如果v是顶点j的位置,Ti是第i个个骨骼的变化矩阵,并且!i是第ijj∑个骨骼对于顶点j的权重,LBS方法将!iTi(v)作为顶点j变化后的位置。ijj所谓的蒙皮算法的关键就是找到每个骨骼对所有顶点的权重向量wi。关于权重值,它应该满足几个性质。首先,它们不应该依赖于网格的分辨率。第二,为了使变化的结果看上去不错,权重值需要沿着整个曲面光滑变化。最后,为了避免折叠等不好现象的发生,权重值在关节处应该要满足另外的一些限制。有不少算法可以计算这种骨架的蒙皮权重,可以参考BBW[3]等方法。2.3网格光滑网格光滑有多种方法,这里主要介绍一些基于laplace算子光滑的例子。laplace算子,可以用以下公式在每个顶点处线性估计:∑L(vi)=!ij(vj−vi)(2.1)j∈i∗∑其中i∗是v的一邻域指标集,!是v关于v的权重值,满足=1。iijjij∈i∗权重的选取有几种方式,其中最简单的可以设为!=1,其中D是v的度。ijDiii5 中国科学技术大学学士学位论文2.3.1局部迭代光滑laplace算子是关于每个顶点的,光滑每个顶点的L值,可以达到光滑的效果。因而有以下的光滑思路:vnew=vold+L(vold)(2.2)其中是光滑因子,一般是0到1之间的数。每个顶点都要进行上述计算,且整个计算可以迭代多次。2.3.2全局光滑易知,L值反应了网格的光滑程度,如果L值为0恒成立,即:∑vi−vj=0;vi∈V(2.3)j∈i∗其中V是网格所有顶点的集合,V={vi|i=1;2;:::n}。那得到的曲面就是极小曲面。整个问题可以化作一个线性方程问题:LX=0(2.4)其中L是n×n的一个矩阵,满足:1,i=jLij=−!ij,(i;j)∈E0,otherwise其中E是网格的边集。需要注意的是,矩阵L对于一个连通的网格曲面来说,是秩为n−1的,要想求解,需要给出一些限制条件。限制的模式可以是硬性限制,也可以是软性限制,本文主要考虑软限制,利用最小二乘法的思想来求解。1)特征点限制为了保留原始网格的一些几何特征,比如说一些特征点{vk=(xk;yk;zk)|k∈C},其中C={i1;i2;:::;is}是特征点的指标集。要保留特征点的位置信息来光滑曲面,等价于考虑下面的一个优化问题:∑min∥LX′∥2+2|v′−v|2(2.5)kkX′k∈C其中是特征点限制的权重。上述优化问题可以转化为求解一个欠定方程:()()′L′0AX=X=F=b(2.6)Fb6 中国科学技术大学学士学位论文其中,F是一个s×n的矩阵,其每一行只有一个非零元:,j=ik∈Cfkj=16k6s;16j6n0,otherwiseFb是一个s×1列向量,满足:Fbk=gik,16k6s,g=x;y;orz注意这个线性系统对每个坐标量x,y,和z都要计算一次。由于是欠定方程,应该通过最小二乘的方法来求解。2)三角面片重心限制为了进一步保留一些几何特性,在点限制的基础之上,我们还可以对其进行一些其它的限制,例如对每个三角形的重心进行限制,即是求解下面的优化问题:∑∑min∥LX′∥2+2|v′−v|2+2|(v′+v′+v′)−(v+v+v)|2kkijkijkX′k∈C⟨i;j;k⟩∈F(2.7)其中,是重心限制的权重,F={Ti|i=1;2;:::;m}是网格三角形的集合,每个三角形Ti用三个顶点的有序指标序列表示,如:Ti=⟨i1;i2;i3⟩;16i1;i2;i36n。对应的欠定方程:L0AX′=FX′=bF=b(2.8)ZZb其中,Z是一个m×n的矩阵,其第k行只有三个非零元用来去限制三角形Tk=⟨i1;i2;i3⟩的重心位置:,i=i1;i2;i3zkj=Tk=⟨i1;i2;i3⟩0,otherwiseZ并且b是一个m×1的列向量:Zbk=(gi1+gi2+gi3);Tk=⟨i1;i2;i3⟩;16k6m;g=x;y;orz上面介绍了两种添加限制来光滑网格的方法,沿着这一思路,可以考虑更多的限制,例如边界位置限制,法向限制等等,都可以用类似的最小二乘法求解欠定方程的方式得出结果。进一步了解这方面的内容可以参考[6]。7 中国科学技术大学学士学位论文第三章BMesh建模BMesh的用户界面是简单而直观的:用户在某一种视图状态下绘制骨骼,骨骼由两端的骨骼球来控制,骨骼球之间会利用骨骼球的半径和距离信息插值生成一些中间球,参考图3.1a。一个基本的骨架就由简单的在不同视图上的画线和对称操作来生成,参考图3.1b。所有的球体产生了一个模型的大致形状,在这个骨架的基础上,我利用骨架球构造了一个大致符合这基本形状的隐式曲面,最后生成这个曲面模型,参考图3.1c。进一步的骨架驱动功能,用户先按照提示选出骨架的一些基本点,如头,脖子,肩部等等,然后系统就可以捕捉人的动作来驱动骨架的动作。(a)骨骼示例(b)骨架示例(c)网格示例图3.1本图给出了简单的骨骼、骨架和对应网格模型的示例3.1BMesh概念3.1.1骨骼节点BMesh支持的骨架,是一棵树,它的节点可以按照度来分为三类,参考图3.2:叶子节点(仅仅连接一个骨骼,被标为绿色),连接节点(正好连接两个骨骼,被标为蓝色),关节节点(连接超过两个骨骼,被标为红色),至于中间球(节点之间的球,插值生成)则用灰色表示。所有的骨骼球中,有一个被选为根(一般是度最大的一个)节点。参考图3.2.3.1.2视图BMesh的建模操作并不是在自由的3D视图下进行,为了简化交互和使得模型有明确的位置信息,默认了正视图(yz平面)、上视图(xy平面)、下视图(yx平面)、左视图(xz平面)和右视图(zx平面),建模时最好保证视图和模型的位置的匹配,即要求正视图下看到的就是模型的正面。每个视图对应一个对称操作的对称面法向(如正视图的对称面法向即是y轴方向)。对于一般的立体模型,通常只需要在两个视图下进行编辑即可,如在右视图先绘制出脊柱,9 中国科学技术大学学士学位论文再利用对称操作在正视图绘制出两手两脚,然后再在两个视图上来调整手和脚的位置即可,参考图3.3。图3.2绿色为叶子节点,蓝色为连接节点,红色为关节节点。该骨架中的根节点是中间的关节节点。(a)侧视图绘制躯干(b)正视图绘制双手(c)调节手的位置(d)最后的结果图3.3本图给出了简单地利用正视图和右视图进行立体建模的示例。3.1.3节点编辑所有的骨骼球节点是可以编辑的,总共有三种:放缩、移动、对称。放缩即是改变节点球的半径;移动改变空间位置,但移动只能在相应的视图下进行,如在正视图就只能通过移动改变y、z值;对称操作是通过被编辑节点的位置和当前视图对应的对称面法向来确定一个对称面,之后被编辑节点新绘制的分支将会对称地生成,此功能用来生成对称结构是相当方便的。10 中国科学技术大学学士学位论文3.1.4数据结构我用树这种数据结构来管理我的骨架,每一次绘制骨骼就相当于给树添加一些叶子节点。每个树节点有一个对称是否激活的标签,对称操作可以激活这些标签,被激活的树节点的子节点会利用所有激活的祖先节点的对称面信息来生成对称点。3.2BMesh网格生成在创造了一个骨架之后,BMesh会构造一个隐式曲面,这个曲面代表了基本网格的形状。在所有的骨架球上,包括骨骼球节点和所有的中间球,我定义了fi:(1−(r)2)2,r≤RRiifi(r)=(3.1)0,r>Ri其中:2i2i2i2r=(x−cx)+(y−cy)+(z−cz)(3.2)R= r,r是第i个球的半径,(ci;ci;ci)是第i个球的中心,是一个iiixyz参数,通常设为1.5。然后,整个的隐式曲面定义为:∑n(x)=fi−T=0(3.3)i=1其中T是一个参数,这个参数控制了隐式曲面的胖瘦,易知T值越大,隐式曲面越苗条。对比参考图3.4。构造了隐式曲面后,我们利用MarchingCubes[2.1]的方法来生成网格。(a)T=0.1(b)T=0.3图3.4不同T值生成网格效果的对比11 中国科学技术大学学士学位论文3.3BMesh网格光滑BMesh生成的网格是封闭的,定向一致的流形曲面。然而,虽然定义的隐式曲面有效的混合了球与球连接处的凹凸形状,最终生成的模型的表面会形成一些细小的褶皱。参考图3.5。图3.5可以发现骨骼上有细小的褶皱关于光滑这种网格细小褶皱的方法,可以参考本文2.3的相关内容。12 中国科学技术大学学士学位论文第四章BMesh骨架驱动我使用PrimeSense来作为捕捉人体动作的体感设备。使用Nite和OpenNi两个库来操作PrimeSense,获得提取的人体骨架信息。获得的骨架结构是确定的,总共有15个点:头、颈、左肩、右肩、左手肘、右手肘、左手、右手、躯干、左臀、右臀、左膝、右膝、左脚、右脚,参考图4.1。图4.1此图是PrimeSense捕捉到人体后提取出的骨架结构的深度信息示意图,可以看出骨架由15个点构成。4.1BMesh骨架注册所谓驱动骨架,无非就是给两个骨架间作一个映射。由于两个骨架之间的骨骼点数不能保证完全相同,但可以确定的是,大多数骨架都有一些类似的点,例如头、手脚的关节等等。因而,为了能够方便地构造出合理的映射,首先要13 中国科学技术大学学士学位论文把骨架上对应于PrimeSense提取的人体骨架的关键点标记出来,具有明显对应关系的点一定要标记出来,不能找到对应点的就可以选择跳过。建立对应关系的操作就称作注册。合理的注册是获得合理的结果的基础和关键。4.2BMesh骨架动作迁移4.2.1注册点迁移在[3.1.2]中已经提到,BMesh创造的骨架(之后称为处理骨架)是预存了位置信息的,即骨架的正面沿着x轴正方向,上方沿着z轴正方向。而PrimeSense提取的骨架(之后称为迁移骨架)的坐标系正面是朝着z轴负方向,上方是沿着y轴正方向的。因此,首先将后者的坐标系变换到同BMesh骨架坐标系一致的状态。坐标系一致后,利用注册点在迁移骨架中对应点的坐标,可以获得一些方−−→向信息。即迁移骨架中的两个点pi和pj确定了一个单位方向向量pipj,而处理骨架中对应的注册点Pi和Pj确定了一个长度|PiPj|,以一个点为起点,如Pi点,则Pj移动后的新位置NPj满足:−−→NPj=Pi+|PiPj|×pipj(4.1)这就完成了注册点Pj的迁移,同时将迁移的位置改变▽Pj=NPj−Pj保存下来。实际注册中有多个注册点,我采取的迁移策略是固定度最高的注册点作为基准点,然后通过处理骨架的连接关系,将其他的注册点分为基准点的一邻域点、二邻域点,以此类推,然后依次进行注册。其中所谓的一邻域就是指以基准点作为起点,通过骨架邻域点不断扩散,遇到注册点就停止该点的扩散,直到所有扩散停止后所得到的注册点的集合。二邻域点就是以一邻域点为扩散起点获得的注册点集合。参考图4.2。得到邻域点后,就按照上文方法迁移注册点,得到新的位置即可。4.2.2非注册点迁移注册点迁移好了之后,得到了注册点的新位置和迁移的位置改变向量。对于非注册点迁移,主要有两种情况。第一种是该点只与一个注册点相关,即它按照骨架邻域点不断扩散,最终只能在一个方向上遇到注册点停止。例如,一条尾巴,如果只有和躯干相连处是注册点的话,那么整个尾巴上的非注册点都属于这一类点,参考图4.3a。我把这类非注册点称为悬垂结构。第二种是该点与两个即以上注册点有关,即它按照骨架邻域点不断扩散,最终所有扩散方向都会遇到注册点而停止。例如,一个躯干,手掌、头和腰都14 中国科学技术大学学士学位论文图4.2图中红点是基准注册点。若绿色点都是注册点而蓝色点不是,那么绿色点就是基准点的一邻域点;若绿色点和蓝色点都是注册点,那么蓝色点是基准点的一邻域点,绿色点是基准点的二邻域点。被标记为注册点,那么躯干内部的点就属于这一类,参考图4.3b,我把这类非注册点称为封闭结构。对于封闭点P的迁移,问题可以比较容易的解决。设与一封闭点相关的注册点的集合为S,记注册点Pi的位移为▽Pi,封闭点的位移▽P可以理解为注册点位移的某种加权平均,即:∑▽P=!i▽Pi(4.2)Pi∈S权重的选取有很多合理的方法,例如IDW逆距离权重、RBF径向基函数权重。考虑到简单性和结果的合理性,我使用了IDW权重,即:1|PPi|!i=∑1(4.3)|PPj|Pj∈S这样,按照上述方法,所有的封闭点的新位置都可以确定。对于悬垂点的迁移,如果也按照封闭点的思路来处理的话,很显然所有悬垂点的位移就是相关的注册点的位移,这在很多情况下是不合理的,例如图4.3a中的尾巴,由于躯干点是几乎不动的,导致了整条尾巴也是几乎不动的,15 中国科学技术大学学士学位论文(a)悬垂结构尾巴示例(b)封闭结构躯干示例图4.3(a)图中,红点是注册点,并且整个尾部都没有注册点,那么这个尾巴就成了悬垂结构,整个尾巴上的点都是悬垂点。(b)图中,所有绿点都是注册点,那么躯干内部就被封闭了,成了封闭结构。这在动作驱动的过程中是不自然的,像做一个转身的动作,尾巴就跑到身体的侧面来了,显然不合理。反过来思考这个问题,实际上这种悬垂点的位置是难以确定的,因为提供的信息(注册点的数目)不够确定出悬垂点的位置。事实上,由于迁移骨架是人体的缘故,本来就没有尾巴之类的结构,因而是不能够得到尾巴等悬垂结构的迁移信息的。但是,对于一般的模型,遇到的悬垂结构无非就是屁股上的尾巴,头顶上的角之类的结构,这类结构在运动中主要是有一个随着身体旋转的运动。因此,我解决这个问题的思路就是通过骨架相关点的信息来猜测悬垂结构应该旋转变化的角度,从而得到新的位置。对于一个悬垂结构,先找到相关的注册点,从它出发,找到最近的一个关节点,利用关节点和它的邻节点的坐标,我们可以用最小二乘法得到一个这些点最贴合的平面。而原始骨架的位置的对应关节点附近也同样可以用最小二乘法得到一个最贴合的平面。这两个平面的法向量就定义了一个旋转,就可以以这个旋转来作为相关悬垂结构的旋转,旋转中心就是相关的注册点。参考图4.4。4.3BMesh骨架的刚性恢复经过骨架动作迁移后,处理骨架已经根据捕捉的动作变到了一个类似的动作状态下。但是,迁移后的骨架并不能保证每个骨骼的长度和原始骨架骨骼的长度一定相等,这是因为注册点的选取的原因。如果要恢复骨骼的长度,保证16 中国科学技术大学学士学位论文图4.4如图,图中绘制出了关节点和它的邻节点最贴合的平面。在驱动过程中,这个平面会不断地变化,用该平面变化的法向可以定义对应悬垂结构的旋转。合理的刚性变换,由于此时骨架的姿态已经较为合理,可以在所有骨骼端点相对位置不变的前提下,简单地修改每条骨骼的长度回到原始骨骼的长度即可。17 中国科学技术大学学士学位论文第五章实验结果5.1用户界面图5.1本界面是建模的界面,右侧下方的方向按钮是控制五种视图转换的,另外两个按钮一个是对称操作的按钮,一个是清除操作的按钮。图5.2本界面是动作驱动功能的注册阶段的界面。两个场景区左边的是处理骨架的场景,右边的是指导注册点的指示图。右侧三个按钮从上往下依次是播放停止按钮,跳过注册按钮,撤销按钮。19 中国科学技术大学学士学位论文5.2其它结果(a)第一步(b)第二步(c)第三步(d)第四步(e)最终骨架(f)最终网格图5.3一个典型的建模流程图5.3展示了一个建造模型的过程。在这个例子中,32个骨骼球被用来构造整个模型的骨架,系统自动插值生成了一些中间球。整个建模过程大概花费了5分钟左右的时间来创造这个模型。20 中国科学技术大学学士学位论文一般MarchingCubes算法生成模型的时间都在几秒钟左右,如果只是在一个平面建的骨架,一般在两秒左右生成网格,如果骨架的空间占用较大或者空间结构复杂的话,时间可能偏长,参考表5.1。在所有这篇文章的例子中,MarchingCubes算法的分辨率都设置为0.03,这是为了精度和时间的综合考虑。在公式3.3中的参数T表示网格和骨架球的贴合程度,越大的T值会生成更苗条的网格,正如图3.4所示。在我的系统中,设置T为0.1。用户也可以在建模过程中容易地改变骨架的形状。用户可以编辑骨骼球的半径和位置来改变形状,使得从原有的骨架轻松变到一个新的骨架,得到新的模型,参考图5.4。(a)原骨架(b)原网格(c)改变后骨架(d)改变后网格图5.4本图展示了一个改变原骨架生成新骨架模型的例子图5.5到图5.10展示了更多用BMesh建模系统建造的一些模型。这些模型中21 中国科学技术大学学士学位论文有的有很多的节点,但是创造这些骨架并不费时,时间主要花费在了调节骨架点的位置上。但是,如果在大型的软件上建造这些相似的模型,工作量和复杂度应该都会大很多。图5.11展示了系统捕捉人物动作后迁移骨架得到的一些结果。从图中结果可以看出,对于那些悬垂结构,系统也能够给出一些合理的动作迁移。(a)骨架(b)模型图5.5蚂蚁(a)骨架(b)模型图5.6大象22 中国科学技术大学学士学位论文(a)骨架(b)模型图5.7怪兽(a)骨架(b)模型图5.8大白23 中国科学技术大学学士学位论文(a)骨架(b)模型图5.9蜘蛛(a)骨架(b)模型图5.10小狗24 中国科学技术大学学士学位论文(a)(b)(c)(d)图5.11一些骨架驱动的结果表5.1从表中看出,所花费的时间与骨骼球数并没有什么明显的关系。影响生成时间的应该是模型的尺寸和空间分布的复杂性。模型骨骼球数生成时间(毫秒)图5.5455356图5.63613019图5.7257396图5.8322293图5.9335348图5.1027588225 中国科学技术大学学士学位论文第六章问题和展望6.1建模方面公式3.3中的参数T可以考虑设置成动态的,即每个球有特定的T值。全局统一的T值可能会造成网格贴合的不一致,对于相对半径较大的球,同样的T值生成的网格模型会有明显的膨胀,不能很好地与骨架形状贴合,参考图6.1。(a)骨架球(b)网格图6.1由(a)(b)两图的对比可以看出,中间的红球由于半径相对较大,导致生成的网格在它附近的膨胀效果比其它球要明显得多,这说明全局统一的T值不能够达到一致贴合骨架球的要求。骨骼上的中间球是通过插值来获得的半径和位置,显然不同的插值会有不同的结果,线性插值是一种通常的思路,但也可以考虑不同的插值方法来适应不同的需求,参考图6.2。甚至还可以改变骨骼直线的限制,在曲线上插值。用球体来建模,虽然很简单,但是也有很多情况不能够很好地逼近,比如一些具有非常扁平的结构。B-Mesh[4]中的想法是可以用椭球的结构来替代球体,相应的公式3.2可以替换为:(p−c)·ei(p−c)·ei(p−c)·eir2=(x)2+(y)2+(z)2(6.1)abc其中p=(x;y;z),(ei;ei;ei)是椭圆的局部框架。这样可以更加丰富地表达形xyz状,参考图6.3。这是一个很好的想法。但是一个椭球有三个方向可以进行伸缩变换,而且椭球也必须要考虑旋转等因素,这些因素会导致插值算法和交互方面一系列的27 中国科学技术大学学士学位论文(a)一次插值(b)二次插值图6.2由(a)(b)两图使用了不同的插值方法来生成中间球,可以看到有不同的效果,可以满足不同的设计需要修改,B-Mesh[4]并没有说明这些细节,以后的工作可以在这方面进行一些扩展。图6.3注:此图引用自B-Mesh[4]的Figure11(a)。B-Mesh[4]中对骨架的编辑功能中有一种将已有骨架拆分,然后再复用骨架的某一部分的功能,参考图6.4。这是一个很好的思路,BMesh中的骨架结构也是很容易拼接的,只需考虑拼接球以及邻近球的大小变化即可,这为可复用的建模提供了可能。甚至可以进一步发展为模块化建模的可能,而这种模块化的建模,操作更容易,小孩子更易接受。现在的系统不能表达一些模型的细节,像眼睛、血管之类的。传统的解决思路是后期对模型进行一些雕刻,但雕刻算法实现复杂,交互也麻烦。在BMesh下,对于给模型添加一些细节的处理,可以理解为对隐式曲面的修改。B-Mesh[4]中有在原有骨架球的基础上添加附加球的来修改模型的功能,参考图6.5。由这一想法的启发,附加的可以不限于球,可以是小四面体、正方体等各种小几何体,甚至是一些线条,通过这些几何体来给原有的隐式曲面附加一些合理的影响,产生具有一些细节的网格,这一问题也是需要进一步研究的。BMesh系统对于一些物体的建模是不适用的。常见的像建筑物,一些具有28 中国科学技术大学学士学位论文(a)骨架一的拆分(b)骨架二的拆分(c)拼接的结果图6.4注:此图来自于B-Mesh[4]的Figure13。展示了一种有效的拼接骨架的方式。(a)原骨骼示例(b)添加附加球(c)结果网格图6.5注:此图来自于B-Mesh[4]的Figure10。展示了一种有效的通过添加附加球来修改网格的方法。尖角的物体;或者是一些具有沟壑,细微凸起等细节的物体。集成一些基于曲线或曲面的控制功能到系统中也许是一个不错的解决思路。29 中国科学技术大学学士学位论文目前将隐式曲面网格化,最常用的方法就是MarchingCubes算法,但是这一算法有几个缺点。1)运算通常较慢,这是因为算法需要将一个立体空间剖分成同等大小的小立方体集合,在每个立方体的顶点处都要调用求值器求得隐式函数的值,运算量非常大,而且运算量随着分辨率的提高会大大地增加;2)不能够保留细节。这是因为MarchingCubes算法全局只有一个统一的分辨率,要想表达细节,分辨率就要提高,而这所带来的计算复杂度会大大提高,因而是不被接受的。要想解决这些问题,得到上一节所讨论的具有一定细节的模型,就必须要改进算法,可以从减少赋值点和改为多分辨率这两个角度入手改进MarchingCubes算法的实现,然而这并不是能够简单解决的。或者,考虑另外的构造网格的方法,例如类似B-Mesh[4]中的沿着骨架“扫”出一个网格的思路来生成模型,然而这种方法只能适用于这种骨架球的模式,要是添加一些其他的几何体,就很难通用了。构造网格这一问题是最麻烦的,很难解决。所以本系统折中的办法就是使用MarchingCubes算法生成,网格的细节生成工具可以在以后的程序中独立地添加。6.2骨架驱动方面本系统中的动作迁移算法,思路简单,算法也不算复杂,最后能够得到还算不错的结果。但是,也有一些问题值得考虑。首先,施加动作的主体默认是人,人是站立着的,我的迁移算法把整个处理骨架也会变成站立的,但这对于一些四脚动物来说,并不合理。实际上,动作的迁移只需要迁移动作即可,而人的动作主要由手和脚体现,躯干只是一些旋转性的动作而已,最好的解决办法是骨架迁移算法能够很好地将手脚的动作复制过来,而躯干只复制其旋转信息,而并不改变其本身的相对位置,这样狗还是趴在地上,但是却会模仿人的动作。另外的一个问题是对于不能一一对应的模型,例如具有多对手的骨架模型,本算法就只能驱动其中的一对手动作,而其它的手通常会被当作悬垂结构处理。还有一个问题是关于悬垂结构的,例如尾巴,本系统的算法虽然赋予了它旋转的能力,但是却是一条僵硬的尾巴,没有自由的摆动。但是并不是所有的悬垂结构都有摆动的动作,例如头上的角。要解决这些问题,首先至少得给骨架模型预存很多的信息,例如身体姿势,各部分所对应的结构等等。或者考虑利用数据库来识别模型的功能性的部分。总之,这个问题是非常困难的,不好解决。6.3网格动画方面BMesh生成的网格,本身就已经具有了骨架结构,之后若要对网格进行动画处理,就可以很自然的考虑蒙皮动画框架[2.2]了。其中关键的一步,骨骼蒙皮权重的获得,有很多方法,可以参考BBW[3]方法等等。总之,BMesh的建模是基于骨架的,可以很容易的应用到动画中去,这是以后值得扩展的功能。30 中国科学技术大学学士学位论文参考文献[1]TakeoIgarashiandJohnFHughes.Smoothmeshesforsketch-basedfreeformmodeling.InProceedingsofthe2003symposiumonInteractive3Dgraphics,pages139–142.ACM,2003.[2]TakeoIgarashi,SatoshiMatsuoka,andHidehikoTanaka.Teddy:asketchinginterfacefor3dfreeformdesign.InAcmsiggraph2007courses,page21.ACM,2007.[3]AlecJacobson,IlyaBaran,JovanPopovic,andOlgaSorkine.Boundedbiharmonicweightsforreal-timedeformation.ACMTrans.Graph.,30(4):78,2011.[4]ZhongpingJi,LigangLiu,andYigangWang.B-mesh:Amodelingsystemforbasemesh-esof3darticulatedshapes.InComputerGraphicsForum,volume29,pages2169–2177.WileyOnlineLibrary,2010.[5]ThomasLewiner,HélioLopes,AntônioWilsonVieira,andGeovanTavares.Efficientim-plementationofmarchingcubes’caseswithtopologicalguarantees.Journalofgraphicstools,8(2):1–15,2003.[6]LigangLiu,Chiew-LanTai,ZhongpingJi,andGuojinWang.Non-iterativeapproachforglobalmeshoptimization.Computer-AidedDesign,39(9):772–782,2007.[7]AndrewNealen,TakeoIgarashi,OlgaSorkine,andMarcAlexa.Fibermesh:designingfreeformsurfaceswith3dcurves.InACMTransactionsonGraphics(TOG),volume26,page41.ACM,2007.31'