一种人物动态骨骼的设计系统和方法

文档序号:10613726阅读:506来源:国知局
一种人物动态骨骼的设计系统和方法
【专利摘要】本发明包括一种人物动态骨骼的设计系统,包括:初始化模块,对模型数据进行初始化设置;节点生成模块,生成骨骼节点数据并进行存储;骨骼约束模块,节点在变化过程中执行规则约束处理;碰撞约束模块,对所述骨骼模型在碰撞过程中规则约束处理。还包括一种人物动态骨骼的设计方法,包括:对模型数据进行初始化设置;生成骨骼节点数据并进行存储;对节点在变化过程中执行规则约束处理;对所述骨骼模型在碰撞过程中规则约束处理。本发明的有益效果为:大大缩短采用旧方案骨骼动画或布料系统调整网格顶点参数所需要花的时间;更加真实逼真物理模拟布料和头发的运动和相关约束处理;高效地处理布料内部之间以及布料和其他物体之间的碰撞检测处理。
【专利说明】
_种人物动态骨路的设计系统和方法
技术领域
[0001]本发明涉及一种人物动态骨骼的设计系统和方法,属于计算机游戏开发领域。
【背景技术】
[0002]3D游戏中偏中重度的游戏人物往往是需要有布料头发模拟才能够更好地表现人物,动作上的细致表现才能够让人物栩栩如生,才能够更加吸引住玩家。
[0003]—般游戏处理人物动画就直接采用骨骼动画的技术或者布料系统物理模拟的技术。采用骨骼动画的技术基本流程图如图1,通过图1的流程图可以看出现骨骼动画方案存在缺陷如下(1)、(2)所示,包括:
(1)每一套新的人物都要走一遍添加骨骼蒙皮和制作骨骼动画的流程,该过程耗时和骨骼数成正比,越高清的模型越多的骨骼,制作耗时也非常大。基本上三百个骨骼加上调整测试的时间对于一个有经验的动作师就要耗时三天左右;
(2)人物身上的衣服头发都需要动作师去根据真实人物动作情况去做调整,如果没有真实人物做参考也会去参考其他游戏人物动作和相关视频,不同衣服由于材质的不同表现也会有所不同,调出不同人物的衣服头发这块就需要占用特别多的时间。
[0004]采用布料系统物理模拟的技术基本流程图如图2所示,通过图2所示流程图可以看出现布料系统模拟衣服头发方案存在以下缺陷如下(I)?(3)所示,包括:
(1)低模大概在3000面左右,高模要在10000面左右,布料系统模拟属于顶点动画,需要调整网格中所有顶点相关参数来进行物理模拟,每个模型的衣服头发都需要调整,调整完毕再运行测试再进行反复调整到合适为止,这块耗时也是非常大的;
(2)布料系统模拟调整的是顶点能够运动的距离范围限制,如果距离调整得够长很难避免布料穿插碰撞的问题出现,如果距离调整得够短又不能够表现得逼真,只能小范围的飘动。
[0005](3)布料系统模拟的每个顶点的运动,由于顶点相对比较多,会占用较高的系统资源。
[0006]蒙皮是三维动画的一种制作技术,用于在三维软件中创建的模型基础上,为模型添加骨骼。由于骨骼与模型是相互独立的,为了让骨骼驱动模型产生合理的运动,则把模型绑定到骨骼上的技术叫做蒙皮。

【发明内容】

