特效实现方法、装置、电子设备及存储介质转让专利
申请号 : CN202110114228.3
文献号 : CN112767521B
文献日 : 2022-02-08
发明人 : 王东烁
申请人 : 北京达佳互联信息技术有限公司
摘要 :
权利要求 :
1.一种特效实现方法,其特征在于,所述方法包括:获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,所述第一运动状态信息包含第一变换矩阵,所述第一变换矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵,所述第一摆动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标;所述顶点的位置坐标为所述顶点的本地空间位置坐标;
根据所述目标位置坐标对所述当前帧毛发模型进行渲染。
2.根据权利要求1所述的特效实现方法,其特征在于,所述根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标的步骤,包括:
采用所述第一摆动矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的初始位置坐标;
采用所述第一变换矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的世界空间位置坐标;
根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量;
根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量;
根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标。
3.根据权利要求2所述的特效实现方法,其特征在于,根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量的步骤,包括:将所述差值与预先设置的第一调节系数相乘,得到所述顶点的作用力向量,所述第一调节系数用于调节所述作用力向量的强度大小;
所述根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量的步骤,包括:当所述作用力向量与所述法向量之间的点积结果大于或等于零时,所述受力向量的方向为第一方向,所述第一方向与所述法向量垂直且位于所述作用力向量与所述法向量所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
当所述作用力向量与所述法向量之间的点积结果小于零时,所述受力向量为所述作用力向量。
4.根据权利要求2所述的特效实现方法,其特征在于,所述根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标的步骤,包括:对所述受力向量与所述法向量的和值进行归一化,根据归一化结果确定所述顶点的膨胀向量;
将所述世界空间位置坐标与所述膨胀向量相加,得到所述顶点的目标位置坐标。
5.根据权利要求4所述的特效实现方法,其特征在于,所述毛发模型包括多个毛发横截面,所述根据归一化结果确定所述顶点的膨胀向量的步骤,包括:将所述归一化结果与预设挤出系数以及预设常量相乘,得到所述顶点的膨胀向量,其中,所述预设挤出系数用于表征所述顶点所对应的毛发横截面的膨胀量,所述预设常量用于控制所述毛发的长度。
6.根据权利要求1所述的特效实现方法,其特征在于,获取前一帧毛发模型的第二运动状态信息的步骤,包括:
获取前一帧毛发模型的第二摆动矩阵和第一速度矩阵,所述第一速度矩阵中的第一元素用于表征第二元素的数值以第三元素的数值为平衡点进行阻尼运动的过程中在所述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
所述根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵的步骤,包括:根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵;
将所述第二速度矩阵与所述第二摆动矩阵相加,得到所述第一摆动矩阵。
7.根据权利要求6所述的特效实现方法,其特征在于,所述根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵的步骤,包括:
按照以下公式计算所述第二速度矩阵中的第i个元素:speed_matrix[i]=speed_matrix’[i]*fade+(target_transform[i]‑swing_transform’[i])*k,其中,所述speed_matrix[i]表示所述第二速度矩阵中的第i个元素;所述speed_matrix’[i]表示所述第一速度矩阵中与所述第i个元素的行列位置对应的元素;所述target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼运动过程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在阻尼运动过程中的回弹力大小。
8.根据权利要求6所述的特效实现方法,其特征在于,获取前一帧毛发模型的第二运动状态信息的步骤,还包括:
获取所述第二变换矩阵;
所述根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵的步骤,包括:根据所述第二变换矩阵、所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
9.根据权利要求8所述的特效实现方法,其特征在于,所述根据所述第二变换矩阵、所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵的步骤,包括:
按照以下公式计算所述第二速度矩阵中的第i个元素:speed_matrix[i]=speed_matrix’[i]*fade+(target_transform[i]‑swing_transform’[i])*k+(previous_transform[i]‑target_transform[i])*resist,其中,所述speed_matrix[i]表示所述第二速度矩阵中的第i个元素;所述speed_matrix’[i]表示所述第一速度矩阵中与所述第i个元素的行列位置对应的元素;所述target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的元素;所述previous_transform[i]表示所述第二变换矩阵中与所述第i个元素的行列位置对应的元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼运动过程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在阻尼运动构成中的回弹力大小;所述resist表示预先设置的第二调节系数,所述第二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
10.根据权利要求6所述的特效实现方法,其特征在于,所述根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵的步骤,包括:
对所述第一变换矩阵中的第四元素进行修正,得到第三变换矩阵,所述第四元素为所述第一变换矩阵中对应纵向位移的元素;
根据所述第一速度矩阵、所述第三变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
11.根据权利要求10所述的特效实现方法,其特征在于,所述对所述第一变换矩阵中的第四元素进行修正,得到第三变换矩阵的步骤,包括:按照以下公式计算所述第三变换矩阵中的第j个元素:target_transform’[j]=target_transform[j]–gravity_amount,其中,所述target_transform’[j]表示所述第三变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所述第三调节系数用于调节所述毛发受到的重力的强度大小。
12.根据权利要求1至11任一项所述的特效实现方法,其特征在于,当所述第一运动状态信息包含多个第一变换矩阵时,各所述第一变换矩阵包括所述毛发模型的顶点在不同骨骼运动驱动下的位置变换信息,所述根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵的步骤,包括:
根据所述第一运动状态信息以及所述第二运动状态信息,对多个所述第一变换矩阵分别进行调整,对应得到多个第三摆动矩阵;
对所述多个第三摆动矩阵进行加权求和,得到所述第一摆动矩阵。
13.一种特效实现装置,其特征在于,所述装置包括:信息获取模块,被配置为获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,所述第一运动状态信息包含第一变换矩阵,所述第一变换矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
信息调整模块,被配置为根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵,所述第一摆动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
位置确定模块,被配置为根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标;所述顶点的位置坐标为所述顶点的本地空间位置坐标;
模型渲染模块,被配置为根据所述目标位置坐标对所述当前帧毛发模型进行渲染。
14.根据权利要求13所述的特效实现装置,其特征在于,所述位置确定模块包括:第一单元,被配置为采用所述第一摆动矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的初始位置坐标;
第二单元,被配置为采用所述第一变换矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的世界空间位置坐标;
第三单元,被配置为根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量;
第四单元,被配置为根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量;
第五单元,被配置为根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标。
15.根据权利要求14所述的特效实现装置,其特征在于,所述第三单元具体被配置为:将所述差值与预先设置的第一调节系数相乘,得到所述顶点的作用力向量,所述第一调节系数用于调节所述作用力向量的强度大小;
所述第四单元具体被配置为:
当所述作用力向量与所述法向量之间的点积结果大于或等于零时,所述受力向量的方向为第一方向,所述第一方向与所述法向量垂直且位于所述作用力向量与所述法向量所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
当所述作用力向量与所述法向量之间的点积结果小于零时,所述受力向量为所述作用力向量。
16.根据权利要求14所述的特效实现装置,其特征在于,所述第五单元具体被配置为:对所述受力向量与所述法向量的和值进行归一化,根据归一化结果确定所述顶点的膨胀向量;
将所述世界空间位置坐标与所述膨胀向量相加,得到所述顶点的目标位置坐标。
17.根据权利要求16所述的特效实现装置,其特征在于,所述毛发模型包括多个毛发横截面,所述第五单元具体被配置为:
将所述归一化结果与预设挤出系数以及预设常量相乘,得到所述顶点的膨胀向量,其中,所述预设挤出系数用于表征所述顶点所对应的毛发横截面的膨胀量,所述预设常量用于控制所述毛发的长度。
18.根据权利要求13所述的特效实现装置,其特征在于,所述信息获取模块具体被配置为:
获取前一帧毛发模型的第二摆动矩阵和第一速度矩阵,所述第一速度矩阵中的第一元素用于表征第二元素的数值以第三元素的数值为平衡点进行阻尼运动的过程中在所述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
所述信息调整模块具体被配置为:
根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵;
将所述第二速度矩阵与所述第二摆动矩阵相加,得到所述第一摆动矩阵。
19.根据权利要求18所述的特效实现装置,其特征在于,所述信息调整模块具体被配置为:
按照以下公式计算所述第二速度矩阵中的第i个元素:speed_matrix[i]=speed_matrix’[i]*fade+(target_transform[i]‑swing_transform’[i])*k,其中,所述speed_matrix[i]表示所述第二速度矩阵中的第i个元素;所述speed_matrix’[i]表示所述第一速度矩阵中与所述第i个元素的行列位置对应的元素;所述target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼运动过程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在阻尼运动过程中的回弹力大小。
20.根据权利要求18所述的特效实现装置,其特征在于,所述信息获取模块还被配置为:
获取所述第二变换矩阵;
所述信息调整模块还被配置为:
根据所述第二变换矩阵、所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
21.根据权利要求20所述的特效实现装置,其特征在于,所述信息调整模块具体被配置为:
按照以下公式计算所述第二速度矩阵中的第i个元素:speed_matrix[i]=speed_matrix’[i]*fade+(target_transform[i]‑swing_transform’[i])*k+(previous_transform[i]‑target_transform[i])*resist,其中,所述speed_matrix[i]表示所述第二速度矩阵中的第i个元素;所述speed_matrix’[i]表示所述第一速度矩阵中与所述第i个元素的行列位置对应的元素;所述target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的元素;所述previous_transform[i]表示所述第二变换矩阵中与所述第i个元素的行列位置对应的元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼运动过程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在阻尼运动构成中的回弹力大小;所述resist表示预先设置的第二调节系数,所述第二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
22.根据权利要求18所述的特效实现装置,其特征在于,所述信息调整模块具体被配置为:
对所述第一变换矩阵中的第四元素进行修正,得到第三变换矩阵,所述第四元素为所述第一变换矩阵中对应纵向位移的元素;
根据所述第一速度矩阵、所述第三变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
23.根据权利要求22所述的特效实现装置,其特征在于,所述信息调整模块具体被配置为:
按照以下公式计算所述第三变换矩阵中的第j个元素:target_transform’[j]=target_transform[j]–gravity_amount,其中,所述target_transform’[j]表示所述第三变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所述第三调节系数用于调节所述毛发受到的重力的强度大小。
24.根据权利要求13至23任一项所述的特效实现装置,其特征在于,当所述第一运动状态信息包含多个第一变换矩阵时,各所述第一变换矩阵包括所述毛发模型的顶点在不同骨骼运动驱动下的位置变换信息,所述信息调整模块具体被配置为:根据所述第一运动状态信息以及所述第二运动状态信息,对多个所述第一变换矩阵分别进行调整,对应得到多个第三摆动矩阵;
对所述多个第三摆动矩阵进行加权求和,得到所述第一摆动矩阵。
25.一种电子设备,其特征在于,所述电子设备包括:处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至12中任一项所述的特效实现方法。
26.一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至12中任一项所述的特效实现方法。
27.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至12中任一项所述的特效实现方法。
说明书 :
特效实现方法、装置、电子设备及存储介质
技术领域
背景技术
以及头发模拟等。由于毛发形态结构及光照质感的复杂性,头发模拟一直是图形学领域非
常具有挑战性的问题。毛发渲染是指为目标对象绘制毛发,实现毛发的仿真模拟,对于提升
目标对象的真实感具有重要作用。
模拟方案,在目标对象运动或旋转时,无法表现出其各个部位的毛发受到不同方向的阻力
及自身回弹力时的甩动状态,无法实现毛发动态且真实的物理摆动效果。
发明内容
发模型中的顶点由本地空间位置变换到世界空间位置;
发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形
态来回摆动直至静止的运动信息;
所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
量用于控制所述毛发的长度。
述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素
为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一
帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵
用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的
元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼运动过
程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在
阻尼运动过程中的回弹力大小。
transform[i]‑target_transform[i])*resist,
target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的
元素;所述previous_transform[i]表示所述第二变换矩阵中与所述第i个元素的行列位置
对应的元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼
运动过程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述
毛发在阻尼运动构成中的回弹力大小;所述resist表示预先设置的第二调节系数,所述第
二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_
transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所
述第三调节系数用于调节所述毛发受到的重力的强度大小。
述根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调
整,得到所述当前帧毛发模型的第一摆动矩阵的步骤,包括:
阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表
示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
坐标;
所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
量用于控制所述毛发的长度。
述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素
为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一
帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵
用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的
元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼运动过
程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在
阻尼运动过程中的回弹力大小。
transform[i]‑target_transform[i])*resist,
target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的
元素;所述previous_transform[i]表示所述第二变换矩阵中与所述第i个元素的行列位置
对应的元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼
运动过程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述
毛发在阻尼运动构成中的回弹力大小;所述resist表示预先设置的第二调节系数,所述第
二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_
transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所
述第三调节系数用于调节所述毛发受到的重力的强度大小。
述信息调整模块具体被配置为:
方法。
第一运动状态信息以及第二运动状态信息,对第一变换矩阵进行调整,得到当前帧毛发模
型的第一摆动矩阵,再根据第一摆动矩阵以及当前帧毛发模型中顶点的位置坐标,获得当
前帧毛发模型中顶点的目标位置坐标,再根据目标位置坐标对当前帧毛发模型进行渲染。
本公开技术方案中,根据前一帧以及当前帧毛发模型的运动状态信息,对第一变换矩阵施
加模拟毛发阻尼运动的数值扰动,获得的第一摆动矩阵可以体现毛发的阻尼运动信息,进
而根据第一摆动矩阵可以动态改变当前帧毛发模型中顶点的实际空间位置,在毛发所依附
的目标对象进行任意位移或旋转运动的过程中,毛发都能够实时响应其运动状态,呈现出
较为真实的毛发摆动的图像特效。
附图说明
具体实施方式
的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或
描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相
一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面
相一致的装置和方法的例子。
骼驱动模型产生合理的运动,把模型绑定到骨骼上的技术叫做蒙皮。
质感的复杂性,毛发效果的渲染常常意味着极大的运算开销。
次稍向外膨胀一些,同时配合一张噪波贴图来区分每一层模型表面的显隐区域,在视觉上
模拟出毛发的簇感,如图2所示,以此避免通过大量模型堆叠来表现毛发所造成的极大性能
消耗。
到一个偏移后的顶点膨胀(挤出)方向,最终在视觉上实现弯曲毛发的效果,或者在此基础
上加入动态噪声提高毛发摆动的随机性以进一步提高真实度。
无法实现动态且真实的物理摆动效果。
发模型中的顶点由本地空间位置变换到世界空间位置。
型中顶点的位置变换信息,第二摆动矩阵为对第二变换矩阵进行调整得到,包含前一帧毛
发模型所表示的毛发的阻尼运动信息。
的毛发的阻尼运动信息,阻尼运动信息用于表示毛发沿其零势能形态来回摆动直至静止的
运动信息。
能并会对自身产生回弹力。在目标对象静止后,由于毛发受到风阻力影响,能量逐渐耗散,
毛发会沿其零势能形态来回摆动直至静止,因此毛发摆动的效果实现可以是对阻尼运动的
一种近似模拟。
的元素施加模拟阻尼运动的摆动数值干扰来动态改变模型顶点的实际空间位置,以最终达
到毛发摆动的近似模拟。
摆动矩阵。第一摆动矩阵包含毛发在运动的目标对象的带动下在当前帧的阻尼运动信息,
第一摆动矩阵可以体现毛发所受的阻力以及回弹力等物理作用信息,因此根据第一摆动矩
阵确定毛发模型顶点的空间偏移位置,可以从视觉上实现毛发的摆动效果。
为平衡点(零势能点)做数值上的阻尼运动。
前帧毛发模型中顶点的世界空间位置,转化为顶点的作用力向量,并最终通过作用力向量
实时影响模型顶点的空间偏移位置以从视觉上实现更加真实的毛发摆动效果。后续实施例
会详细介绍该实现方式的具体过程。
所受的阻力以及回弹力等物理作用信息,进而根据第一摆动矩阵来动态改变当前帧毛发模
型中顶点的实际空间位置,可以在目标对象进行任意的位移或旋转等运动的过程中,附着
于其表面的毛发能够实时响应其运动状态,呈现出较为真实的毛发摆动效果。
线向量与受力向量的点乘为正数(生长方向与受力方向同向)时,毛发会被无限制地拉长;
若相反则毛发会被作用力反向推入物体的表面。
坐标,即采用第一摆动矩阵对当前帧毛发模型中顶点的本地空间位置坐标进行变换,将变
换得到的初始位置坐标直接作为目标位置坐标,这样可以实现较为真实的毛发摆动效果,
然而此方式难以控制毛发形态,可能会出现如前的毛发长短不均、被推入模型内部等错误
结果。
3,上述实施例提供的特效实现方法还可以进一步包括:
向量的强度大小。
减便可以获得影响顶点的作用力向量(设为matrix_force),其模长即为作用力强度,具体
计算通过代码表示如下(以opengl为例):
成的平面内,受力向量的模长为作用力向量在第一方向上的投影长度;当作用力向量与法
向量之间的点积结果小于零时,受力向量为作用力向量。
方向及模型表面法向量在同一平面内且与法向量垂直,在迎风面采用此向量来代替原有向
量便可在效果理想的情况下避免毛发被推挤入面的情况。
作用力向量进行修正前后的实际毛发效果对比图。
的目标位置坐标。通过归一化可保证每一层模型即使膨胀方向不一样,其膨胀的距离是等
同的,以此间接确保了毛发长度的恒定不变,解决毛发长短不均的问题。
其中,预设挤出系数用于表征顶点所对应的毛发横截面的膨胀量,预设常量用于控制毛发
的长度。预设常量的设置可以确保毛发的长度为一个恒定值,不会被拉长或压短。
的距离也是等同的,以此间接确保了毛发长度的恒定不变,解决毛发长短不均的问题。设顶
点的挤出向量为offset,每一层模型的挤出量度(预设挤出系数)为level(通常是一个0‑1
的值,最里层模型为0,最外层为1,中间层均匀递增),统一控制毛发长度的参数(预设常量)
为hair_length,设顶点的世界空间顶点位置为World_Pos,则膨胀后的顶点位置用代码表
示为:
点的空间偏移位置以从视觉上实现毛发的摆动效果。并且,根据作用力向量与法向量之间
的角度关系以及对顶点的膨胀系数(N+force)归一化来修正模型不同部位顶点的受力方向
及强度,从而优化毛发在受力时的响应形态,解决毛发长短不均、被推入模型内部等问题。
在前一帧的瞬时速度值,第一元素为第一速度矩阵中的任一元素,第二元素为第二摆动矩
阵中与第一元素的行列位置对应的元素,第三元素为前一帧毛发模型的第二变换矩阵中与
第一元素的行列位置对应的元素,第二变换矩阵用于将前一帧毛发模型中的顶点由本地空
间位置变换到世界空间位置。
transform’[i])*k,其中,peed_matrix[i]表示第二速度矩阵中的第i个元素,speed_
matrix’[i]表示第一速度矩阵中与第i个元素的行列位置对应的元素,target_transform
[i]表示第一变换矩阵中与第i个元素的行列位置对应的元素,swing_transform’[i]表示
第二摆动矩阵中与第i个元素的行列位置对应的元素,fade表示预先设置的损耗系数,损耗
系数用于表征毛发在阻尼运动过程中的能量损耗比例,表征毛发在目标对象的运动过程中
因自身回弹造成的能量损耗比例;k表示预先设置的劲度系数,劲度系数用于表征毛发在阻
尼运动过程中的回弹力大小,即毛发在自身回弹时的弹力大小。
为弹簧拉伸长度)可得,摆动元素朝平衡点逼近时是加速度减小的加速运动,结合加速度公
式vt=vo+at得知,此时还需定义一个速度矩阵(设为speed_matrix)来累计计算16个元素
每一帧的瞬时速度值,并以此计算摆动矩阵中元素存放的最终数值。综上,CPU中每一帧对
模型的计算中需要执行以下代码进行计算(以lua语言为例):
会在平衡点附近永恒摆动;k值为劲度系数,系数越大则回弹速度越快。
实现方式中,参照图6,在步骤S51中还可以包括:
(previous_transform[i]‑target_transform[i])*resist,其中,speed_matrix[i]表示第
二速度矩阵中的第i个元素;speed_matrix’[i]表示第一速度矩阵中与第i个元素的行列位
置对应的元素;target_transform[i]表示第一变换矩阵中与第i个元素的行列位置对应的
元素;swing_transform’[i]表示第二摆动矩阵中与第i个元素的行列位置对应的元素;
previous_transform[i]表示第二变换矩阵中与第i个元素的行列位置对应的元素;fade表
示预先设置的损耗系数,损耗系数用于表征毛发在阻尼运动过程中的能量损耗比例,表征
毛发在目标对象的运动过程中因自身回弹造成的能量损耗比例;k表示预先设置的劲度系
数,劲度系数用于表征毛发在阻尼运动过程中的回弹力大小,即毛发在自身回弹时的弹力
大小;resist表示预先设置的第二调节系数,第二调节系数用于调节目标对象带动毛发运
动的过程中对毛发所产生的阻力大小。
transform与target_transform相减,便可获得摆动矩阵中每一个元素所受到的瞬时风阻
力值f,通过受力分析得知,此时单个摆动元素在一维的弹簧振子运动中所受到的力F=kx‑
f,替换上式中speed_matrix部分的计算公式后可得:
大,从而可以进一步提升毛发摆动效果的真实性。
示第三变换矩阵中的第j个元素,第j个元素与第四元素的行列位置对应,target_
transform[j]表示第四元素,gravity_amount表示预先设置的第三调节系数,第三调节系
数用于调节毛发受到的重力的强度大小。其中,第j个元素一般为第三变换矩阵中确定的元
素,比如在opengl中第j个元素即第14个元素(第四行第二列),这个元素专门用来影响纵向
位移(y方向的位移)。
于原先值便可给模型顶点施加一个向下的位移倾向,以实现重力的影响效果,代码中公式
表达如下(以opengl的矩阵存放顺序为例):
S12中具体可以包括:
多骨骼蒙皮所驱动的带动画的模型来说,则需要跟据每一个骨骼的世界空间变换矩阵来计
算出对应的摆动矩阵,并跟据其施加于模型顶点的影响权重来分配摆动矩阵对不同部位顶
点的作用效果。设骨骼存储的摆动矩阵的数组为BoneSwingMatrix,影响顶点的骨骼id及权
重分别为boneId及weights,则最终用于计算的第一摆动矩阵用代码表示为(以每个顶点受
两根骨骼影响为例):
多种模型空间变换情况,本技术方案运行高效、数据计算量少,对性能指标较低的移动平台
来说同样具备良好的适用性。
矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表
示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
坐标;
所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
量用于控制所述毛发的长度。
述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素
为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一
帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵
用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的
元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼运动过
程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在
阻尼运动过程中的回弹力大小。
transform[i]‑target_transform[i])*resist,
target_transform[i]表示所述第一变换矩阵中与所述第i个元素的行列位置对应的元素;
所述swing_transform’[i]表示所述第二摆动矩阵中与所述第i个元素的行列位置对应的
元素;所述previous_transform[i]表示所述第二变换矩阵中与所述第i个元素的行列位置
对应的元素;所述fade表示预先设置的损耗系数,所述损耗系数用于表征所述毛发在阻尼
运动过程中的能量损耗比例;所述k表示预先设置的劲度系数,所述劲度系数用于表征所述
毛发在阻尼运动构成中的回弹力大小;所述resist表示预先设置的第二调节系数,所述第
二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_
transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所
述第三调节系数用于调节所述毛发受到的重力的强度大小。
述信息调整模块具体被配置为:
人数字助理等。
以及通信组件816。
行指令,以完成任一实施例所述的特效实现方法的全部或部分步骤。此外,处理组件802可
以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以
包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们
的组合实现,如静态随机存取存储器(SRAM),可擦除可编程只读存储器(EPROM),可编程只
读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸
传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动
动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,
多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模
式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像
头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通
信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
定按钮。
述组件为电子设备800的显示器和小键盘,传感器组件814还可以检测电子设备800或电子
设备800一个组件的位置改变,用户与电子设备800接触的存在或不存在,电子设备800方位
或加速/减速和电子设备800的温度变化。传感器组件814可以包括接近传感器,被配置用来
在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如
CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以
包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理
系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通
信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协
会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行任一实施例所述的特
效实现方法。
效实现方法。例如,所述计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD‑ROM、磁
带、软盘和光数据存储设备等。
效实现方法。可选地,该程序代码可以存储在装置800的存储介质中,该计算机可读存储介
质可以是ROM、随机存取存储器(RAM)、CD‑ROM、磁带、软盘和光数据存储设备等。
用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令
的模块。此外,处理组件1922被配置为执行指令,以执行任一实施例所述的特效实现方法。
出(I/O)接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如
WindowsServerTM,MacOSXTM,UnixTM,LinuxTM,FreeBSDTM或类似。
者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识
或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的
权利要求指出。