本发明属于计算机图形学技术领域,具体涉及一种人体三维动画中关节皮肤变形方法。
背景技术:
早期的人体三维动画一般通过顶点动画的方式实现。这种方式需要设置关键帧,在关键帧上的所有顶点位置都预先由人工设定好,而所有的非关键帧的顶点位置由关键帧顶点位置插值得到。使用这种方法生成动画的过程比较繁琐,而且需要大量的人工操作,需要的存储空间也随着动画时长的增加而增加。
后来,出现了由骨架驱动的人体变形方法。这类方法首先需要设置人体骨架,建立人体皮肤上的点与骨架之间的关系,再由骨架的变形来驱动皮肤变形。这类方法中最常使用的有骨架子空间变形法与对偶四元数皮肤变形法,但这两种方法都有其固有缺陷,骨架子空间变形法在大角度旋转及扭转时会出现皮肤塌陷,而对偶四元数皮肤变形法会在关节处出现皮肤膨胀,另外,这两种方法的计算量都比较大,因而速度慢。
技术实现要素:
(一)要解决的技术问题
本发明的目的是提供一种人体三维动画关节皮肤变形方法,使人体关节在大角度旋转时不会产生皮肤塌陷,并减少计算量,提高速度。
(二)技术方案
为了实现上述目的,本发明提供了一种基于伸缩的人体三维动画变形方法,包括如下步骤:步骤1:将初始姿态的人体骨架及皮肤投影至与旋转轴垂直的平面;
步骤2:由人体骨架、旋转角度及投影后人体皮肤宽度得到收缩范围,对处于收缩范围内的人体顶点进行收缩;
步骤3:收缩之后,对满足一定条件的人体顶点进行拉伸;
步骤4:对旋转外侧的点,使用骨架子空间变形法进行变形,得到人体变形结果。
(三)有益效果
本发明提出的基于伸缩的人体三维动画变形方法不需要人工操作,只要设立好骨架的旋转角度就能得到变形结果,便于非专业人士使用,并且避免了传统方法在旋转时出现的塌陷及膨胀问题。同时,本方法的变形速度快,且变形效果较为理想。
附图说明
图1是本发明初始姿态下人的含关节的人的肢体(由圆柱体模拟,下同)的示意图。
图2是本发明直接旋转后人体的示意图。
图3是本发明的人体顶点收缩范围示意图。
图4是本发明经过收缩之后的人体关节处。
图5是本发明经过拉伸之后的人体。
图6是在使用本发明对真实人体三维模型的肘关节弯曲的效果图。
图7是本发明流程图。
具体实施方式
下面结合具体实施例,并参照附图(以圆柱体模拟人体),对本发明进行进一步的描述。
步骤1:根据初始姿态的人体骨架模型、皮肤模型及转动角度计算变形区域。
步骤2:对变形区域内发生重叠区域的皮肤顶点向为重叠方向收缩。
步骤3:收缩之后,会在关节部分皮肤区域产生空洞,对与空洞有关的皮肤顶点进行拉伸以填补空洞。
步骤4:对旋转外侧的点,使用骨架子空间变形法进行变形,得到人体变形结果。
下面详细说明每个步骤。
步骤1:初始姿态的人体为网格模型,且网格内部绑定了由关节和骨骼组成的骨架,人体的骨架结构常用层次结构来表示。网格模型模拟人体的皮肤,由人体顶点间组成的三角面片或四边形构成。每个人体顶点由某段骨架主要影响,这个顶点与骨架的对应关系由动画设计者或者网格模型提供者给出。
接下来由设置的骨架旋转角度,得到旋转轴,将人体投影至与旋转轴垂直的平面。初始姿态的人体如图1所示(由圆柱体模拟,以下均称人体),经过直接旋转后如图2所示。其中,点a是关节点,ab和ac是初始姿态下人体的两段骨架,ac′为经过旋转后,骨架ac的位置。由ac与ac′可得垂直于旋转轴的平面,再由关节点a可得旋转轴。在图2中,旋转轴为过点a且垂直于屏幕平面的轴线。
步骤2:由人体骨架、旋转角度及投影后人体皮肤宽度得到收缩范围,并对处于收缩范围内的人体顶点进行收缩。收缩范围如图3所示,其具体几何关系如下:
旋转后骨架如线段ab、ac′所示。投影后人体皮肤的宽度定义如下:如图1,投影后过关节点a作骨架ab的垂线,与投影后的人体边缘交于d、e两点,则投影后人体皮肤的宽度为线段de的长度,设其为d。如图3,在投影平面上寻找一点f,使f到变形后两段骨架的距离均为d,即f到ab、ac′的距离均为d。过f作骨架ab的垂线,垂足为g,则收缩范围由点a与点g的位置确定。对人体顶点p,若投影后点p在旋转内侧,过点p作骨架ab的垂线,其垂足在线段ag上,则对点p进行收缩,具体收缩方式如下:
将人体投影至与旋转轴垂直的平面,在该平面上建立坐标系,以g点为原点,x轴正方向为向右(x轴即骨架ab所在直线),y轴正方向为向上(在下文没有提出新的坐标系之前均使用此坐标系),并保持物体上的顶点在旋转轴方向的分量不变。设收缩后的顶点范围为gh。对人体上的顶点p,若投影后ag≥p(x)≥0,且p(y)≥0,则有:
同理,对骨架ac控制的顶点也进行收缩。进行步骤2收缩后,人体皮肤如图4所示,其中点i的坐标为(gh,ad),点j的坐标为(0,ad)。
步骤3:收缩之后,对满足一定条件的人体顶点进行拉伸。具体条件为:若投影后人体顶点p位于矩形ghij内,则对顶点p进行拉伸。具体拉伸方式为:
保持物体上的顶点在旋转轴方向的分量不变,对于物体上顶点p,若投影后gh≥p(x)≥0且ad≥p(y)≥0,则有:
p(x)=p(x)×((-ah/(hg×ad))×p(y)+ag/hg)
经过步骤3拉伸之后,人体如图4所示,在旋转外侧留有空缺部分。
步骤4:由于骨架子空间变形法在旋转外侧能得到较好的效果,故对旋转外侧的点,使用经典的骨架子空间变形法进行变形。
至此,本发明提出的变形方法变形完成,得到了较为理想的变形效果。经过本方法变形得到的旋转后人体如图5(圆柱体模拟)所示;优选地,采用本方法对一个真实三维人体模型的旋转后效果如图6所示。
以上所述的具体实施例,对本发明的目的、技术方案和有益效果进行了进一步详细说明,但所应理解的是,以上所述仅为本发明的具体实施例而已,并不用于限制本发明,凡在本发明的精神和原则之内,所做的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。