[0007]针对现有技术的不足,提出了一种人物动态骨骼的设计系统和方法,用于使用动态骨骼真实物理模拟布料头发和碰撞检测,以达到大大缩短美术采用旧方案骨骼动画或布料系统调整网格顶点参数所需要花的时间,更加真实逼真物理模拟布料和头发的运动和相关约束处理,高效地处理布料内部之间以及布料和其他物体之间的碰撞检测处理。
[0008]本发明的技术方案包括一种人物动态骨骼的设计系统,该系统包括:初始化模块,用于对游戏对象模型的数据进行初始化设置,包括设置骨骼模型数、骨骼节点数,进而对骨骼模型的网格进行确认并执行蒙皮操作;节点生成模块,用于生成骨骼节点数使用数据表进行存储,包括骨骼节点随时间变化的局部坐标旋转值、世界坐标;骨骼约束模块,用于对所述骨骼模型下的节点数在变化过程中执行进一步规则约束处理;碰撞约束模块,用于对所述骨骼模型在碰撞过程中执行进一步规则约束处理。
[0009]根据所述的人物动态骨骼的设计系统,所述的节点生成模块包括:节点存储子模块,用于对所生成的骨骼节点信息进行初始化,包括初始化运动前的局部坐标、旋转值、当前帧世界坐标和下一帧世界坐标,当前帧坐标和下一帧世界坐标分别表示;节点坐标子模块,用于对所述节点存储子模块初始化的当前帧世界坐标使用计算每个骨骼节点下一帧所处的世界坐标位置,同时在计算每个骨骼节点时,添加阻尼值用于模拟外力对骨骼节点的世界坐标造成的阻力。
[0010]根据所述的人物动态骨骼的设计系统,所述的骨骼约束模块包括:弹性约束子模块,对骨骼模型下的节点加入弹性值,用于表示节点移动到与父节点位置保持不动的静止位置的弹性系数;长度约束子模块,用于对当前骨骼模型下节点的位置与对应父节点的位置的长度是否超出了初始化时两者之间的长度,如果长度不超出预设值则不作处理,如果超出则将子节点往父节点的方向向量进行下减法修改,直至不超过预设长度;自定义约束子模块,用于使用可编辑交互界面自定义创建约束规则,对骨骼模型的节点进行位移时进行限制,进一步,结合所述弹性约束子模块、长度约束子模块及自定义约束子模块的约束,则节点进行约束后的位移得到最终世界坐标。
[0011 ]根据所述的人物动态骨骼的设计系统,所述的碰撞约束模块包括:球体碰撞子模块,用于对骨骼模型下的节点在进入碰撞体内部时,则将该节点位移至碰撞体表面;胶囊碰撞子模块,用于对骨骼模型下的节点分别与第一胶囊体、第二胶囊体进行向量计算,根据结果确认该节点的位置处于第一胶囊体内部时,则使用球体术确认该节点位移后的世界坐标;网格碰撞子模块,用于添加多个球体碰撞体及胶囊碰撞体对网格碰撞体进行覆盖,进一步根据所述球体碰撞子模块及胶囊碰撞子模块的碰撞约束规则确认节点所位移的最终世界坐标。
[0012]本发明的技术方法还包括一种人物动态骨骼的设计方法,该方法包括:对游戏对象模型的数据进行初始化设置,包括设置骨骼模型数、骨骼节点数,进而对骨骼模型的网格进行确认并执行蒙皮操作;生成骨骼节点数使用数据表进行存储,包括骨骼节点随时间变化的局部坐标旋转值、世界坐标;对所述骨骼模型下的节点数在变化过程中执行进一步规则约束处理;
对所述骨骼模型在碰撞过程中执行进一步规则约束处理。
[0013]进一步,该方法还包括:对所生成的骨骼节点信息进行初始化,包括初始化运动前的局部坐标、旋转值、当前帧世界坐标和下一帧世界坐标,当前帧坐标和下一帧世界坐标分别表示;对所述节点存储子模块初始化的当前帧世界坐标使用计算每个骨骼节点下一帧所处的世界坐标位置,同时在计算每个骨骼节点时,添加阻尼值用于模拟外力对骨骼节点的世界坐标造成的阻力。
[0014]进一步,该方法还包括:对骨骼模型下的节点加入弹性值,用于表示节点移动到与父节点位置保持不动的静止位置的弹性系数;对当前骨骼模型下节点的位置与对应父节点的位置的长度是否超出了初始化时两者之间的长度,如果长度不超出预设值则不作处理,如果超出则将子节点往父节点的方向向量进行下减法修改,直至不超过预设长度;使用可编辑交互界面自定义创建约束规则,对骨骼模型的节点进行位移时进行限制,进一步,结合所述弹性约束子模块、长度约束子模块及自定义约束子模块的约束,则节点进行约束后的位移得到最终世界坐标。
[0015]进一步,该方法还包括:对骨骼模型下的节点在进入碰撞体内部时,则将该节点位移至碰撞体表面;对骨骼模型下的节点分别与第一胶囊体、第二胶囊体进行向量计算,根据结果确认该节点的位置处于第一胶囊体内部时,则使用球体术确认该节点位移后的世界坐标;添加多个球体碰撞体及胶囊碰撞体对网格碰撞体进行覆盖,进一步根据所述球体碰撞子模块及胶囊碰撞子模块的碰撞约束规则确认节点所位移的最终世界坐标。
[0016]本发明的有益效果为:大大缩短美术采用旧方案骨骼动画或布料系统调整网格顶点参数所需要花的时间;更加真实逼真物理模拟布料和头发的运动和相关约束处理;高效地处理布料内部之间以及布料和其他物体之间的碰撞检测处理。
【附图说明】
[0017]图1所示为现有技术的方案流程一;
图2所示为现有技术的方案流程二;
图3所示为根据本发明实施方式的流程图;
图4a,4b为根据本发明实施方式的碰撞检测图。
【具体实施方式】
[0018]为了使本发明的目的、技术方案和优点更加清楚,下面结合附图和具体实施例对本发明进行详细描述。本发明的一种人物动态骨骼的设计系统和方法适用于单机游戏、手机游戏、网页游戏等游戏的开发。
[0019]图3所示为根据本发明实施方式的流程图。其具体执行如下(1)~(4):
(I)程序中是以每根骨骼作为基本单元来进行模拟,每根里骨骼节点数对应程序中的节点数,节点数越多模拟得也就越真实逼真。首先程序就需要跟美术一起确定好大致需要多少根骨骼,每根用多少个骨骼节点数来进行模拟,美术确定好骨骼带动的网格相关来制定骨骼并蒙皮好。导出模型和骨骼给程序员导入游戏工程里。
[0020](2)针对每一根骨骼,程序中生成节点Particle(颗粒,微粒)数据结构对应每根里的骨骼节点。Particle数据结构主要包含初始化运动前的局部坐标和旋转值、当前帧世界坐标和下一帧世界坐标,数据结构如图4所示。游戏中在每一帧首先将通过verlet数值积分公式来计算每个节点下一帧应该所处的世界坐标位置,在计算下一帧位置的时候可以引入一个阻尼值,该阻尼值乘以下一帧与当前帧的位置之差来获取下一帧应该所处的世界坐标位置。这个过程也可以模拟有外力作用的效果,只需要把力做下处理同时加入到公式中做下处理即可。计算完每个节点的下一帧位置后,就可以在后面做一些简单骨骼约束来获得想要的效果。
[0021](3)针对每个Particle做下约束。添加弹性约束,引入一个弹性值,每个节点计算完下一帧位置Pl后,获取该节点下一帧相对父节点位置保持不动的世界位置restpos,弹性值表示pl位置要移动到restpos位置的弹性系数,弹性值越高,节点就越靠近restpos。通过弹性约束可以很好得表现出子节点相对父节点延迟摆动的效果和子节点反复反弹渐进衰减到相对父节点位置保持不动的世界位置restpos;添加长度约束,由于节点经过前面的物理计算和弹性约束后的位置可能会导致偏离原本与父节点相对的距离,如果不加以长度约束,那么节点的拉长会表现出衣服头发被拉长不逼真的效果,所以需要添加节点的长度约束。长度约束只需要判断下当前节点的位置与父节点的位置的长度是否超出了初始化时两者之间的长度,如果不超出就不做任何处理,如果超出就将该节点往父节点的方向向量上做下减法到刚好的长度即可。
[0022](4)还可以为每个节点添加其他约束,包括冻结坐标约束和碰撞约束等。做好各种约束后获得的就是该节点在当前帧最终的世界坐标,再最后将每个节点设置到该当前帧最终的世界坐标即可。
[0023]其中步骤(I)?(2)表示添加骨骼模型并执行蒙皮操作,步骤(2)?(4)用于表示程序动态骨骼的物理模拟和碰撞检测。
[0024]图4a,4b为根据本发明实施方式的碰撞检测图,包括球体碰撞约束、胶囊体碰撞约束。碰撞检测处理也属于约束中的一种,碰撞约束处理的思路是已知位置Pl,如果Pl进入碰撞体内部,那么将Pl移动到碰撞体表面最近的位置P2,该p2就是该节点碰撞约束后的位置。如果Pl在碰撞体外部,那么直接返回位置Pl即可。常见的碰撞体有球体、胶囊体、网格碰撞体,这里将分别阐述对三个碰撞体的碰撞约束处理(假设Pl都是在碰撞体内部中,只有在碰撞体内部中才需要处理,要求出P2的位置)。
[0025]1.球体碰撞体约束,参考图4a。已知球的中心点p0和半径r,点pl。可获得p0到pl的向量vecO = pl - p0。可得向量vecO的长度L。直接求出p2 = p0 + vecO * (r / L)0
[0026]2.胶囊体碰撞体约束,参考图4b。已知胶囊体两个球的中心点m、n,球的半径r,点pl。可获得m至!Jn的向量M = η - m,m到pl的向量P = p - m。通过求点积M*P的正负,如果为负说明点P在左边球的左半球里,通过上面球体求P2的公式可获得p2的位置。对右边球也这样处理后,剩下的点就只能在m到η之间距离的圆柱里面。容易求出pl垂直于直线mn的点L,然后再根据上面球体求P2的公式可获得p2的位置。这样分段处理就能得出最终位置p2。
[0027]3.网格碰撞体约束。网格碰撞体是不规则的碰撞体,没法使用公式来获取p2的位置。在unity中可以采用发出射线的方式来获取p2的位置。具体操作是节点当前帧的位置是PO,计算得出下一帧的位置是pl,通过在pO沿着pl的方向发出射线,如果射线没有穿过网格碰撞体,那么节点可以直接移动到位置pl。如果有穿过碰撞体,那么可以直接获取位于网格碰撞体表面的最近碰撞点P2。通过该方式是可以处理网格碰撞体的约束,但是相对来说非常耗性能,每一帧每个点都得发出射线进行碰撞检测判断。针对不规则的网格碰撞体可以采用一种比较简单折中的方式,就是通过添加更加多的球体碰撞体和胶囊碰撞体来大致覆盖网格碰撞体,通过这种方式可以有效地处理对于不规则碰撞体的约束处理。
[0028]以上所述,只是本发明的较佳实施例而已,本发明并不局限于上述实施方式,只要其以相同的手段达到本发明的技术效果,都应属于本发明的保护范围。在本发明的保护范围内其技术方案和/或实施方式可以有各种不同的修改和变化。
【主权项】
1.一种人物动态骨骼的设计系统,其特征在于,该系统包括: 初始化模块,用于对游戏对象模型的数据进行初始化设置,包括设置骨骼模型数、骨骼节点数,进而对骨骼模型的网格进行确认并执行蒙皮操作; 节点生成模块,用于生成骨骼节点数使用数据表进行存储,包括骨骼节点随时间变化的局部坐标旋转值、世界坐标; 骨骼约束模块,用于对所述骨骼模型下的节点数在变化过程中执行进一步规则约束处理; 碰撞约束模块,用于对所述骨骼模型在碰撞过程中执行进一步规则约束处理。2.根据权利要求1所述的人物动态骨骼的设计系统,其特征在于,所述的节点生成模块包括: 节点存储子模块,用于对所生成的骨骼节点信息进行初始化,包括初始化运动前的局部坐标、旋转值、当前帧世界坐标和下一帧世界坐标,当前帧坐标和下一帧世界坐标分别表示; 节点坐标子模块,用于对所述节点存储子模块初始化的当前帧世界坐标使用计算每个骨骼节点下一帧所处的世界坐标位置,同时在计算每个骨骼节点时,添加阻尼值用于模拟外力对骨骼节点的世界坐标造成的阻力。3.根据权利要求1所述的人物动态骨骼的设计系统,其特征在于,所述的骨骼约束模块包括: 弹性约束子模块,对骨骼模型下的节点加入弹性值,用于表示节点移动到与父节点位置保持不动的静止位置的弹性系数; 长度约束子模块,用于对当前骨骼模型下节点的位置与对应父节点的位置的长度是否超出了初始化时两者之间的长度,如果长度不超出预设值则不作处理,如果超出则将子节点往父节点的方向向量进行下减法修改,直至不超过预设长度; 自定义约束子模块,用于使用可编辑交互界面自定义创建约束规则,对骨骼模型的节点进行位移时进行限制,进一步,结合所述弹性约束子模块、长度约束子模块及自定义约束子模块的约束,则节点进行约束后的位移得到最终世界坐标。4.根据权利要求1所述的人物动态骨骼的设计系统,其特征在于,所述的碰撞约束模块包括: 球体碰撞子模块,用于对骨骼模型下的节点在进入碰撞体内部时,则将该节点位移至碰撞体表面; 胶囊碰撞子模块,用于对骨骼模型下的节点分别与第一胶囊体、第二胶囊体进行向量计算,根据结果确认该节点的位置处于第一胶囊体内部时,则使用球体术确认该节点位移后的世界坐标; 网格碰撞子模块,用于添加多个球体碰撞体及胶囊碰撞体对网格碰撞体进行覆盖,进一步根据所述球体碰撞子模块及胶囊碰撞子模块的碰撞约束规则确认节点所位移的最终世界坐标。5.一种人物动态骨骼的设计方法,其特征在于,该方法包括: 对游戏对象模型的数据进行初始化设置,包括设置骨骼模型数、骨骼节点数,进而对骨骼模型的网格进行确认并执行蒙皮操作; 生成骨骼节点数使用数据表进行存储,包括骨骼节点随时间变化的局部坐标旋转值、世界坐标; 对所述骨骼模型下的节点数在变化过程中执行进一步规则约束处理; 对所述骨骼模型在碰撞过程中执行进一步规则约束处理。6.根据权利要求5所述的人物动态骨骼的设计方法,其特征在于,该方法还包括: 对所生成的骨骼节点信息进行初始化,包括初始化运动前的局部坐标、旋转值、当前帧世界坐标和下一帧世界坐标,当前帧坐标和下一帧世界坐标分别表示; 对所述节点存储子模块初始化的当前帧世界坐标使用计算每个骨骼节点下一帧所处的世界坐标位置,同时在计算每个骨骼节点时,添加阻尼值用于模拟外力对骨骼节点的世界坐标造成的阻力。7.根据权利要求5所述的人物动态骨骼的设计方法,其特征在于,该方法还包括: 对骨骼模型下的节点加入弹性值,用于表示节点移动到与父节点位置保持不动的静止位置的弹性系数; 对当前骨骼模型下节点的位置与对应父节点的位置的长度是否超出了初始化时两者之间的长度,如果长度不超出预设值则不作处理,如果超出则将子节点往父节点的方向向量进行下减法修改,直至不超过预设长度; 使用可编辑交互界面自定义创建约束规则,对骨骼模型的节点进行位移时进行限制,进一步,结合所述弹性约束子模块、长度约束子模块及自定义约束子模块的约束,则节点进行约束后的位移得到最终世界坐标。8.根据权利要求5所述的人物动态骨骼的设计方法,其特征在于,该方法还包括: 对骨骼模型下的节点在进入碰撞体内部时,则将该节点位移至碰撞体表面; 对骨骼模型下的节点分别与第一胶囊体、第二胶囊体进行向量计算,根据结果确认该节点的位置处于第一胶囊体内部时,则使用球体术确认该节点位移后的世界坐标; 添加多个球体碰撞体及胶囊碰撞体对网格碰撞体进行覆盖,进一步根据所述球体碰撞子模块及胶囊碰撞子模块的碰撞约束规则确认节点所位移的最终世界坐标。
【文档编号】G06T13/40GK105976418SQ201610508353
【公开日】2016年9月28日
【申请日】2016年6月28日
【发明人】陈镇秋, 陈汉辉, 李茂 , 刘玲, 卢歆翮
【申请人】珠海金山网络游戏科技有限公司, 珠海西山居移动游戏科技有限公司
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1