CN112767521A - 特效实现方法、装置、电子设备及存储介质 - Google Patents
特效实现方法、装置、电子设备及存储介质 Download PDFInfo
- Publication number
- CN112767521A CN112767521A CN202110114228.3A CN202110114228A CN112767521A CN 112767521 A CN112767521 A CN 112767521A CN 202110114228 A CN202110114228 A CN 202110114228A CN 112767521 A CN112767521 A CN 112767521A
- Authority
- CN
- China
- Prior art keywords
- matrix
- vertex
- hair
- vector
- swing
- 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.)
- Granted
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
Landscapes
- Physics & Mathematics (AREA)
- General Physics & Mathematics (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Processing Or Creating Images (AREA)
Abstract
本公开示出了一种特效实现方法、装置、电子设备及存储介质,其中特效实现方法包括:首先获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,然后根据两帧的运动状态信息,对第一变换矩阵进行调整,得到第一摆动矩阵,再根据第一摆动矩阵以及当前帧毛发模型中顶点的位置坐标,获得当前帧毛发模型中顶点的目标位置坐标,进而根据目标位置坐标对当前帧毛发模型进行渲染。本公开中,根据前一帧以及当前帧毛发模型的运动状态信息,对第一变换矩阵施加模拟阻尼运动的数值扰动,来动态改变顶点的实际空间位置,在目标对象运动的过程中,附着于其表面的毛发能够实时响应其运动状态,呈现出较为真实的毛发摆动的图像特效。
Description
技术领域
本公开涉及计算机技术领域,尤其涉及一种特效实现方法、装置、电子设备及存储介质。
背景技术
随着计算机图形学技术的飞速发展,目标对象越来越多地被应用到电影、游戏和动画的制作当中。为了实现目标对象的真实感,需要一些关键技术,如骨骼动画、表情神态以及头发模拟等。由于毛发形态结构及光照质感的复杂性,头发模拟一直是图形学领域非常具有挑战性的问题。毛发渲染是指为目标对象绘制毛发,实现毛发的仿真模拟,对于提升目标对象的真实感具有重要作用。
在现有毛发技术实现方案中,基于层挤出的毛发渲染方式能在保证良好性能的前提下表现出较好的中短型毛发质感,因此其应用频率较高。然而,此种毛发渲染方式的物理模拟方案,在目标对象运动或旋转时,无法表现出其各个部位的毛发受到不同方向的阻力及自身回弹力时的甩动状态,无法实现毛发动态且真实的物理摆动效果。
发明内容
本公开提供一种特效实现方法、装置、电子设备及存储介质,以至少解决相关技术中无法实现毛发动态且真实的物理摆动效果的问题。本公开的技术方案如下:
根据本公开的第一方面,提供一种特效实现方法,所述方法包括:
获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,所述第一运动状态信息包含第一变换矩阵,所述第一变换矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵,所述第一摆动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标;
根据所述目标位置坐标对所述当前帧毛发模型进行渲染。
在一种可选的实现方式中,所述根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标的步骤,包括:
采用所述第一摆动矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的初始位置坐标,所述顶点的位置坐标为所述顶点的本地空间位置坐标;
采用所述第一变换矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的世界空间位置坐标;
根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量;
根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量;
根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标。
在一种可选的实现方式中,根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量的步骤,包括:
将所述差值与预先设置的第一调节系数相乘,得到所述顶点的作用力向量,所述第一调节系数用于调节所述作用力向量的强度大小;
所述根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量的步骤,包括:
当所述作用力向量与所述法向量之间的点积结果大于或等于零时,所述受力向量的方向为第一方向,所述第一方向与所述法向量垂直且位于所述作用力向量与所述法向量所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
当所述作用力向量与所述法向量之间的点积结果小于零时,所述受力向量为所述作用力向量。
在一种可选的实现方式中,所述根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标的步骤,包括:
对所述受力向量与所述法向量的和值进行归一化,根据归一化结果确定所述顶点的膨胀向量;
将所述世界空间位置坐标与所述膨胀向量相加,得到所述顶点的目标位置坐标。
在一种可选的实现方式中,所述毛发模型包括多个毛发横截面,所述根据归一化结果确定所述顶点的膨胀向量的步骤,包括:
将所述归一化结果与预设挤出系数以及预设常量相乘,得到所述顶点的膨胀向量,其中,所述预设挤出系数用于表征所述顶点所对应的毛发横截面的膨胀量,所述预设常量用于控制所述毛发的长度。
在一种可选的实现方式中,获取前一帧毛发模型的第二运动状态信息的步骤,包括:
获取前一帧毛发模型的第二摆动矩阵和第一速度矩阵,所述第一速度矩阵中的第一元素用于表征第二元素的数值以第三元素的数值为平衡点进行阻尼运动的过程中在所述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
所述根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵的步骤,包括:
根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵;
将所述第二速度矩阵与所述第二摆动矩阵相加,得到所述第一摆动矩阵。
在一种可选的实现方式中,所述根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵的步骤,包括:
按照以下公式计算所述第二速度矩阵中的第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表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在阻尼运动过程中的回弹力大小。
在一种可选的实现方式中,获取前一帧毛发模型的第二运动状态信息的步骤,还包括:
获取所述第二变换矩阵;
所述根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵的步骤,包括:
根据所述第二变换矩阵、所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
在一种可选的实现方式中,所述根据所述第二变换矩阵、所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵的步骤,包括:
按照以下公式计算所述第二速度矩阵中的第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表示预先设置的第二调节系数,所述第二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
在一种可选的实现方式中,所述根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵的步骤,包括:
对所述第一变换矩阵中的第四元素进行修正,得到第三变换矩阵,所述第四元素为所述第一变换矩阵中对应纵向位移的元素;
根据所述第一速度矩阵、所述第三变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
在一种可选的实现方式中,所述对所述第一变换矩阵中的第四元素进行修正,得到第三变换矩阵的步骤,包括:
按照以下公式计算所述第三变换矩阵中的第j个元素:target_transform’[j]=target_transform[j]–gravity_amount,其中,所述target_transform’[j]表示所述第三变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所述第三调节系数用于调节所述毛发受到的重力的强度大小。
在一种可选的实现方式中,当所述第一运动状态信息包含多个第一变换矩阵时,各所述第一变换矩阵包括所述毛发模型的顶点在不同骨骼运动驱动下的位置变换信息,所述根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵的步骤,包括:
根据所述第一运动状态信息以及所述第二运动状态信息,对多个所述第一变换矩阵分别进行调整,对应得到多个第三摆动矩阵;
对所述多个第三摆动矩阵进行加权求和,得到所述第一摆动矩阵。
根据本公开的第二方面,提供一种特效实现装置,所述装置包括:
信息获取模块,被配置为获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,所述第一运动状态信息包含第一变换矩阵,所述第一变换矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
信息调整模块,被配置为根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵,所述第一摆动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
位置确定模块,被配置为根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标;
模型渲染模块,被配置为根据所述目标位置坐标对所述当前帧毛发模型进行渲染。
在一种可选的实现方式中,所述位置确定模块包括:
第一单元,被配置为采用所述第一摆动矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的初始位置坐标,所述顶点的位置坐标为所述顶点的本地空间位置坐标;
第二单元,被配置为采用所述第一变换矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的世界空间位置坐标;
第三单元,被配置为根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量;
第四单元,被配置为根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量;
第五单元,被配置为根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标。
在一种可选的实现方式中,所述第三单元具体被配置为:
将所述差值与预先设置的第一调节系数相乘,得到所述顶点的作用力向量,所述第一调节系数用于调节所述作用力向量的强度大小;
所述第四单元具体被配置为:
当所述作用力向量与所述法向量之间的点积结果大于或等于零时,所述受力向量的方向为第一方向,所述第一方向与所述法向量垂直且位于所述作用力向量与所述法向量所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
当所述作用力向量与所述法向量之间的点积结果小于零时,所述受力向量为所述作用力向量。
在一种可选的实现方式中,所述第五单元具体被配置为:
对所述受力向量与所述法向量的和值进行归一化,根据归一化结果确定所述顶点的膨胀向量;
将所述世界空间位置坐标与所述膨胀向量相加,得到所述顶点的目标位置坐标。
在一种可选的实现方式中,所述毛发模型包括多个毛发横截面,所述第五单元具体被配置为:
将所述归一化结果与预设挤出系数以及预设常量相乘,得到所述顶点的膨胀向量,其中,所述预设挤出系数用于表征所述顶点所对应的毛发横截面的膨胀量,所述预设常量用于控制所述毛发的长度。
在一种可选的实现方式中,所述信息获取模块具体被配置为:
获取前一帧毛发模型的第二摆动矩阵和第一速度矩阵,所述第一速度矩阵中的第一元素用于表征第二元素的数值以第三元素的数值为平衡点进行阻尼运动的过程中在所述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
所述信息调整模块具体被配置为:
根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵;
将所述第二速度矩阵与所述第二摆动矩阵相加,得到所述第一摆动矩阵。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
按照以下公式计算所述第二速度矩阵中的第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表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在阻尼运动过程中的回弹力大小。
在一种可选的实现方式中,所述信息获取模块还被配置为:
获取所述第二变换矩阵;
所述信息调整模块还被配置为:
根据所述第二变换矩阵、所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
按照以下公式计算所述第二速度矩阵中的第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表示预先设置的第二调节系数,所述第二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
对所述第一变换矩阵中的第四元素进行修正,得到第三变换矩阵,所述第四元素为所述第一变换矩阵中对应纵向位移的元素;
根据所述第一速度矩阵、所述第三变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
按照以下公式计算所述第三变换矩阵中的第j个元素:target_transform’[j]=target_transform[j]–gravity_amount,其中,所述target_transform’[j]表示所述第三变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所述第三调节系数用于调节所述毛发受到的重力的强度大小。
在一种可选的实现方式中,当所述第一运动状态信息包含多个第一变换矩阵时,各所述第一变换矩阵包括所述毛发模型的顶点在不同骨骼运动驱动下的位置变换信息,所述信息调整模块具体被配置为:
根据所述第一运动状态信息以及所述第二运动状态信息,对多个所述第一变换矩阵分别进行调整,对应得到多个第三摆动矩阵;
对所述多个第三摆动矩阵进行加权求和,得到所述第一摆动矩阵。
根据本公开的第三方面,提供一种电子设备,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如第一方面所述的特效实现方法。
根据本公开的第四方面,提供一种存储介质,当所述存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如第一方面所述的特效实现方法。
根据本公开的第五方面,提供一种计算机程序产品,当所述计算机程序产品中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如第一方面所述的特效实现方法。
本公开的实施例提供的技术方案至少带来以下有益效果:
本公开技术方案提供了一种特效实现方法、装置、电子设备及存储介质,首先获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,然后根据第一运动状态信息以及第二运动状态信息,对第一变换矩阵进行调整,得到当前帧毛发模型的第一摆动矩阵,再根据第一摆动矩阵以及当前帧毛发模型中顶点的位置坐标,获得当前帧毛发模型中顶点的目标位置坐标,再根据目标位置坐标对当前帧毛发模型进行渲染。本公开技术方案中,根据前一帧以及当前帧毛发模型的运动状态信息,对第一变换矩阵施加模拟毛发阻尼运动的数值扰动,获得的第一摆动矩阵可以体现毛发的阻尼运动信息,进而根据第一摆动矩阵可以动态改变当前帧毛发模型中顶点的实际空间位置,在毛发所依附的目标对象进行任意位移或旋转运动的过程中,毛发都能够实时响应其运动状态,呈现出较为真实的毛发摆动的图像特效。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施例,并与说明书一起用于解释本公开的原理,并不构成对本公开的不当限定。
图1是根据一示例性实施例示出的一种特效实现方法的流程图。
图2是根据相关技术中一种毛发渲染方法示意图。
图3是根据一示例性实施例示出的另一种特效实现方法的流程图。
图4是根据一示例性实施例示出的分别对作用力向量进行修正前和修正后的效果示意图。
图5是根据一示例性实施例示出的一种获得第一摆动矩阵的流程图。
图6是根据一示例性实施例示出的一种获得第二速度矩阵的流程图。
图7是根据一示例性实施例示出的另一种获得第二速度矩阵的流程图。
图8是根据一示例性实施例示出的另一种获得第一摆动矩阵的流程图。
图9是根据一示例性实施例示出的一种特效实现装置的结构框图。
图10是根据一示例性实施例示出的一种电子设备的框图。
图11是根据一示例性实施例示出的一种电子设备的框图。
具体实施方式
为了使本领域普通人员更好地理解本公开的技术方案,下面将结合附图,对本公开实施例中的技术方案进行清楚、完整地描述。
需要说明的是,本公开的说明书和权利要求书及上述附图中的术语“第一”、“第二”等是用于区别类似的对象,而不必用于描述特定的顺序或先后次序。应该理解这样使用的数据在适当情况下可以互换,以便这里描述的本公开的实施例能够以除了在这里图示或描述的那些以外的顺序实施。以下示例性实施例中所描述的实施方式并不代表与本公开相一致的所有实施方式。相反,它们仅是与如所附权利要求书中所详述的、本公开的一些方面相一致的装置和方法的例子。
首先介绍本公开申请文件会涉及的几个基本概念。
实时渲染(Realtime-Rendering):实时渲染指的是根据图形学算法将三维数据绘制到二维位图之中,并将这些位图实时显示。它的本质就是对图像数据的实时计算和输出。
变换矩阵(Transformation Matrix):变换矩阵是数学线性代数中的一个概念。在图形学中一切物体的缩放、旋转以及位移,都可以通过变换矩阵作用得到。
骨骼蒙皮(Skin):三维动画术语,也用于3D游戏中。三维动画的一种制作技术。在三维软件中创建的模型基础上,为模型添加骨骼。由于骨骼与模型是相互独立的,为了让骨骼驱动模型产生合理的运动,把模型绑定到骨骼上的技术叫做蒙皮。
阻尼运动(Damped Vibration):由于振动系统受到摩擦和介质阻力或其他能耗而使振幅随时间逐渐衰减的振动,又称减幅振动、衰减振动。
毛发在生活中是极为常见的事物,比如动物毛发、毛织衣物及绒毛制品等,因此在游戏、魔法特效等实时渲染领域也有非常广泛的应用需求,然而由于毛发形态结构及光照质感的复杂性,毛发效果的渲染常常意味着极大的运算开销。
为解决性能问题,例如移动端等性能瓶颈较大的平台常常使用基于多层挤出的渲染方式来模拟毛发效果。具体方式是对同一个模型渲染多次,每一次渲染的模型都较前一次稍向外膨胀一些,同时配合一张噪波贴图来区分每一层模型表面的显隐区域,在视觉上模拟出毛发的簇感,如图2所示,以此避免通过大量模型堆叠来表现毛发所造成的极大性能消耗。
对于毛发形态及摆动的物理模拟,相关技术中常常是通过在场景中定义一个或多个具有固定方向的作用力,将作用力向量与原本使模型垂直挤出的法线向量相加,以此得到一个偏移后的顶点膨胀(挤出)方向,最终在视觉上实现弯曲毛发的效果,或者在此基础上加入动态噪声提高毛发摆动的随机性以进一步提高真实度。
发明人发现,相关技术中毛发的受力方向固定且单一,无法表现出目标对象在运动或旋转过程中,其各个部位的毛发因受到不同方向的阻力及自身回弹力时的甩动状态,无法实现动态且真实的物理摆动效果。
图1是根据一示例性实施例示出的一种特效实现方法的流程图,如图1所示,该方法可以包括以下步骤。
在步骤S11中,获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,第一运动状态信息包含第一变换矩阵,第一变换矩阵用于将当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置。
本实施例的执行主体可以为终端等电子设备等。具体可以由电子设备中的中央处理器CPU执行。
第二运动状态信息可以包括前一帧毛发模型中的顶点位置信息以及回弹信息等,如前一帧毛发模型的第二变换矩阵以及第二摆动矩阵等,第二变换矩阵包含前一帧毛发模型中顶点的位置变换信息,第二摆动矩阵为对第二变换矩阵进行调整得到,包含前一帧毛发模型所表示的毛发的阻尼运动信息。
其中,第一变换矩阵和第二变换矩阵可以为4x4的世界空间变换矩阵,用于将毛发模型中的顶点由本地空间位置变换到世界空间位置。
毛发模型为依附于目标对象表面的毛发的三维模型。
在步骤S12中,根据第一运动状态信息以及第二运动状态信息,对第一变换矩阵进行调整,得到当前帧毛发模型的第一摆动矩阵,第一摆动矩阵包含当前帧毛发模型所表示的毛发的阻尼运动信息,阻尼运动信息用于表示毛发沿其零势能形态来回摆动直至静止的运动信息。
从物理上分析,目标对象在做旋转、位移等运动时,附着于其表面的毛发由于受惯性及风阻力的影响,呈现出相反于运动方向的弯曲形变,弯曲的毛发会具备一定的弹性势能并会对自身产生回弹力。在目标对象静止后,由于毛发受到风阻力影响,能量逐渐耗散,毛发会沿其零势能形态来回摆动直至静止,因此毛发摆动的效果实现可以是对阻尼运动的一种近似模拟。
毛发的弯曲实际上是由毛发模型的顶点位置偏移所决定的,而顶点在世界空间中的位置又是由毛发模型4x4的世界空间变换矩阵所求得,本实施例通过对第一变换矩阵中的元素施加模拟阻尼运动的摆动数值干扰来动态改变模型顶点的实际空间位置,以最终达到毛发摆动的近似模拟。
在具体实现中,可以根据前一帧以及当前帧毛发模型的运动状态信息,对第一变换矩阵中的各元素分别施加模拟阻尼运动的数值扰动,将扰动后的第一变换矩阵作为第一摆动矩阵。第一摆动矩阵包含毛发在运动的目标对象的带动下在当前帧的阻尼运动信息,第一摆动矩阵可以体现毛发所受的阻力以及回弹力等物理作用信息,因此根据第一摆动矩阵确定毛发模型顶点的空间偏移位置,可以从视觉上实现毛发的摆动效果。
第一摆动矩阵为4x4的矩阵,可以将第一摆动矩阵中的元素拆分为16个独立的数值来看待,第一摆动矩阵中的每个元素以第一变换矩阵中相对应(行列位置对应)的元素作为平衡点(零势能点)做数值上的阻尼运动。
在步骤S13中,根据第一摆动矩阵以及当前帧毛发模型中顶点的位置坐标,获得当前帧毛发模型中顶点的目标位置坐标。
在步骤S14中,根据目标位置坐标对当前帧毛发模型进行渲染。
当前帧毛发模型中顶点的位置坐标可以为当前帧毛发模型中顶点的本地空间位置坐标。
在一种可选的实现方式中,可以采用第一摆动矩阵对当前帧毛发模型中顶点的本地空间位置坐标进行变换,将变换得到的初始位置坐标作为目标位置坐标。
在另一种可选的实现方式中,可以采用第一摆动矩阵对当前帧毛发模型中顶点的本地空间位置坐标进行变换,得到初始位置坐标,还可以进一步根据初始位置坐标以及当前帧毛发模型中顶点的世界空间位置,转化为顶点的作用力向量,并最终通过作用力向量实时影响模型顶点的空间偏移位置以从视觉上实现更加真实的毛发摆动效果。后续实施例会详细介绍该实现方式的具体过程。
本公开实施例提供的特效实现方法,根据前一帧以及当前帧毛发模型的运动状态信息,对第一变换矩阵施加模拟阻尼运动的数值扰动,获得的第一摆动矩阵可以体现毛发所受的阻力以及回弹力等物理作用信息,进而根据第一摆动矩阵来动态改变当前帧毛发模型中顶点的实际空间位置,可以在目标对象进行任意的位移或旋转等运动的过程中,附着于其表面的毛发能够实时响应其运动状态,呈现出较为真实的毛发摆动效果。
发明人还发现,相关技术中在毛发受力的计算上不够完善,仅将法线与作用力向量相加来偏移模型的挤出方向会造成不太真实的效果:在作用力强度足够大的情况下,法线向量与受力向量的点乘为正数(生长方向与受力方向同向)时,毛发会被无限制地拉长;若相反则毛发会被作用力反向推入物体的表面。
因此,在步骤S13中,如果将每一帧算出的摆动矩阵通过uniform传入shader中,理论上可以直接利用第一摆动矩阵求解得到受摆动影响后的毛发模型中的顶点的目标位置坐标,即采用第一摆动矩阵对当前帧毛发模型中顶点的本地空间位置坐标进行变换,将变换得到的初始位置坐标直接作为目标位置坐标,这样可以实现较为真实的毛发摆动效果,然而此方式难以控制毛发形态,可能会出现如前的毛发长短不均、被推入模型内部等错误结果。
为了解决毛发长短不均、被推入模型内部等问题,可以将矩阵信息计算转化为作用力信息,然后根据作用力信息来优化毛发的响应形态。在一种可选的实现方式中,参照图3,上述实施例提供的特效实现方法还可以进一步包括:
步骤S31,采用第一摆动矩阵,对顶点的本地空间位置坐标进行变换,得到顶点的初始位置坐标,该顶点的位置坐标为顶点的本地空间位置坐标。
步骤S32,采用第一变换矩阵,对顶点的本地空间位置坐标进行变换,得到顶点的世界空间位置坐标。
步骤S33,根据初始位置坐标与世界空间位置坐标之间的差值,获得顶点的作用力向量。
在一种可选的实现方式中,可以将初始位置坐标与世界空间位置坐标之间的差值与预先设置的第一调节系数相乘,得到顶点的作用力向量,第一调节系数用于调节作用力向量的强度大小。
在具体实现中,通过第一摆动矩阵(swing_transform)求得顶点偏移后的初始位置坐标(设为offset_pos),将其与实际顶点位置即世界空间位置坐标(设为world_pos)相减便可以获得影响顶点的作用力向量(设为matrix_force),其模长即为作用力强度,具体计算通过代码表示如下(以opengl为例):
vec3offset_pos=(swing_transform*vec4(local_pos,1.0)).xyz;
vec3matrix_force=(offset_pos-world_pos)*power;
其中local_pos为顶点的本地空间位置,通过第一摆动矩阵可转化到世界空间;第一调节系数power是控制作用力强度的可调节系数。
步骤S34,根据作用力向量与顶点的法向量之间的关系,对作用力向量进行修正,得到顶点的受力向量。
在具体实现中,可以根据作用力向量与顶点的法向量之间的角度关系,对作用力向量进行修正,得到顶点的受力向量。
在一种可选的实现方式中,当作用力向量与法向量之间的点积结果大于或等于零时,受力向量的方向为第一方向,第一方向与法向量垂直且位于作用力向量与法向量所形成的平面内,受力向量的模长为作用力向量在第一方向上的投影长度;当作用力向量与法向量之间的点积结果小于零时,受力向量为作用力向量。
在实现毛发摆动之前,需要首先优化好毛发受到任意方向及强度的作用力时的响应形态,解决相关技术方案做的不够完善的几个点:
点a.毛发生长方向与作用力相迎时,不可能有被作用力挤压到表皮内的情况。
点b.毛发的长度须是一个恒定值,不应该被拉长或压短。
首先对于点a来说,假设毛发受到的作用力为外界的风力,风接触到毛发表皮后并不会穿入表皮中,而是与其对撞后改变方向,产生沿着表皮方向流动的气流,其向量与风力方向及模型表面法向量在同一平面内且与法向量垂直,在迎风面采用此向量来代替原有向量便可在效果理想的情况下避免毛发被推挤入面的情况。
在shader中设毛发模型中顶点法向量为N,作用力向量为force(即前述的matrix_force),则模型迎风面归一化后的受力方向(即第一方向,flow_force)可修正为:
vec3flow_force=normalize(cross(N,cross(force,N)));
由于向量方向的改变,作用力向量的作用强度也有所衰减,衰减比例如下:
flow_force=flow_force*clamp(dot(flow_force,normalize(force)),0.0,1.0);
在实际应用中,背风面的作用力方向不改变,因此可以使用step函数区分毛发的朝向情况,最终顶点的受力向量可表示为:
float divide=step(dot(force,N),0.0);
force=mix(force,flow_force*length(force),divide);
根据顶点朝向情况,对顶点的作用力向量matrix_force进行修正,可以解决毛发被推入模型内部的问题,实现毛发随模型运动而实时摆动的拟真效果。参照图4,示出了对作用力向量进行修正前后的实际毛发效果对比图。
步骤S35,根据受力向量以及法向量,获得顶点的目标位置坐标。
在一种可选的实现方式中,可以首先对受力向量与法向量的和值进行归一化,根据归一化结果确定顶点的膨胀向量;然后将世界空间位置坐标与膨胀向量相加,得到顶点的目标位置坐标。通过归一化可保证每一层模型即使膨胀方向不一样,其膨胀的距离是等同的,以此间接确保了毛发长度的恒定不变,解决毛发长短不均的问题。
其中,毛发模型包括多个毛发横截面,根据归一化结果确定顶点的膨胀向量的步骤具体可以包括:将归一化结果与预设挤出系数以及预设常量相乘,得到顶点的膨胀向量,其中,预设挤出系数用于表征顶点所对应的毛发横截面的膨胀量,预设常量用于控制毛发的长度。预设常量的设置可以确保毛发的长度为一个恒定值,不会被拉长或压短。
对于点b来说,可将上述的force向量与法向量的和值进行归一化后再乘以每一层(对应一个毛发横截面)模型的挤出量,便可保证每一层模型即使膨胀方向不一样,其膨胀的距离也是等同的,以此间接确保了毛发长度的恒定不变,解决毛发长短不均的问题。设顶点的挤出向量为offset,每一层模型的挤出量度(预设挤出系数)为level(通常是一个0-1的值,最里层模型为0,最外层为1,中间层均匀递增),统一控制毛发长度的参数(预设常量)为hair_length,设顶点的世界空间顶点位置为World_Pos,则膨胀后的顶点位置用代码表示为:
vec3offset=normalize(N+force)*level*hair_length;
World_Pos+=offset;
本实现方式中,通过将第一摆动矩阵以及第一变换矩阵的矩阵信息转化为作用力向量,并进一步对作用力向量进行修正得到受力向量,最终通过受力向量实时影响模型顶点的空间偏移位置以从视觉上实现毛发的摆动效果。并且,根据作用力向量与法向量之间的角度关系以及对顶点的膨胀系数(N+force)归一化来修正模型不同部位顶点的受力方向及强度,从而优化毛发在受力时的响应形态,解决毛发长短不均、被推入模型内部等问题。
在一种可选的实现方式中,参照图5,在步骤S11中具体可以包括:
步骤S51,获取前一帧毛发模型的第二摆动矩阵和第一速度矩阵,第一速度矩阵中的第一元素用于表征第二元素的数值以第三元素的数值为平衡点进行阻尼运动的过程中在前一帧的瞬时速度值,第一元素为第一速度矩阵中的任一元素,第二元素为第二摆动矩阵中与第一元素的行列位置对应的元素,第三元素为前一帧毛发模型的第二变换矩阵中与第一元素的行列位置对应的元素,第二变换矩阵用于将前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置。
在步骤S12中具体可以包括:
步骤S52,根据第一速度矩阵、第一变换矩阵以及第二摆动矩阵,确定当前帧毛发模型的第二速度矩阵。
步骤S53,将第二速度矩阵与第二摆动矩阵相加,得到第一摆动矩阵。
下面介绍几种确定当前帧毛发模型的第二速度矩阵的实现方式。
在第一种可选的实现方式中,可以按照以下公式计算第二速度矩阵中的第i个元素:peed_matrix[i]=speed_matrix’[i]*fade+(target_transform[i]-swing_transform’[i])*k,其中,peed_matrix[i]表示第二速度矩阵中的第i个元素,speed_matrix’[i]表示第一速度矩阵中与第i个元素的行列位置对应的元素,target_transform[i]表示第一变换矩阵中与第i个元素的行列位置对应的元素,swing_transform’[i]表示第二摆动矩阵中与第i个元素的行列位置对应的元素,fade表示预先设置的损耗系数,损耗系数用于表征毛发在阻尼运动过程中的能量损耗比例,表征毛发在目标对象的运动过程中因自身回弹造成的能量损耗比例;k表示预先设置的劲度系数,劲度系数用于表征毛发在阻尼运动过程中的回弹力大小,即毛发在自身回弹时的弹力大小。
第二摆动矩阵中的每个元素的数值变动可以理解为以第一变换矩阵中相对应的元素数值为平衡点,在单个维度上的弹簧振子运动。由劲度系数公式f=kx(k为劲度系数,x为弹簧拉伸长度)可得,摆动元素朝平衡点逼近时是加速度减小的加速运动,结合加速度公式vt=vo+at得知,此时还需定义一个速度矩阵(设为speed_matrix)来累计计算16个元素每一帧的瞬时速度值,并以此计算摆动矩阵中元素存放的最终数值。综上,CPU中每一帧对模型的计算中需要执行以下代码进行计算(以lua语言为例):
for i=1,16do
speed_matrix[i]=speed_matrix[i]*fade+(target_transform[i]-swing_transform[i])*k
swing_transform[i]=swing_transform[i]+speed_matrix[i]
end
其中损耗系数fade是一个范围在0到1、用于模拟毛发自身回摆时受风阻力影响造成能量损耗的比例系数,系数越大则数值摆动次数越多,当值为1时则能量不会损耗,数值会在平衡点附近永恒摆动;k值为劲度系数,系数越大则回弹速度越快。
在第一种实现方式中,考虑了毛发自身回摆受到的风阻力的影响,从而可以实现更加真实的毛发摆动效果。
在此基础上进一步分析,毛发除自身回摆受到的风阻力之外,还有模型带动毛发运动时对毛发所产生的风阻力,且模型顶点运动速度越快其阻力就越大。在第二种可选的实现方式中,参照图6,在步骤S51中还可以包括:
步骤S61,获取第二变换矩阵。
步骤S52具体可以包括:
步骤S62,根据第二变换矩阵、第一速度矩阵、第一变换矩阵以及第二摆动矩阵,确定第二速度矩阵。
在具体实现中,可以按照以下公式计算第二速度矩阵中的第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表示预先设置的第二调节系数,第二调节系数用于调节目标对象带动毛发运动的过程中对毛发所产生的阻力大小。
可以引入一个新的变量用于存放上一帧模型的世界空间变换矩阵即第二变换矩阵(设为previous_transform),此时同样用矩阵元素拆分的思维方式来理解,将previous_transform与target_transform相减,便可获得摆动矩阵中每一个元素所受到的瞬时风阻力值f,通过受力分析得知,此时单个摆动元素在一维的弹簧振子运动中所受到的力F=kx-f,替换上式中speed_matrix部分的计算公式后可得:
local F=(target_transform[i]-swing_transform[i])*k
F+=(previous_transform[i]-target_transform[i])*resist
speed_matrix[i]=speed_matrix[i]*fade+F
上式中第二调节系数resist为阻力强度的缩放系数,用于调控毛发受风阻力的影响大小。
在第二种实现方式中,在考虑了毛发自身回摆受到的风阻力的影响基础上,进一步考虑目标对象带动毛发运动时对毛发所产生的风阻力,且顶点运动速度越快其阻力就越大,从而可以进一步提升毛发摆动效果的真实性。
在第三种可选的实现方式中,参照图7,步骤S52具体可以包括:
步骤S71,对第一变换矩阵中的第四元素进行修正,得到第三变换矩阵,第四元素为第一变换矩阵中对应纵向位移的元素。
步骤S72,根据第一速度矩阵、第三变换矩阵以及第二摆动矩阵,确定第二速度矩阵。
在具体实现中,可以按照以下公式计算第三变换矩阵中的第j个元素:target_transform’[j]=target_transform[j]–gravity_amount,其中,target_transform’[j]表示第三变换矩阵中的第j个元素,第j个元素与第四元素的行列位置对应,target_transform[j]表示第四元素,gravity_amount表示预先设置的第三调节系数,第三调节系数用于调节毛发受到的重力的强度大小。其中,第j个元素一般为第三变换矩阵中确定的元素,比如在opengl中第j个元素即第14个元素(第四行第二列),这个元素专门用来影响纵向位移(y方向的位移)。
毛发的摆动常常需要考虑重力的影响维度以进一步提升效果的真实性,可以在上式计算之前预先修改第一变换矩阵target_transform中影响纵向位移的元素数值,使其小于原先值便可给模型顶点施加一个向下的位移倾向,以实现重力的影响效果,代码中公式表达如下(以opengl的矩阵存放顺序为例):
target_transform[14]=target_transform[14]–gravity_amount,其中gravity_amount是用于控制重力的强度的可调节系数。
在第三种实现方式中,考虑了毛发受到的重力的影响,从而可以呈现更加真实的毛发摆动效果。
在一种可选的实现方式中,参照图8,当第一运动状态信息包含多个第一变换矩阵时,各第一变换矩阵包括毛发模型的顶点在不同骨骼运动驱动下的位置变换信息,在步骤S12中具体可以包括:
步骤S81:根据第一运动状态信息以及第二运动状态信息,对多个第一变换矩阵分别进行调整,对应得到多个第三摆动矩阵。
步骤S82:对多个第三摆动矩阵进行加权求和,得到第一摆动矩阵。
在模型进行整体的位移旋转、跟随父对象运动或仅由单个骨骼影响的情况下,模型的顶点仅受到单一的变换矩阵所控制,因此只需要计算出一个摆动矩阵即可。而对于有多骨骼蒙皮所驱动的带动画的模型来说,则需要跟据每一个骨骼的世界空间变换矩阵来计算出对应的摆动矩阵,并跟据其施加于模型顶点的影响权重来分配摆动矩阵对不同部位顶点的作用效果。设骨骼存储的摆动矩阵的数组为BoneSwingMatrix,影响顶点的骨骼id及权重分别为boneId及weights,则最终用于计算的第一摆动矩阵用代码表示为(以每个顶点受两根骨骼影响为例):
swing_transform=BoneSwingMatrix[boneId.x]*weights.x+BoneSwingMatrix[boneId.y]*weights.y
本公开实施例提供的特效实现方法,基于层渲染的毛发材质,开发出一种能根据模型运动状态实时演算的毛发物理摆动效果,并适用于关键帧动画、骨骼动画、父子跟随等多种模型空间变换情况,本技术方案运行高效、数据计算量少,对性能指标较低的移动平台来说同样具备良好的适用性。
图9是根据一示例性实施例示出的一种特效实现装置框图。参照图9,可以包括:
信息获取模块91,被配置为获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,所述第一运动状态信息包含第一变换矩阵,所述第一变换矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
信息调整模块92,被配置为根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵,所述第一摆动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
位置确定模块93,被配置为根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标;
模型渲染模块94,被配置为根据所述目标位置坐标对所述当前帧毛发模型进行渲染。
在一种可选的实现方式中,所述位置确定模块包括:
第一单元,被配置为采用所述第一摆动矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的初始位置坐标,所述顶点的位置坐标为所述顶点的本地空间位置坐标;
第二单元,被配置为采用所述第一变换矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的世界空间位置坐标;
第三单元,被配置为根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量;
第四单元,被配置为根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量;
第五单元,被配置为根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标。
在一种可选的实现方式中,所述第三单元具体被配置为:
将所述差值与预先设置的第一调节系数相乘,得到所述顶点的作用力向量,所述第一调节系数用于调节所述作用力向量的强度大小;
所述第四单元具体被配置为:
当所述作用力向量与所述法向量之间的点积结果大于或等于零时,所述受力向量的方向为第一方向,所述第一方向与所述法向量垂直且位于所述作用力向量与所述法向量所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
当所述作用力向量与所述法向量之间的点积结果小于零时,所述受力向量为所述作用力向量。
在一种可选的实现方式中,所述第五单元具体被配置为:
对所述受力向量与所述法向量的和值进行归一化,根据归一化结果确定所述顶点的膨胀向量;
将所述世界空间位置坐标与所述膨胀向量相加,得到所述顶点的目标位置坐标。
在一种可选的实现方式中,所述毛发模型包括多个毛发横截面,所述第五单元具体被配置为:
将所述归一化结果与预设挤出系数以及预设常量相乘,得到所述顶点的膨胀向量,其中,所述预设挤出系数用于表征所述顶点所对应的毛发横截面的膨胀量,所述预设常量用于控制所述毛发的长度。
在一种可选的实现方式中,所述信息获取模块具体被配置为:
获取前一帧毛发模型的第二摆动矩阵和第一速度矩阵,所述第一速度矩阵中的第一元素用于表征第二元素的数值以第三元素的数值为平衡点进行阻尼运动的过程中在所述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
所述信息调整模块具体被配置为:
根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵;
将所述第二速度矩阵与所述第二摆动矩阵相加,得到所述第一摆动矩阵。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
按照以下公式计算所述第二速度矩阵中的第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表示预先设置的劲度系数,所述劲度系数用于表征所述毛发在阻尼运动过程中的回弹力大小。
在一种可选的实现方式中,所述信息获取模块还被配置为:
获取所述第二变换矩阵;
所述信息调整模块还被配置为:
根据所述第二变换矩阵、所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
按照以下公式计算所述第二速度矩阵中的第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表示预先设置的第二调节系数,所述第二调节系数用于调节所述毛发在运动过程中受到的阻力大小。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
对所述第一变换矩阵中的第四元素进行修正,得到第三变换矩阵,所述第四元素为所述第一变换矩阵中对应纵向位移的元素;
根据所述第一速度矩阵、所述第三变换矩阵以及所述第二摆动矩阵,确定所述第二速度矩阵。
在一种可选的实现方式中,所述信息调整模块具体被配置为:
按照以下公式计算所述第三变换矩阵中的第j个元素:target_transform’[j]=target_transform[j]–gravity_amount,其中,所述target_transform’[j]表示所述第三变换矩阵中的第j个元素,所述第j个元素与所述第四元素的行列位置对应,所述target_transform[j]表示所述第四元素,所述gravity_amount表示预先设置的第三调节系数,所述第三调节系数用于调节所述毛发受到的重力的强度大小。
在一种可选的实现方式中,当所述第一运动状态信息包含多个第一变换矩阵时,各所述第一变换矩阵包括所述毛发模型的顶点在不同骨骼运动驱动下的位置变换信息,所述信息调整模块具体被配置为:
根据所述第一运动状态信息以及所述第二运动状态信息,对多个所述第一变换矩阵分别进行调整,对应得到多个第三摆动矩阵;
对所述多个第三摆动矩阵进行加权求和,得到所述第一摆动矩阵。
关于上述实施例中的装置,其中各个模块执行操作的具体方式已经在有关该方法的实施例中进行了详细描述,此处将不做详细阐述说明。
图10是本公开示出的一种电子设备800的框图。例如,电子设备800可以是移动电话,计算机,数字广播终端,消息收发设备,游戏控制台,平板设备,医疗设备,健身设备,个人数字助理等。
参照图10,电子设备800可以包括以下一个或多个组件:处理组件802,存储器804,电力组件806,多媒体组件808,音频组件810,输入/输出(I/O)的接口812,传感器组件814,以及通信组件816。
处理组件802通常控制电子设备800的整体操作,诸如与显示,电话呼叫,数据通信,相机操作和记录操作相关联的操作。处理组件802可以包括一个或多个处理器820来执行指令,以完成任一实施例所述的特效实现方法的全部或部分步骤。此外,处理组件802可以包括一个或多个模块,便于处理组件802和其他组件之间的交互。例如,处理组件802可以包括多媒体模块,以方便多媒体组件808和处理组件802之间的交互。
存储器804被配置为存储各种类型的数据以支持在设备800的操作。这些数据的示例包括用于在电子设备800上操作的任何应用程序或方法的指令,联系人数据,电话簿数据,消息,图片,视频等。存储器804可以由任何类型的易失性或非易失性存储设备或者它们的组合实现,如静态随机存取存储器(SRAM),可擦除可编程只读存储器(EPROM),可编程只读存储器(PROM),只读存储器(ROM),磁存储器,快闪存储器,磁盘或光盘。
电源组件806为电子设备800的各种组件提供电力。电源组件806可以包括电源管理系统,一个或多个电源,及其他与为电子设备800生成、管理和分配电力相关联的组件。
多媒体组件808包括在所述电子设备800和用户之间的提供一个输出接口的屏幕。在一些实施例中,屏幕可以包括液晶显示器(LCD)和触摸面板(TP)。如果屏幕包括触摸面板,屏幕可以被实现为触摸屏,以接收来自用户的输入信号。触摸面板包括一个或多个触摸传感器以感测触摸、滑动和触摸面板上的手势。所述触摸传感器可以不仅感测触摸或滑动动作的边界,而且还检测与所述触摸或滑动操作相关的持续时间和压力。在一些实施例中,多媒体组件808包括一个前置摄像头和/或后置摄像头。当设备800处于操作模式,如拍摄模式或视频模式时,前置摄像头和/或后置摄像头可以接收外部的多媒体数据。每个前置摄像头和后置摄像头可以是一个固定的光学透镜系统或具有焦距和光学变焦能力。
音频组件810被配置为输出和/或输入音频信号。例如,音频组件810包括一个麦克风(MIC),当电子设备800处于操作模式,如呼叫模式、记录模式和语音识别模式时,麦克风被配置为接收外部音频信号。所接收的音频信号可以被进一步存储在存储器804或经由通信组件816发送。在一些实施例中,音频组件810还包括一个扬声器,用于输出音频信号。
I/O接口812为处理组件802和外围接口模块之间提供接口,上述外围接口模块可以是键盘,点击轮,按钮等。这些按钮可包括但不限于:主页按钮、音量按钮、启动按钮和锁定按钮。
传感器组件814包括一个或多个传感器,用于为电子设备800提供各个方面的状态评估。例如,传感器组件814可以检测到设备800的打开/关闭状态,组件的相对定位,例如所述组件为电子设备800的显示器和小键盘,传感器组件814还可以检测电子设备800或电子设备800一个组件的位置改变,用户与电子设备800接触的存在或不存在,电子设备800方位或加速/减速和电子设备800的温度变化。传感器组件814可以包括接近传感器,被配置用来在没有任何的物理接触时检测附近物体的存在。传感器组件814还可以包括光传感器,如CMOS或CCD图像传感器,用于在成像应用中使用。在一些实施例中,该传感器组件814还可以包括加速度传感器,陀螺仪传感器,磁传感器,压力传感器或温度传感器。
通信组件816被配置为便于电子设备800和其他设备之间有线或无线方式的通信。电子设备800可以接入基于通信标准的无线网络,如WiFi,运营商网络(如2G、3G、4G或5G),或它们的组合。在一个示例性实施例中,通信组件816经由广播信道接收来自外部广播管理系统的广播信号或广播相关信息。在一个示例性实施例中,所述通信组件816还包括近场通信(NFC)模块,以促进短程通信。例如,在NFC模块可基于射频识别(RFID)技术,红外数据协会(IrDA)技术,超宽带(UWB)技术,蓝牙(BT)技术和其他技术来实现。
在示例性实施例中,电子设备800可以被一个或多个应用专用集成电路(ASIC)、数字信号处理器(DSP)、数字信号处理设备(DSPD)、可编程逻辑器件(PLD)、现场可编程门阵列(FPGA)、控制器、微控制器、微处理器或其他电子元件实现,用于执行任一实施例所述的特效实现方法。
在示例性实施例中,还提供了一种包括指令的计算机可读存储介质,例如包括指令的存储器804,上述指令可由电子设备800的处理器820执行以完成任一实施例所述的特效实现方法。例如,所述计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
在示例性实施例中,还提供了一种计算机程序产品,该计算机程序产品包括可读性程序代码,该可读性程序代码可由装置800的处理器820执行以完成任一实施例所述的特效实现方法。可选地,该程序代码可以存储在装置800的存储介质中,该计算机可读存储介质可以是ROM、随机存取存储器(RAM)、CD-ROM、磁带、软盘和光数据存储设备等。
图11是本公开示出的一种电子设备1900的框图。例如,电子设备1900可以被提供为一服务器。
参照图11,电子设备1900包括处理组件1922,其进一步包括一个或多个处理器,以及由存储器1932所代表的存储器资源,用于存储可由处理组件1922的执行的指令,例如应用程序。存储器1932中存储的应用程序可以包括一个或一个以上的每一个对应于一组指令的模块。此外,处理组件1922被配置为执行指令,以执行任一实施例所述的特效实现方法。
电子设备1900还可以包括一个电源组件1926被配置为执行电子设备1900的电源管理,一个有线或无线网络接口1950被配置为将电子设备1900连接到网络,和一个输入输出(I/O)接口1958。电子设备1900可以操作基于存储在存储器1932的操作系统,例如WindowsServerTM,MacOSXTM,UnixTM,LinuxTM,FreeBSDTM或类似。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其它实施方案。本公开旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施例仅被视为示例性的,本公开的真正范围和精神由下面的权利要求指出。
应当理解的是,本公开并不局限于上面已经描述并在附图中示出的精确结构,并且可以在不脱离其范围进行各种修改和改变。本公开的范围仅由所附的权利要求来限制。
Claims (10)
1.一种特效实现方法,其特征在于,所述方法包括:
获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,所述第一运动状态信息包含第一变换矩阵,所述第一变换矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵,所述第一摆动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标;
根据所述目标位置坐标对所述当前帧毛发模型进行渲染。
2.根据权利要求1所述的特效实现方法,其特征在于,所述根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标的步骤,包括:
采用所述第一摆动矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的初始位置坐标,所述顶点的位置坐标为所述顶点的本地空间位置坐标;
采用所述第一变换矩阵,对所述顶点的本地空间位置坐标进行变换,得到所述顶点的世界空间位置坐标;
根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量;
根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量;
根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标。
3.根据权利要求2所述的特效实现方法,其特征在于,根据所述初始位置坐标与所述世界空间位置坐标之间的差值,获得所述顶点的作用力向量的步骤,包括:
将所述差值与预先设置的第一调节系数相乘,得到所述顶点的作用力向量,所述第一调节系数用于调节所述作用力向量的强度大小;
所述根据所述作用力向量与所述顶点的法向量之间的关系,对所述作用力向量进行修正,得到所述顶点的受力向量的步骤,包括:
当所述作用力向量与所述法向量之间的点积结果大于或等于零时,所述受力向量的方向为第一方向,所述第一方向与所述法向量垂直且位于所述作用力向量与所述法向量所形成的平面内,所述受力向量的模长为所述作用力向量在所述第一方向上的投影长度;
当所述作用力向量与所述法向量之间的点积结果小于零时,所述受力向量为所述作用力向量。
4.根据权利要求2所述的特效实现方法,其特征在于,所述根据所述受力向量以及所述法向量,获得所述顶点的目标位置坐标的步骤,包括:
对所述受力向量与所述法向量的和值进行归一化,根据归一化结果确定所述顶点的膨胀向量;
将所述世界空间位置坐标与所述膨胀向量相加,得到所述顶点的目标位置坐标。
5.根据权利要求4所述的特效实现方法,其特征在于,所述毛发模型包括多个毛发横截面,所述根据归一化结果确定所述顶点的膨胀向量的步骤,包括:
将所述归一化结果与预设挤出系数以及预设常量相乘,得到所述顶点的膨胀向量,其中,所述预设挤出系数用于表征所述顶点所对应的毛发横截面的膨胀量,所述预设常量用于控制所述毛发的长度。
6.根据权利要求1所述的特效实现方法,其特征在于,获取前一帧毛发模型的第二运动状态信息的步骤,包括:
获取前一帧毛发模型的第二摆动矩阵和第一速度矩阵,所述第一速度矩阵中的第一元素用于表征第二元素的数值以第三元素的数值为平衡点进行阻尼运动的过程中在所述前一帧的瞬时速度值,所述第一元素为所述第一速度矩阵中的任一元素,所述第二元素为所述第二摆动矩阵中与所述第一元素的行列位置对应的元素,所述第三元素为所述前一帧毛发模型的第二变换矩阵中与所述第一元素的行列位置对应的元素,所述第二变换矩阵用于将所述前一帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
所述根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵的步骤,包括:
根据所述第一速度矩阵、所述第一变换矩阵以及所述第二摆动矩阵,确定所述当前帧毛发模型的第二速度矩阵;
将所述第二速度矩阵与所述第二摆动矩阵相加,得到所述第一摆动矩阵。
7.一种特效实现装置,其特征在于,所述装置包括:
信息获取模块,被配置为获取当前帧毛发模型的第一运动状态信息以及前一帧毛发模型的第二运动状态信息,所述第一运动状态信息包含第一变换矩阵,所述第一变换矩阵用于将所述当前帧毛发模型中的顶点由本地空间位置变换到世界空间位置;
信息调整模块,被配置为根据所述第一运动状态信息以及所述第二运动状态信息,对所述第一变换矩阵进行调整,得到所述当前帧毛发模型的第一摆动矩阵,所述第一摆动矩阵包含所述当前帧毛发模型所表示的毛发的阻尼运动信息,所述阻尼运动信息用于表示所述毛发沿其零势能形态来回摆动直至静止的运动信息;
位置确定模块,被配置为根据所述第一摆动矩阵以及所述当前帧毛发模型中顶点的位置坐标,获得所述当前帧毛发模型中顶点的目标位置坐标;
模型渲染模块,被配置为根据所述目标位置坐标对所述当前帧毛发模型进行渲染。
8.一种电子设备,其特征在于,所述电子设备包括:
处理器;
用于存储所述处理器可执行指令的存储器;
其中,所述处理器被配置为执行所述指令,以实现如权利要求1至6中任一项所述的特效实现方法。
9.一种计算机可读存储介质,当所述计算机可读存储介质中的指令由电子设备的处理器执行时,使得所述电子设备能够执行如权利要求1至6中任一项所述的特效实现方法。
10.一种计算机程序产品,包括计算机程序,其特征在于,所述计算机程序被处理器执行时实现如权利要求1至6中任一项所述的特效实现方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110114228.3A CN112767521B (zh) | 2021-01-27 | 2021-01-27 | 特效实现方法、装置、电子设备及存储介质 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202110114228.3A CN112767521B (zh) | 2021-01-27 | 2021-01-27 | 特效实现方法、装置、电子设备及存储介质 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN112767521A true CN112767521A (zh) | 2021-05-07 |
CN112767521B CN112767521B (zh) | 2022-02-08 |
Family
ID=75706270
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202110114228.3A Active CN112767521B (zh) | 2021-01-27 | 2021-01-27 | 特效实现方法、装置、电子设备及存储介质 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN112767521B (zh) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113947653A (zh) * | 2021-09-27 | 2022-01-18 | 四川大学 | 一种真实质感毛发的模拟方法 |
CN114053696A (zh) * | 2021-11-15 | 2022-02-18 | 完美世界(北京)软件科技发展有限公司 | 图像渲染处理方法、装置及电子设备 |
Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101512633A (zh) * | 2006-07-24 | 2009-08-19 | 索尼株式会社 | 毛发运动合成器系统和用于毛发/皮毛流水线的优化技术 |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
US20170098327A1 (en) * | 2014-02-03 | 2017-04-06 | Dreamworks Animation Llc | Efficient and stable approach to elasticity and collisions for hair animation |
CN107067451A (zh) * | 2017-04-07 | 2017-08-18 | 广州爱九游信息技术有限公司 | 动画中动态骨骼的实现方法和装置 |
CN107146273A (zh) * | 2017-05-11 | 2017-09-08 | 北京航空航天大学 | 一种面向基于图像头发建模的自适应浮动切线匹配方法 |
US20180268591A1 (en) * | 2015-02-15 | 2018-09-20 | Zhejiang University | Real-Time Animation Method for Hair-Object Collisions |
CN108961365A (zh) * | 2017-05-19 | 2018-12-07 | 腾讯科技(深圳)有限公司 | 三维虚拟对象摆动方法、装置、存储介质和计算机设备 |
CN109685876A (zh) * | 2018-12-21 | 2019-04-26 | 北京达佳互联信息技术有限公司 | 毛发渲染方法、装置、电子设备及存储介质 |
-
2021
- 2021-01-27 CN CN202110114228.3A patent/CN112767521B/zh active Active
Patent Citations (8)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101512633A (zh) * | 2006-07-24 | 2009-08-19 | 索尼株式会社 | 毛发运动合成器系统和用于毛发/皮毛流水线的优化技术 |
US20170098327A1 (en) * | 2014-02-03 | 2017-04-06 | Dreamworks Animation Llc | Efficient and stable approach to elasticity and collisions for hair animation |
US20180268591A1 (en) * | 2015-02-15 | 2018-09-20 | Zhejiang University | Real-Time Animation Method for Hair-Object Collisions |
CN105976418A (zh) * | 2016-06-28 | 2016-09-28 | 珠海金山网络游戏科技有限公司 | 一种人物动态骨骼的设计系统和方法 |
CN107067451A (zh) * | 2017-04-07 | 2017-08-18 | 广州爱九游信息技术有限公司 | 动画中动态骨骼的实现方法和装置 |
CN107146273A (zh) * | 2017-05-11 | 2017-09-08 | 北京航空航天大学 | 一种面向基于图像头发建模的自适应浮动切线匹配方法 |
CN108961365A (zh) * | 2017-05-19 | 2018-12-07 | 腾讯科技(深圳)有限公司 | 三维虚拟对象摆动方法、装置、存储介质和计算机设备 |
CN109685876A (zh) * | 2018-12-21 | 2019-04-26 | 北京达佳互联信息技术有限公司 | 毛发渲染方法、装置、电子设备及存储介质 |
Non-Patent Citations (2)
Title |
---|
NEALEN A 等: "Physically based deformable models in computer graphics", 《COMPUTER GRAPHICS FORUM》 * |
顾耀林 等: "实时毛发建模和动画", 《计算机工程与设计》 * |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN113947653A (zh) * | 2021-09-27 | 2022-01-18 | 四川大学 | 一种真实质感毛发的模拟方法 |
CN114053696A (zh) * | 2021-11-15 | 2022-02-18 | 完美世界(北京)软件科技发展有限公司 | 图像渲染处理方法、装置及电子设备 |
CN114053696B (zh) * | 2021-11-15 | 2023-01-10 | 完美世界(北京)软件科技发展有限公司 | 图像渲染处理方法、装置及电子设备 |
Also Published As
Publication number | Publication date |
---|---|
CN112767521B (zh) | 2022-02-08 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
JP7408048B2 (ja) | 人工知能に基づくアニメキャラクター駆動方法及び関連装置 | |
CN110163054B (zh) | 一种人脸三维图像生成方法和装置 | |
CN104182718B (zh) | 一种人脸特征点定位方法及装置 | |
CN110930483B (zh) | 一种角色控制的方法、模型训练的方法以及相关装置 | |
CN112767521B (zh) | 特效实现方法、装置、电子设备及存储介质 | |
US20220180586A1 (en) | Animation making method and apparatus, computing device, and storage medium | |
JP2020510262A5 (zh) | ||
US10909744B1 (en) | Simulating garment with wrinkles based on physics based cloth simulator and machine learning model | |
CN109308469B (zh) | 用于生成信息的方法和装置 | |
US11809617B2 (en) | Systems and methods for generating dynamic obstacle collision warnings based on detecting poses of users | |
JP7299414B2 (ja) | 画像処理方法、装置、電子機器及びコンピュータプログラム | |
CN112712578B (zh) | 虚拟角色模型创建方法、装置、电子设备和存储介质 | |
KR102491140B1 (ko) | 가상 아바타 생성 방법 및 장치 | |
CN110517340B (zh) | 一种基于人工智能的脸部模型确定方法和装置 | |
CN110517339A (zh) | 一种基于人工智能的动画形象驱动方法和装置 | |
CN110580677A (zh) | 一种数据处理方法、装置和用于数据处理的装置 | |
CN109224448B (zh) | 一种流光渲染的方法和装置 | |
CN107066095B (zh) | 一种信息处理方法及电子设备 | |
CA3182690A1 (en) | Method and system for real-time simulation of elastic body | |
CN114063761B (zh) | 注视点显示方法及相关装置 | |
CN111580667B (zh) | 注视点显示方法及相关装置 | |
US8139076B2 (en) | System, method, and program for determining luminance values of multiple polygons which represent a surface of a subject | |
CN108846897B (zh) | 三维模型表面材质模拟方法、装置、存储介质及电子设备 | |
CN115714888B (zh) | 视频生成方法、装置、设备与计算机可读存储介质 | |
US11188811B2 (en) | Communication apparatus |
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 |