CN111583367B - 一种头发模拟方法及系统 - Google Patents
一种头发模拟方法及系统 Download PDFInfo
- Publication number
- CN111583367B CN111583367B CN202010442123.6A CN202010442123A CN111583367B CN 111583367 B CN111583367 B CN 111583367B CN 202010442123 A CN202010442123 A CN 202010442123A CN 111583367 B CN111583367 B CN 111583367B
- Authority
- CN
- China
- Prior art keywords
- hair
- point
- mapping
- points
- inum
- Prior art date
- Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
- Active
Links
Images
Classifications
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T13/00—Animation
- G06T13/20—3D [Three Dimensional] animation
- G06T13/40—3D [Three Dimensional] animation of characters, e.g. humans, animals or virtual beings
-
- G—PHYSICS
- G06—COMPUTING; CALCULATING OR COUNTING
- G06T—IMAGE DATA PROCESSING OR GENERATION, IN GENERAL
- G06T2200/00—Indexing scheme for image data processing or generation, in general
- G06T2200/04—Indexing scheme for image data processing or generation, in general involving 3D image data
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本发明提供了计算机图形学领域的一种头发模拟方法及系统,方法包括如下步骤:步骤S10、设定头发造型的初始状态,并将所述头发造型分为固定区域以及运动区域;步骤S20、基于所述固定区域以及运动区域的头发走向生成头发的映射骨骼;步骤S30、设定头发的运动参数,并利用所述运动参数以及映射骨骼模拟头发的运动。本发明的优点在于:实现对复杂发型的运动进行实时模拟。
Description
技术领域
本发明涉及计算机图形学领域,特别指一种头发模拟方法及系统。
背景技术
在电影制作、动画制作等领域,为了达到更加逼真的效果,需要对头发进行模拟。针对头发的模拟,传统上采用如下方法:1、预先做好头发运动的播放动画以及播放条件,满足播放条件时逐帧播放动画模拟头发的运动;2、采用FTL(staticfollowtheleader)和在FTL上优化的DFTL(dynamic followtheleader)的物理模拟法,即根据头发的特征,生成几百根或者几千根基础发丝,对基础发丝加入弹簧质点约束,然后在基础发丝的发根上采用插值的方式形成头发束从而模拟整个头发。
然而,传统的方法存在如下缺点:1、通过播放动画的方法,头发的模拟效果依赖于3D建模师的经验;需要针对不同的情况制作不同的动画;动画播放需要每帧都保存,存储量大;2、只能针对简单发型,对于复杂发型,形变时稳定性不足、真实感不强;复杂头发为了保证形状,必须增加基础发丝的数量,导致计算量变大;针对不同发型,基础发丝的发根的选择也是一个很大的工作量。
因此,如何提供一种头发模拟方法及系统,实现对复杂发型的运动进行实时模拟,成为一个亟待解决的问题。
发明内容
本发明要解决的技术问题,在于提供一种头发模拟方法及系统,实现对复杂发型的运动进行实时模拟。
一方面,本发明提供了一种头发模拟方法,包括如下步骤:
步骤S10、设定头发造型的初始状态,并将所述头发造型分为固定区域以及运动区域;
步骤S20、基于所述固定区域以及运动区域的头发走向生成头发的映射骨骼;
步骤S30、设定头发的运动参数,并利用所述运动参数以及映射骨骼模拟头发的运动。
进一步地,所述步骤S10中,所述初始状态为头发造型仅在重力作用下的默认回归状态。
进一步地,所述步骤S10中,所述固定区域以及运动区域均包括若干根头发;所述固定区域的头发牵引运动区域的头发。
进一步地,所述步骤S20具体包括:
步骤S21、设所述固定区域的头发由点集合P{p1...pn}组成,所述运动区域的头发由点集合Q{q1...qn}组成,所述固定区域和运动区域的连线关系为L{l1,l2...ln};所述点集合P{p1...pn}与点集合Q{q1...qn}的连通线为R{r1...rm},R为L的子集;所述连通线R{r1...rm}的中点的集合为M{rM1...rMm};
设人头的正方向为起点S,角度的阈值为D,逆时针查找与所述起点S最近的点,加入集合H1;逆时针查找与所述集合H1最近的点,加入集合H1,直至没有角度大于所述D的点;
判断所述集合H1是否等于点集合Q{q1...qn},若是,则进入步骤S22;若否,则逆时针查找与所述集合H1最近的点,加入集合H2,逆时针查找与所述集合H2最近的点,加入集合H3,直至H1+H2+...+HK=Q,并进入步骤S22;其中K为正整数;
步骤S22、设定映射骨骼的长度和密度,根据集合H1+H2+...+HK将运动的头发点分为Q1...QK;基于集合M{rM1...rMm}得到运动的头发点与点集合P{p1...pn}相连的点,并设为起点;找到与所述起点最远的点,设为终点;
基于所述起点的y轴坐标确定头发的映射骨骼,并基于所述映射骨骼的长度和密度,将所述起点进行均等分,得到骨骼线;
步骤S23、利用点和四边形的质心坐标公式计算运动的头发点与映射骨骼的映射关系:
u=(a*x+b*y+c)/(g*x+h*y+1);
v=(d*x+e*y+f)/(g*x+h*y+1);
其中(u,v)表示落在由四个映射骨骼组成的四边形内部的点,u为横坐标,v为纵坐标;(x,y)表示由四个映射骨骼组成的四边形上的点,x为横坐标,y为纵坐标;a、b、c、d、e、f、g、h表示待求解的参数,由四组(u,v)和(x,y)进行求解;
步骤S24、记录映射骨骼从和所述固定区域的头发点最近位置到最远位置的点为P'(P'0...P'n),相互之间的距离为L'(L'1...L'n-1);n表示点的序号,为正整数;
当点P'n围绕一个点进行转动时,设新的位置为P_new(p_nx,p_ny,p_nz)、原位置为P_old(p_ox,p_oy,p_oz)、旋转角度为ir、头发的段数为imnu、柔性参数为k,则点P'n的位置为:
p_nx=p_ox*cos((1+k*n)*ir*n/inum)-p_oz*sin((1+k*n)*ir*n/inum);
p_nz=p_oz*cos((1+k*n)*ir*n/inum)-p_ox*sin((1+k*n)*ir*n/inum);
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1;
当点P'n往一个方向拉伸,且拉伸的距离为(ix,iy,iz),则点P'n的位置为:
p_nx=p_ox+ix*(1+k*n)*n/inum;
p_ny=p_oy+iy*(1+k*n)*n/inum;
p_nz=p_oz+iz*(1+k*n)*n/inum;
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1。
进一步地,所述步骤S30中,所述运动参数具体包括:
头发点在当前帧的位置p”n、头发点在当前帧的速度Vn、头发点在x轴的最大运动速度returnx以及头发点在z轴的最大运动速度returnz;
p”n=p”n-1+Vnt;
Vnt=Vn-1+at;
a=(F重力+F拉力+F其它外界力)/m;
其中t表示头发点运动的时间,a表示加速度,m表示头发的质量,F其它外界力指拉力或者风力。
另一方面,本发明提供了一种头发模拟系统,包括如下模块:
头发造型初始化模块,用于设定头发造型的初始状态,并将所述头发造型分为固定区域以及运动区域;
映射骨骼生成模块,用于基于所述固定区域以及运动区域的头发走向生成头发的映射骨骼;
头发模拟模块,用于设定头发的运动参数,并利用所述运动参数以及映射骨骼模拟头发的运动。
进一步地,所述头发造型初始化模块中,所述初始状态为头发造型仅在重力作用下的默认回归状态。
进一步地,所述头发造型初始化模块中,所述固定区域以及运动区域均包括若干根头发;所述固定区域的头发牵引运动区域的头发。
进一步地,所述映射骨骼生成模块具体包括:
最近头发点查找单元,用于设所述固定区域的头发由点集合P{p1…pn}组成,所述运动区域的头发由点集合Q{q1…qn}组成,所述固定区域和运动区域的连线关系为L{l1,l2...ln};所述点集合P{p1...pn}与点集合Q{q1...qn}的连通线为R{r1...rm},R为L的子集;所述连通线R{r1...rm}的中点的集合为M{rM1...rMm};
设人头的正方向为起点S,角度的阈值为D,逆时针查找与所述起点S最近的点,加入集合H1;逆时针查找与所述集合H1最近的点,加入集合H1,直至没有角度大于所述D的点;
判断所述集合H1是否等于点集合Q{q1...qn},若是,则进入骨骼生成单元;若否,则逆时针查找与所述集合H1最近的点,加入集合H2,逆时针查找与所述集合H2最近的点,加入集合H3,直至H1+H2+...+HK=Q,并进入骨骼生成单元;其中K为正整数;
骨骼生成单元,用于定映射骨骼的长度和密度,根据集合H1+H2+...+HK将运动的头发点分为Q1...QK;基于集合M{rM1...rMm}得到运动的头发点与点集合P{p1...pn}相连的点,并设为起点;找到与所述起点最远的点,设为终点;
基于所述起点的y轴坐标确定头发的映射骨骼,并基于所述映射骨骼的长度和密度,将所述起点进行均等分,得到骨骼线;
映射关系计算单元,用于利用点和四边形的质心坐标公式计算运动的头发点与映射骨骼的映射关系:
u=(a*x+b*y+c)/(g*x+h*y+1);
v=(d*x+e*y+f)/(g*x+h*y+1);
其中(u,v)表示落在由四个映射骨骼组成的四边形内部的点,u为横坐标,v为纵坐标;(x,y)表示由四个映射骨骼组成的四边形上的点,x为横坐标,y为纵坐标;a、b、c、d、e、f、g、h表示待求解的参数,由四组(u,v)和(x,y)进行求解;
头发点位置计算单元,用于记录映射骨骼从和所述固定区域的头发点最近位置到最远位置的点为P'(P'0...P'n),相互之间的距离为L'(L'1...L'n-1);n表示点的序号,为正整数;
当点P'n围绕一个点进行转动时,设新的位置为P_new(p_nx,p_ny,p_nz)、原位置为P_old(p_ox,p_oy,p_oz)、旋转角度为ir、头发的段数为imnu、柔性参数为k,则点P'n的位置为:
p_nx=p_ox*cos((1+k*n)*ir*n/inum)-p_oz*sin((1+k*n)*ir*n/inum);
p_nz=p_oz*cos((1+k*n)*ir*n/inum)-p_ox*sin((1+k*n)*ir*n/inum);
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1;
当点P'n往一个方向拉伸,且拉伸的距离为(ix,iy,iz),则点P'n的位置为:
p_nx=p_ox+ix*(1+k*n)*n/inum;
p_ny=p_oy+iy*(1+k*n)*n/inum;
p_nz=p_oz+iz*(1+k*n)*n/inum;
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1。
进一步地,所述头发模拟模块中,所述运动参数具体包括:
头发点在当前帧的位置p”n、头发点在当前帧的速度Vn、头发点在x轴的最大运动速度returnx以及头发点在z轴的最大运动速度returnz;
p”n=p”n-1+Vnt;
Vnt=Vn-1+at;
a=(F重力+F拉力+F其它外界力)/m;
其中t表示头发点运动的时间,a表示加速度,m表示头发的质量,F其它外界力指拉力或者风力。
本发明的优点在于:
通过将头发造型分为固定区域以及运动区域,基于固定区域以及运动区域的头发走向生成头发的映射骨骼,设定头发的运动参数后,利用运动参数以及映射骨骼模拟头发的运动,既能保证头发的复杂度,又能实时根据物理环境力学情况、人体运动情况进行头发的模拟,适用于头发跟随人体甩动和头发飘动的情况,最终在没有力的作用下恢复初始状态,即实现对复杂发型的运动进行实时模拟。
附图说明
下面参照附图结合实施例对本发明作进一步的说明。
图1是本发明一种头发模拟方法的流程图。
图2是本发明一种头发模拟系统的结构示意图。
图3是本发明固定区域和运动区域的效果图。
图4是本发明骨骼线的效果图。
图5是本发明头发点和和映射骨骼绑定的效果图。
图6是本发明头发运动模拟的效果图。
具体实施方式
请参照图1至图6所示,本发明一种头发模拟方法的较佳实施例,包括如下步骤:
步骤S10、设定头发造型的初始状态,并将所述头发造型分为固定区域(依附头皮部分)以及运动区域;
步骤S20、基于所述固定区域以及运动区域的头发走向生成头发的映射骨骼;映射骨骼是是做模型动画领域内通用的一种方法,一般用于人体的运动;头发的映射骨骼数可以通过参数进行确定,为了提高计算效率,几万个头发点可以映射为100个映射骨骼;
步骤S30、设定头发的运动参数,并利用所述运动参数以及映射骨骼模拟运动区域的头发的运动。
本申请还适用于任意柔性模型的运动。
所述步骤S10中,所述初始状态为头发造型仅在重力作用下的默认回归状态。
所述步骤S10中,所述固定区域以及运动区域均包括若干根头发;所述固定区域的头发牵引运动区域的头发。
所述步骤S20具体包括:
步骤S21、设所述固定区域的头发由点集合P{p1…pn}组成,所述运动区域的头发由点集合Q{q1…qn}组成,所述固定区域和运动区域的连线关系为L{l1,l2...ln};所述点集合P{p1...pn}与点集合Q{q1...qn}的连通线为R{r1...rm},R为L的子集;所述连通线R{r1...rm}的中点的集合为M{rM1...rMm};
头发依附于人头四周分布,设人头的正方向为起点S,角度的阈值为D,逆时针查找与所述起点S最近的点,加入集合H1;逆时针查找与所述集合H1最近的点,加入集合H1,直至没有角度大于所述D的点;所述D用于根据角度,以头的正方向为起点,将头发分块;
判断所述集合H1是否等于点集合Q{q1...qn},若是,则进入步骤S22;若否,则逆时针查找与所述集合H1最近的点,加入集合H2,逆时针查找与所述集合H2最近的点,加入集合H3,直至H1+H2+...+HK=Q,并进入步骤S22;其中K为正整数;
头发由若干个头发点组成,包括点集合P{p1...pn}和点集合Q{q1...qn},头发点组成线,线组成三角形,三角形组成网格,即头发造型;一部分头发点是运动的,一部分头发点是固定的;连通线的一端是运动的头发点,另一端是固定的头发点。
步骤S22、设定映射骨骼的长度和密度,根据集合H1+H2+...+HK将运动的头发点分为Q1...QK;基于集合M{rM1...rMm}得到运动的头发点与点集合P{p1...pn}相连的点,并设为起点;找到与所述起点最远的点,设为终点;
基于所述起点的y轴坐标确定头发的映射骨骼,并基于所述映射骨骼的长度和密度,将所述起点进行均等分,得到骨骼线;
头发运动过程中受重力和拉扯力的影响最大,映射骨骼的走向并不依附于头发点的走向,因为在物理模拟中,头发受重力的作用,理论上应该是顺直的,但是现实中,头发是各种弯曲卷起的,因此将卷起认为是头发的发型状态,必须维持,所以直接取起始点的y轴值来确定头发的映射骨骼。
步骤S23、利用点和四边形的质心坐标公式计算运动的头发点与映射骨骼的映射关系:
u=(a*x+b*y+c)/(g*x+h*y+1);
v=(d*x+e*y+f)/(g*x+h*y+1);
其中(u,v)表示落在由四个映射骨骼组成的四边形内部的点,u为横坐标,v为纵坐标;(x,y)表示由四个映射骨骼组成的四边形上的点,x为横坐标,y为纵坐标;a、b、c、d、e、f、g、h表示待求解的参数,由四组(u,v)和(x,y)进行求解;
头发上的头发点一定可以落在四个映射骨骼中间,所以建立了一个头发点和四个映射骨骼之间的关系;一个映射骨骼和其相邻的映射骨骼之间存在力学关系,拉力,和其存在间隔的映射骨骼存在弯曲力,避免头发被折叠,其相邻的映射骨骼和间隔的映射骨骼加起来为15个映射骨骼;
骨骼线中的每个点最多和15个映射骨骼相关,一个头发点最多和四个映射骨骼相关,头发点依附于四个映射骨骼进行运动;头发的映射骨骼根据距离分为多个集合,集合之间的映射骨骼保持和同一个集合内映射骨骼的约束关系,不同集合之间没有力学关系,相互之间通过碰撞避免穿插。
步骤S24、头发的拉动模拟采用钟摆方式进行,头发属于柔性但没有拉伸性,头发在同一时间受到上方头发点的拉动,重力的作用和旁边头发点的约束。上方头发点的拉动和重力作用下头发将恢复初始状态。旁边头发点的约束用于避免头发在恢复造型的过程中和周边头发点发生穿插。计算过程主要包括两个力学计算,第一个为头发突然被拉动时候的状态,另一个为头发在非初始状态下恢复初始状态的运动模拟过程:
记录映射骨骼从和所述固定区域的头发点最近位置到最远位置的点为P'(P'0...P'n),相互之间的距离为L'(L'1...L'n-1);n表示点的序号,为正整数;头发突然被拉动时的状态便是点P'0被瞬间拉动,P'1...P'n在惯性和拉力下跟着P'0运动,产生头发拉动的效果;
当点P'n围绕一个点进行转动时,如转头,设新的位置为P_new(p_nx,p_ny,p_nz)、原位置为P_old(p_ox,p_oy,p_oz)、旋转角度为ir、头发的段数为imnu、柔性参数为k,则点P'n的位置为:
p_nx=p_ox*cos((1+k*n)*ir*n/inum)-p_oz*sin((1+k*n)*ir*n/inum);
p_nz=p_oz*cos((1+k*n)*ir*n/inum)-p_ox*sin((1+k*n)*ir*n/inum);
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1;
头旋转时,发根处的头发点跟着旋转,越往下的头发点,旋转角度越小,imnu和k用于控制递减的旋转角度;
当点P'n往一个方向拉伸,如人往前跑,且拉伸的距离为(ix,iy,iz),则点P'n的位置为:
p_nx=p_ox+ix*(1+k*n)*n/inum;
p_ny=p_oy+iy*(1+k*n)*n/inum;
p_nz=p_oz+iz*(1+k*n)*n/inum;
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1。
根据点P'n受钟摆的约束长度,计算得到p_ny,即点P'n往点P'n-1的方向回缩。
所述步骤S30中,所述运动参数具体包括:
头发点在当前帧的位置p”n、头发点在当前帧的速度Vn、头发点在x轴的最大运动速度returnx以及头发点在z轴的最大运动速度returnz;y轴由钟摆进行约束,因此此处未限定最大运动速度;
p”n=p”n-1+Vnt;
Vnt=Vn-1+at;
a=(F重力+F拉力+F其它外界力)/m;
其中t表示头发点运动的时间,a表示加速度,m表示头发的质量,F其它外界力指拉力或者风力。F拉力主要来自于周边十五个映射骨骼,相邻的映射骨骼约束拉伸过渡,间隔的映射骨骼约束弯曲折叠。
本发明一种头发模拟系统的较佳实施例,包括如下模块:
头发造型初始化模块,用于设定头发造型的初始状态,并将所述头发造型分为固定区域(依附头皮部分)以及运动区域;
映射骨骼生成模块,用于基于所述固定区域以及运动区域的头发走向生成头发的映射骨骼;映射骨骼是是做模型动画领域内通用的一种方法,一般用于人体的运动;头发的映射骨骼数可以通过参数进行确定,为了提高计算效率,几万个头发点可以映射为100个映射骨骼;
头发模拟模块,用于设定头发的运动参数,并利用所述运动参数以及映射骨骼模拟运动区域的头发的运动。
本申请还适用于任意柔性模型的运动。
所述头发造型初始化模块中,所述初始状态为头发造型仅在重力作用下的默认回归状态。
所述头发造型初始化模块中,所述固定区域以及运动区域均包括若干根头发;所述固定区域的头发牵引运动区域的头发。
所述映射骨骼生成模块具体包括:
最近头发点查找单元,用于设所述固定区域的头发由点集合P{p1...pn}组成,所述运动区域的头发由点集合Q{q1...qn}组成,所述固定区域和运动区域的连线关系为L{l1,l2...ln};所述点集合P{p1...pn}与点集合Q{q1...qn}的连通线为R{r1...rm},R为L的子集;所述连通线R{r1...rm}的中点的集合为M{rM1...rMm};
头发依附于人头四周分布,设人头的正方向为起点S,角度的阈值为D,逆时针查找与所述起点S最近的点,加入集合H1;逆时针查找与所述集合H1最近的点,加入集合H1,直至没有角度大于所述D的点;所述D用于根据角度,以头的正方向为起点,将头发分块;
判断所述集合H1是否等于点集合Q{q1…qn},若是,则进入骨骼生成单元;若否,则逆时针查找与所述集合H1最近的点,加入集合H2,逆时针查找与所述集合H2最近的点,加入集合H3,直至H1+H2+...+HK=Q,并进入骨骼生成单元;其中K为正整数;
头发由若干个头发点组成,包括点集合P{p1...pn}和点集合Q{q1...qn},头发点组成线,线组成三角形,三角形组成网格,即头发造型;一部分头发点是运动的,一部分头发点是固定的;连通线的一端是运动的头发点,另一端是固定的头发点。
骨骼生成单元,用于定映射骨骼的长度和密度,根据集合H1+H2+...+HK将运动的头发点分为Q1...QK;基于集合M{rM1...rMm}得到运动的头发点与点集合P{p1...pn}相连的点,并设为起点;找到与所述起点最远的点,设为终点;
基于所述起点的y轴坐标确定头发的映射骨骼,并基于所述映射骨骼的长度和密度,将所述起点进行均等分,得到骨骼线;
头发运动过程中受重力和拉扯力的影响最大,映射骨骼的走向并不依附于头发点的走向,因为在物理模拟中,头发受重力的作用,理论上应该是顺直的,但是现实中,头发是各种弯曲卷起的,因此将卷起认为是头发的发型状态,必须维持,所以直接取起始点的y轴值来确定头发的映射骨骼。
映射关系计算单元,用于利用点和四边形的质心坐标公式计算运动的头发点与映射骨骼的映射关系:
u=(a*x+b*y+c)/(g*x+h*y+1);
v=(d*x+e*y+f)/(g*x+h*y+1);
其中(u,v)表示落在由四个映射骨骼组成的四边形内部的点,u为横坐标,v为纵坐标;(x,y)表示由四个映射骨骼组成的四边形上的点,x为横坐标,y为纵坐标;a、b、c、d、e、f、g、h表示待求解的参数,由四组(u,v)和(x,y)进行求解;
头发上的头发点一定可以落在四个映射骨骼中间,所以建立了一个头发点和四个映射骨骼之间的关系;一个映射骨骼和其相邻的映射骨骼之间存在力学关系,拉力,和其存在间隔的映射骨骼存在弯曲力,避免头发被折叠,其相邻的映射骨骼和间隔的映射骨骼加起来为15个映射骨骼;
骨骼线中的每个点最多和15个映射骨骼相关,一个头发点最多和四个映射骨骼相关,头发点依附于四个映射骨骼进行运动;头发的映射骨骼根据距离分为多个集合,集合之间的映射骨骼保持和同一个集合内映射骨骼的约束关系,不同集合之间没有力学关系,相互之间通过碰撞避免穿插。
头发的拉动模拟采用钟摆方式进行,头发属于柔性但没有拉伸性,头发在同一时间受到上方头发点的拉动,重力的作用和旁边头发点的约束。上方头发点的拉动和重力作用下头发将恢复初始状态。旁边头发点的约束用于避免头发在恢复造型的过程中和周边头发点发生穿插。计算过程主要包括两个力学计算,第一个为头发突然被拉动时候的状态,另一个为头发在非初始状态下恢复初始状态的运动模拟过程。
头发点位置计算单元,用于记录映射骨骼从和所述固定区域的头发点最近位置到最远位置的点为P'(P'0...P'n),相互之间的距离为L'(L'1...L'n-1);n表示点的序号,为正整数;头发突然被拉动时的状态便是点P'0被瞬间拉动,P'1…P'n在惯性和拉力下跟着P'0运动,产生头发拉动的效果;
当点P'n围绕一个点进行转动时,如转头,设新的位置为P_new(p_nx,p_ny,p_nz)、原位置为P_old(p_ox,p_oy,p_oz)、旋转角度为ir、头发的段数为imnu、柔性参数为k,则点P'n的位置为:
p_nx=p_ox*cos((1+k*n)*ir*n/inum)-p_oz*sin((1+k*n)*ir*n/inum);
p_nz=p_oz*cos((1+k*n)*ir*n/inum)-p_ox*sin((1+k*n)*ir*n/inum);
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1;
头旋转时,发根处的头发点跟着旋转,越往下的头发点,旋转角度越小,imnu和k用于控制递减的旋转角度;
当点P'n往一个方向拉伸,如人往前跑,且拉伸的距离为(ix,iy,iz),则点P'n的位置为:
p_nx=p_ox+ix*(1+k*n)*n/inum;
p_ny=p_oy+iy*(1+k*n)*n/inum;
p_nz=p_oz+iz*(1+k*n)*n/inum;
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1。
根据点P'n受钟摆的约束长度,计算得到p_ny,即点P'n往点P'n-1的方向回缩。
所述头发模拟模块中,所述运动参数具体包括:
头发点在当前帧的位置p”n、头发点在当前帧的速度Vn、头发点在x轴的最大运动速度returnx以及头发点在z轴的最大运动速度returnz;y轴由钟摆进行约束,因此此处未限定最大运动速度;
p”n=p”n-1+Vnt;
Vnt=Vn-1+at;
a=(F重力+F拉力+F其它外界力)/m;
其中t表示头发点运动的时间,a表示加速度,m表示头发的质量,F其它外界力指拉力或者风力。F拉力主要来自于周边十五个映射骨骼,相邻的映射骨骼约束拉伸过渡,间隔的映射骨骼约束弯曲折叠。
综上所述,本发明的优点在于:
通过将头发造型分为固定区域以及运动区域,基于固定区域以及运动区域的头发走向生成头发的映射骨骼,设定头发的运动参数后,利用运动参数以及映射骨骼模拟头发的运动,既能保证头发的复杂度,又能实时根据物理环境力学情况、人体运动情况进行头发的模拟,适用于头发跟随人体甩动和头发飘动的情况,最终在没有力的作用下恢复初始状态,即实现对复杂发型的运动进行实时模拟。
虽然以上描述了本发明的具体实施方式,但是熟悉本技术领域的技术人员应当理解,我们所描述的具体的实施例只是说明性的,而不是用于对本发明的范围的限定,熟悉本领域的技术人员在依照本发明的精神所作的等效的修饰以及变化,都应当涵盖在本发明的权利要求所保护的范围内。
Claims (8)
1.一种头发模拟方法,其特征在于:包括如下步骤:
步骤S10、设定头发造型的初始状态,并将所述头发造型分为固定区域以及运动区域;
步骤S20、基于所述固定区域以及运动区域的头发走向生成头发的映射骨骼;
步骤S30、设定头发的运动参数,并利用所述运动参数以及映射骨骼模拟头发的运动;
所述步骤S20具体包括:
步骤S21、设所述固定区域的头发由点集合P{p1...pn}组成,所述运动区域的头发由点集合Q{q1...qn}组成,所述固定区域和运动区域的连线关系为L{l1,l2...ln};所述点集合P{p1...pn}与点集合Q{q1...qn}的连通线为R{r1...rm},R为L的子集;所述连通线R{r1...rm}的中点的集合为M{rM1...rMm};
设人头的正方向为起点S,角度的阈值为D,逆时针查找与所述起点S最近的点,加入集合H1;逆时针查找与所述集合H1最近的点,加入集合H1,直至没有角度大于所述D的点;
判断所述集合H1是否等于点集合Q{q1...qn},若是,则进入步骤S22;若否,则逆时针查找与所述集合H1最近的点,加入集合H2,逆时针查找与所述集合H2最近的点,加入集合H3,直至H1+H2+...+HK=Q,并进入步骤S22;其中K为正整数;
步骤S22、设定映射骨骼的长度和密度,根据集合H1+H2+...+HK将运动的头发点分为Q1...QK;基于集合M{rM1...rMm}得到运动的头发点与点集合P{p1...pn}相连的点,并设为起点;找到与所述起点最远的点,设为终点;
基于所述起点的y轴坐标确定头发的映射骨骼,并基于所述映射骨骼的长度和密度,将所述起点进行均等分,得到骨骼线;
步骤S23、利用点和四边形的质心坐标公式计算运动的头发点与映射骨骼的映射关系:
u=(a*x+b*y+c)/(g*x+h*y+1);
v=(d*x+e*y+f)/(g*x+h*y+1);
其中(u,v)表示落在由四个映射骨骼组成的四边形内部的点,u为横坐标,v为纵坐标;(x,y)表示由四个映射骨骼组成的四边形上的点,x为横坐标,y为纵坐标;a、b、c、d、e、f、g、h表示待求解的参数,由四组(u,v)和(x,y)进行求解;
步骤S24、记录映射骨骼从和所述固定区域的头发点最近位置到最远位置的点为P'(P'0...P'n),相互之间的距离为L'(L'1...L'n-1);n表示点的序号,为正整数;
当点Pn'围绕一个点进行转动时,设新的位置为P_new(p_nx,p_ny,p_nz)、原位置为P_old(p_ox,p_oy,p_oz)、旋转角度为ir、头发的段数为imnu、柔性参数为k,则点Pn'的位置为:
p_nx=p_ox*cos((1+k*n)*ir*n/inum)-p_oz*sin((1+k*n)*ir*n/inum);
p_nz=p_oz*cos((1+k*n)*ir*n/inum)-p_ox*sin((1+k*n)*ir*n/inum);
当点P'n往一个方向拉伸,且拉伸的距离为(ix,iy,iz),则点P'n的位置为:
p_nx=p_ox+ix*(1+k*n)*n/inum;
p_ny=p_oy+iy*(1+k*n)*n/inum;
p_nz=p_oz+iz*(1+k*n)*n/inum;
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1。
2.如权利要求1所述的一种头发模拟方法,其特征在于:所述步骤S10中,所述初始状态为头发造型仅在重力作用下的默认回归状态。
3.如权利要求1所述的一种头发模拟方法,其特征在于:所述步骤S10中,所述固定区域以及运动区域均包括若干根头发;所述固定区域的头发牵引运动区域的头发。
4.如权利要求1所述的一种头发模拟方法,其特征在于:所述步骤S30中,所述运动参数具体包括:
头发点在当前帧的位置p”n、头发点在当前帧的速度Vn、头发点在x轴的最大运动速度returnx以及头发点在z轴的最大运动速度returnz;
p”n=p”n-1+Vnt;
Vnt=Vn-1+at;
a=(F重力+F拉力+F其它外界力)/m;
其中t表示头发点运动的时间,a表示加速度,m表示头发的质量,F其它外界力指拉力或者风力。
5.一种头发模拟系统,其特征在于:包括如下模块:
头发造型初始化模块,用于设定头发造型的初始状态,并将所述头发造型分为固定区域以及运动区域;
映射骨骼生成模块,用于基于所述固定区域以及运动区域的头发走向生成头发的映射骨骼;
头发模拟模块,用于设定头发的运动参数,并利用所述运动参数以及映射骨骼模拟头发的运动;
所述映射骨骼生成模块具体包括:
最近头发点查找单元,用于设所述固定区域的头发由点集合P{p1...pn}组成,所述运动区域的头发由点集合Q{q1...qn}组成,所述固定区域和运动区域的连线关系为L{l1,l2...ln};所述点集合P{p1...pn}与点集合Q{q1...qn}的连通线为R{r1...rm},R为L的子集;所述连通线R{r1...rm}的中点的集合为M{rM1...rMm};
设人头的正方向为起点S,角度的阈值为D,逆时针查找与所述起点S最近的点,加入集合H1;逆时针查找与所述集合H1最近的点,加入集合H1,直至没有角度大于所述D的点;
判断所述集合H1是否等于点集合Q{q1...qn},若是,则进入骨骼生成单元;若否,则逆时针查找与所述集合H1最近的点,加入集合H2,逆时针查找与所述集合H2最近的点,加入集合H3,直至H1+H2+...+HK=Q,并进入骨骼生成单元;其中K为正整数;
骨骼生成单元,用于定映射骨骼的长度和密度,根据集合H1+H2+...+HK将运动的头发点分为Q1...QK;基于集合M{rM1...rMm}得到运动的头发点与点集合P{p1...pn}相连的点,并设为起点;找到与所述起点最远的点,设为终点;
基于所述起点的y轴坐标确定头发的映射骨骼,并基于所述映射骨骼的长度和密度,将所述起点进行均等分,得到骨骼线;
映射关系计算单元,用于利用点和四边形的质心坐标公式计算运动的头发点与映射骨骼的映射关系:
u=(a*x+b*y+c)/(g*x+h*y+1);
v=(d*x+e*y+f)/(g*x+h*y+1);
其中(u,v)表示落在由四个映射骨骼组成的四边形内部的点,u为横坐标,v为纵坐标;(x,y)表示由四个映射骨骼组成的四边形上的点,x为横坐标,y为纵坐标;a、b、c、d、e、f、g、h表示待求解的参数,由四组(u,v)和(x,y)进行求解;
头发点位置计算单元,用于记录映射骨骼从和所述固定区域的头发点最近位置到最远位置的点为P'(P'0...P'n),相互之间的距离为L'(L'1...L'n-1);n表示点的序号,为正整数;
当点P'n围绕一个点进行转动时,设新的位置为P_new(p_nx,p_ny,p_nz)、原位置为P_old(p_ox,p_oy,p_oz)、旋转角度为ir、头发的段数为imnu、柔性参数为k,则点P'n的位置为:
p_nx=p_ox*cos((1+k*n)*ir*n/inum)-p_oz*sin((1+k*n)*ir*n/inum);
p_nz=p_oz*cos((1+k*n)*ir*n/inum)-p_ox*sin((1+k*n)*ir*n/inum);
当点P'n往一个方向拉伸,且拉伸的距离为(ix,iy,iz),则点P'n的位置为:
p_nx=p_ox+ix*(1+k*n)*n/inum;
p_ny=p_oy+iy*(1+k*n)*n/inum;
p_nz=p_oz+iz*(1+k*n)*n/inum;
点P'n受钟摆的约束,往点P'n-1的方向回缩,直到长度等于L'n-1。
6.如权利要求5所述的一种头发模拟系统,其特征在于:所述头发造型初始化模块中,所述初始状态为头发造型仅在重力作用下的默认回归状态。
7.如权利要求5所述的一种头发模拟系统,其特征在于:所述头发造型初始化模块中,所述固定区域以及运动区域均包括若干根头发;所述固定区域的头发牵引运动区域的头发。
8.如权利要求5所述的一种头发模拟系统,其特征在于:所述头发模拟模块中,所述运动参数具体包括:
头发点在当前帧的位置p”n、头发点在当前帧的速度Vn、头发点在x轴的最大运动速度returnx以及头发点在z轴的最大运动速度returnz;
p”n=p”n-1+Vnt;
Vnt=Vn-1+at;
a=(F重力+F拉力+F其它外界力)/m;
其中t表示头发点运动的时间,a表示加速度,m表示头发的质量,F其它外界力指拉力或者风力。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010442123.6A CN111583367B (zh) | 2020-05-22 | 2020-05-22 | 一种头发模拟方法及系统 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010442123.6A CN111583367B (zh) | 2020-05-22 | 2020-05-22 | 一种头发模拟方法及系统 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111583367A CN111583367A (zh) | 2020-08-25 |
CN111583367B true CN111583367B (zh) | 2023-02-10 |
Family
ID=72112694
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010442123.6A Active CN111583367B (zh) | 2020-05-22 | 2020-05-22 | 一种头发模拟方法及系统 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111583367B (zh) |
Families Citing this family (5)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN112508993B (zh) * | 2020-11-18 | 2023-11-07 | 奇幻熊(厦门)信息技术有限公司 | 一种衣服运动模拟方法、终端设备及存储介质 |
CN114219877B (zh) * | 2021-12-06 | 2024-06-25 | 北京字节跳动网络技术有限公司 | 人像头发流动特效处理方法、装置、介质和电子设备 |
CN115311403B (zh) * | 2022-08-26 | 2023-08-08 | 北京百度网讯科技有限公司 | 深度学习网络的训练方法、虚拟形象生成方法及装置 |
CN116152405B (zh) * | 2023-04-23 | 2023-07-07 | 腾讯科技(深圳)有限公司 | 一种业务处理方法、装置及计算机设备、存储介质 |
CN116570920A (zh) * | 2023-07-12 | 2023-08-11 | 腾讯科技(深圳)有限公司 | 数据管理方法、装置、计算机及存储介质 |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004206329A (ja) * | 2002-12-25 | 2004-07-22 | Toshiba Corp | シミュレーション装置、方法、並びに、プログラム |
CN102419868A (zh) * | 2010-09-28 | 2012-04-18 | 三星电子株式会社 | 基于3d头发模板进行3d头发建模的设备和方法 |
CN103778661A (zh) * | 2013-12-24 | 2014-05-07 | 中国科学院深圳先进技术研究院 | 一种生成说话人三维运动模型的方法、系统及计算机 |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
CN106023288A (zh) * | 2016-05-18 | 2016-10-12 | 浙江大学 | 一种基于图像的动态替身构造方法 |
CN109147052A (zh) * | 2018-08-22 | 2019-01-04 | 福州智永信息科技有限公司 | 一种基于Unity3D引擎的头发模拟制作方法及系统 |
-
2020
- 2020-05-22 CN CN202010442123.6A patent/CN111583367B/zh active Active
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
JP2004206329A (ja) * | 2002-12-25 | 2004-07-22 | Toshiba Corp | シミュレーション装置、方法、並びに、プログラム |
CN102419868A (zh) * | 2010-09-28 | 2012-04-18 | 三星电子株式会社 | 基于3d头发模板进行3d头发建模的设备和方法 |
CN103778661A (zh) * | 2013-12-24 | 2014-05-07 | 中国科学院深圳先进技术研究院 | 一种生成说话人三维运动模型的方法、系统及计算机 |
CN106023288A (zh) * | 2016-05-18 | 2016-10-12 | 浙江大学 | 一种基于图像的动态替身构造方法 |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
CN109147052A (zh) * | 2018-08-22 | 2019-01-04 | 福州智永信息科技有限公司 | 一种基于Unity3D引擎的头发模拟制作方法及系统 |
Non-Patent Citations (1)
Title |
---|
《基于动态超螺旋线的三维头发建模》;孙武峰等;《计算机应用研究》;20100330;第27卷(第1期);396-398页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111583367A (zh) | 2020-08-25 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN111583367B (zh) | 一种头发模拟方法及系统 | |
Yamane et al. | Animating non-humanoid characters with human motion data | |
CN106780681B (zh) | 一种角色动作生成方法和装置 | |
CN102289836B (zh) | 植物动画合成方法 | |
CN115641375B (zh) | 虚拟对象的毛发处理方法、装置、设备及存储介质 | |
TW200809695A (en) | Goal-directed cloth simulation | |
CN104867171A (zh) | 一种三维角色的过渡动画生成方法 | |
JP4936522B2 (ja) | 画像処理方法、画像処理装置 | |
CN111508080B (zh) | 基于ue4引擎的胶带缠绕仿真的实现方法及相关设备 | |
JP3780512B2 (ja) | プログラム、記録媒体及びゲーム装置 | |
CN107146273B (zh) | 一种面向基于图像头发建模的自适应浮动切线匹配方法 | |
CN111047675A (zh) | 一种头发仿真的方法及装置 | |
JP2009020874A (ja) | 髪シミュレーション方法およびその装置 | |
CN112562050A (zh) | 虚拟对象风动画的生成方法及装置、存储介质、终端 | |
CN104463934A (zh) | 一种“质点-弹簧”系统驱动的点集模型动画自动生成方法 | |
CN114882153A (zh) | 一种动画生成的方法及装置 | |
JP3669939B2 (ja) | アニメーション生成方式 | |
CN108198234B (zh) | 可实时互动的虚拟角色生成系统及方法 | |
Choi et al. | Image morphing using mass-spring system | |
CN116258801B (zh) | 一种数字虚拟对象的毛发处理方法、装置及存储介质 | |
JP4462704B2 (ja) | ゲーム装置および情報記憶媒体 | |
CN117475045A (zh) | 软体飘动效果的生成方法、装置及电子设备 | |
Oliveira et al. | Synthesis of variable dancing styles based on a compact spatiotemporal representation of dance | |
Li et al. | A mass spring based 3D virtual hair dynamic system for straight and curly hair | |
Liang et al. | A motion-based user interface for the control of virtual humans performing sports |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant |