毛发模型的生成方法、装置、存储介质与电子设备
技术领域
本公开涉及计算机
技术领域
,尤其涉及一种毛发模型的生成方法、毛发模型的生成装置、计算机可读存储介质与电子设备。背景技术
随着计算机技术等的发展,三维虚拟对象成为游戏制作、动画制作等领域内的重要部分,并且由于三维虚拟对象具有丰富、逼真的视觉效果,受到了大众的广泛欢迎。
其中,在一些三维虚拟对象,如人物、动物和其他虚拟对象中,毛发模型是非常重要的组成部分,比如,可以包括人物角色的头发、动物的毛发、毛绒材质物品的绒毛等。在现有的毛发模型制作中,为了使毛发模型呈现出层次感和立体感,会选择加深毛发根部的颜色,但是与此同时,会使得毛发根部过暗,导致整个毛发模型的视觉效果不佳。
需要说明的是,在上述
背景技术
部分公开的信息仅用于加强对本公开的背景的理解,因此可以包括不构成对本领域普通技术人员已知的现有技术的信息。
发明内容
本公开提供了一种毛发模型的生成方法、毛发模型的生成装置、计算机可读存储介质与电子设备,进而至少在一定程度上改善现有技术毛发模型的视觉效果不佳的问题。
本公开的其他特性和优点将通过下面的详细描述变得显然,或部分地通过本公开的实践而习得。
根据本公开的第一方面,提供一种毛发模型的生成方法,所述方法包括:获取预设数量的毛发面片;沿所述毛发面片的法线方向对所述毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,将透明度处理后得到的多个毛发面片进行叠加,以生成初始毛发模型;根据所述初始毛发模型的法线贴图,控制所述初始毛发模型的生长方向沿所述法线贴图对应的法线方向延伸;基于所述初始毛发模型的漫反射贴图,对所述初始毛发模型进行渲染,生成目标毛发模型。
在本公开的一种示例性实施方式中,所述获取预设数量的毛发面片,包括:获取噪声贴图,所述噪声贴图包括多个噪点,所述多个噪点用于表示毛发的分布区域;对所述噪声贴图进行复制,直至达到预设复制次数,以得到所述预设数量的毛发面片。
在本公开的一种示例性实施方式中,所述沿所述毛发面片的法线方向对所述毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,包括:沿所述毛发面片的法线方向,将所述毛发面片的顶点按照预设偏移值进行偏移,直至达到预设偏移次数;对于偏移后得到的每一片毛发面片,按照所述毛发面片的偏移顺序,沿所述毛发面片的预设方向对所述毛发面片的不透明度进行衰减处理;其中,前一毛发面片的不透明度的衰减量小于后一毛发面片的不透明度的衰减量,所述预设方向为沿所述毛发面片的径向向外的方向。
在本公开的一种示例性实施方式中,在按照所述毛发面片的偏移顺序,沿所述毛发面片的预设方向对所述毛发面片的不透明度进行衰减处理时,所述方法还包括:按照所述毛发面片的偏移顺序,确定所述毛发面片的不透明度的初始衰减量,其中,前一毛发面片的不透明度的初始衰减量小于后一毛发面片的不透明度的初始衰减量;基于所述初始衰减量,对所述毛发面片的不透明度进行衰减处理。
在本公开的一种示例性实施方式中,所述方法还包括:通过以下公式计算每次偏移后得到的毛发面片的透明度:
Alpha=(Noise*2-(Fur_offset*Fur_offset+(Fur_offset*Furmask*5)))*Timing+FurOpacity
其中,Alpha为第i次偏移后得到的毛发面片的透明度,Noise为噪声贴图的R通道的值,Fur_offset为第i次偏移后得到的所述毛发面片的分层控制量,Fur_mask为遮罩的可控变量,Timing为一可控变量,FurOpacity为另一可控变量。
在本公开的一种示例性实施方式中,在沿所述毛发面片的法线方向对所述毛发面片的顶点进行偏移时,所述方法还包括:根据所述偏移后得到的毛发面片的偏移顺序,确定所述偏移后得到的毛发面片在预设外力方向上的偏移值,所述预设外力方向包括预设重力方向和/或预设风力方向;控制所述偏移后得到的毛发面片沿所述预设外力方向偏移所述偏移值。
在本公开的一种示例性实施方式中,所述根据所述初始毛发模型的法线贴图,控制所述初始毛发模型的生长方向沿所述法线贴图对应的法线方向延伸,包括:获取所述初始毛发模型的顶点法线;将所述顶点法线替换为所述初始毛发模型的法线贴图,以控制所述初始毛发模型的生长方向沿所述法线贴图对应的法线方向延伸。
在本公开的一种示例性实施方式中,所述基于所述初始毛发模型的漫反射贴图,对所述初始毛发模型进行渲染,生成目标毛发模型,包括:通过所述漫反射贴图设置所述初始毛发模型的基础颜色;依据所述初始毛发模型的基础颜色,计算所述初始毛发模型的调整颜色,按照所述调整颜色对所述初始毛发模型进行渲染,以生成所述目标毛发模型。
在本公开的一种示例性实施方式中,所述依据所述初始毛发模型的基础颜色,计算所述初始毛发模型的调整颜色,包括:通过以下公式计算所述初始毛发模型的调整颜色:
Cpara=Cbase*CT
C=Cpara*Csun+Cenv
其中,C为所述初始毛发模型的调整颜色,Cpara为计算所述初始毛发模型的调整颜色的中间参数,Cbase为所述初始毛发模型的基础颜色,CT为所述初始毛发模型的染色,Csun为太阳光,Cenv为环境光。
根据本公开的第二方面,提供一种毛发模型的生成装置;所述装置包括:获取模块,用于获取预设数量的毛发面片;偏移模块,用于沿所述毛发面片的法线方向对所述毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,将透明度处理后得到的多个毛发面片进行叠加,以生成初始毛发模型;控制模块,用于根据所述初始毛发模型的法线贴图,控制所述初始毛发模型的生长方向沿所述法线贴图对应的法线方向延伸;渲染模块,用于基于所述初始毛发模型的漫反射贴图,对所述初始毛发模型进行渲染,生成目标毛发模型。
在本公开的一种示例性实施方式中,所述获取模块用于获取噪声贴图,所述噪声贴图包括多个噪点,所述多个噪点用于表示毛发的分布区域,对所述噪声贴图进行复制,直至达到预设复制次数,以得到所述预设数量的毛发面片。
在本公开的一种示例性实施方式中,所述偏移模块用于沿所述毛发面片的法线方向,将所述毛发面片的顶点按照预设偏移值进行偏移,直至达到预设偏移次数,对于偏移后得到的每一片毛发面片,按照所述毛发面片的偏移顺序,沿所述毛发面片的预设方向对所述毛发面片的不透明度进行衰减处理,其中,前一毛发面片的不透明度的衰减量小于后一毛发面片的不透明度的衰减量,所述预设方向为沿所述毛发面片的径向向外的方向。
在本公开的一种示例性实施方式中,在按照所述毛发面片的偏移顺序,沿所述毛发面片的预设方向对所述毛发面片的不透明度进行衰减处理时,所述偏移模块还用于按照所述毛发面片的偏移顺序,确定所述毛发面片的不透明度的初始衰减量,其中,前一毛发面片的不透明度的初始衰减量小于后一毛发面片的不透明度的初始衰减量,基于所述初始衰减量,对所述毛发面片的不透明度进行衰减处理。
在本公开的一种示例性实施方式中,所述偏移模块还用于通过以下公式计算每次偏移后得到的毛发面片的透明度:
Alpha=(Noise*2-(Fur_offset*Fur_offset+(Fur_offset*Furmask*5)))*Timing+FurOpacity
其中,Alpha为第i次偏移后得到的毛发面片的透明度,Noise为噪声贴图的R通道的值,Fur_offset为第i次偏移后得到的所述毛发面片的分层控制量,Fur_mask为遮罩的可控变量,Timing为一可控变量,FurOpacity为另一可控变量。
在本公开的一种示例性实施方式中,在沿所述毛发面片的法线方向对所述毛发面片的顶点进行偏移时,所述偏移模块还用于根据所述偏移后得到的毛发面片的偏移顺序,确定所述偏移后得到的毛发面片在预设外力方向上的偏移值,所述预设外力方向包括预设重力方向和/或预设风力方向,控制所述偏移后得到的毛发面片沿所述预设外力方向偏移所述偏移值。
在本公开的一种示例性实施方式中,所述控制模块用于获取所述初始毛发模型的顶点法线,将所述顶点法线替换为所述初始毛发模型的法线贴图,以控制所述初始毛发模型的生长方向沿所述法线贴图对应的法线方向延伸。
在本公开的一种示例性实施方式中,所述渲染模块用于通过所述漫反射贴图设置所述初始毛发模型的基础颜色,依据所述初始毛发模型的基础颜色,计算所述初始毛发模型的调整颜色,按照所述调整颜色对所述初始毛发模型进行渲染,以生成所述目标毛发模型。
在本公开的一种示例性实施方式中,所述渲染模块还用于通过以下公式计算所述初始毛发模型的调整颜色:
Cpara=Cbase*CT
C=Cpara*Csun+Cenv
其中,C为所述初始毛发模型的调整颜色,Cpara为计算所述初始毛发模型的调整颜色的中间参数,Cbase为所述初始毛发模型的基础颜色,CT为所述初始毛发模型的染色,Csun为太阳光,Cenv为环境光。
根据本公开的第三方面,提供一种计算机可读存储介质,其上存储有计算机程序,所述计算机程序被处理器执行时实现上述任意一种毛发模型的生成方法。
根据本公开的第四方面,提供一种电子设备,包括:处理器;以及存储器,用于存储所述处理器的可执行指令;其中,所述处理器配置为经由执行所述可执行指令来执行上述任意一种毛发模型的生成方法。
本公开具有以下有益效果:
根据本示例性实施方式中的毛发模型的生成方法、毛发模型的生成装置、计算机可读存储介质和电子设备,可以沿获取的毛发面片的法线方向对毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,将透明度处理后得到的多个毛发面片进行叠加,以生成初始毛发模型,根据初始毛发模型的法线贴图,控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸,并基于初始毛发模型的漫反射贴图,对初始毛发模型进行渲染,生成目标毛发模型。一方面,通过对毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,以及将透明度处理后的多个毛发面片进行叠加,生成初始毛发模型,不需要制作人员人工绘制毛发,能够极大地提高制作毛发模型的效率,尤其是在制作复杂的三维虚拟对象时,能够生成高度精细的毛发模型;另一方面,通过根据初始毛发模型的法线贴图控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸,能够实现毛发方向的精准控制,避免毛发模型发生畸变。
应当理解的是,以上的一般描述和后文的细节描述仅是示例性和解释性的,并不能限制本公开。
附图说明
此处的附图被并入说明书中并构成本说明书的一部分,示出了符合本公开的实施方式,并与说明书一起用于解释本公开的原理。显而易见地,下面描述中的附图仅仅是本公开的一些实施方式,对于本领域普通技术人员来讲,在不付出创造性劳动的前提下,还可以根据这些附图获得其他的附图。
图1示出本示例性实施方式中一种毛发模型的生成方法的流程图;
图2示出本示例性实施方式中一种噪声贴图的示意图;
图3示出本示例性实施方式中一种生成毛发结构的示意图;
图4示出本示例性实施方式中一种毛发模型的生成方法的子流程图;
图5A和图5B示出本示例性实施方式中一种透明度衰减的毛发示意图;
图6A和图6B示出本示例性实施方式中一种外力偏移前后的局部毛发区域的示意图;
图7示出本示例性实施方式中一种外力偏移后的毛发模型效果示意图;
图8A和图8B分别示出本示例性实施方式中一种畸变矫正前后的毛发模型的示意图;
图9示出本示例性实施方式中一种基础着色后的毛发模型示意图;
图10示出本示例性实施方式中一种目标毛发模型的示意图;
图11A图11B分别示出本示例性实施方式中一种调整颜色渲染前后的目标毛发模型的示意图;
图12示出本示例性实施方式中一种毛发模型的生成装置的结构框图;
图13示出本示例性实施方式中一种用于实现上述方法的计算机可读存储介质;
图14示出本示例性实施方式中一种用于实现上述方法的电子设备。
具体实施方式
现在将参考附图更全面地描述示例实施方式。然而,示例实施方式能够以多种形式实施,且不应被理解为限于在此阐述的范例;相反,提供这些实施方式使得本公开将更加全面和完整,并将示例实施方式的构思全面地传达给本领域的技术人员。所描述的特征、结构或特性可以以任何合适的方式结合在一个或更多实施方式中。
近年来,终端设备的性能不断提升,现如今已经能够承载更加精细的三维虚拟对象的画面呈现。在此基础之上,为了满足用户对精致画面的视觉需求,呈现更加精致细腻的毛发效果,制作人员需要不断地优化毛发模型的视觉效果。
基于此,本公开的示例性实施方式首先提供了一种毛发模型的生成方法。该方法可以应用于电子设备,可以对获取的毛发面片进行处理,生成目标毛发模型,目标毛发模型可以被设置于三维虚拟对象的表面,使得三维虚拟对象呈现出相应的毛发效果。其中,电子设备可以是终端设备或者服务器等,终端设备可以是电脑、平板电脑、智能手机等,服务器可以是由物理服务器构成的单个服务器或服务器集群,也可以是提供云计算服务的云服务器等。
本示例性实施方式的毛发模型的生成方法一般可以由终端设备执行,相应的,毛发模型的生成装置可以设置于终端设备中。但本领域技术人员容易理解的是,本示例性实施方式所提供的毛发模型的生成方法也可以由服务器执行,相应的,毛发模型的生成装置可以设置于服务器中,本示例性实施方式对此不做特殊限定。举例而言,在一种可选的实施方式中,可以由终端设备执行本示例性实施方式中的毛发模型的生成方法,对获取的毛发面片进行处理,生成目标毛发模型,或者,可以由服务器接收终端设备发送的毛发面片,并通过执行本示例性实施方式中的毛发模型的生成方法对毛发面片进行处理,来生成目标毛发模型,然后将目标毛发模型发送至终端设备。
图1示出了本示例性实施方式的一种流程,可以包括以下步骤S110~S140:
步骤S110.获取预设数量的毛发面片。
其中,毛发面片是指能够用来制作毛发模型的面片,其形状可以是三角形面片,或者四边形面片,也可以是其他任意形状的面片。另外,本示例性实施方式中,毛发面片的厚度可以忽略不计。
一般而言,毛发面片可以由制作人员预先制作生成,如可以在三维模型软件中输入面片参数,如形状、边长等生成相应的毛发面片,或者,也可以从三维模型软件中选择默认的面片作为毛发面片。
实际上,每片毛发面片可以生成若干数量根毛发,为了提高生成多根毛发的便利性,增加生成的毛发模型中毛发的密度,在一种可选的实施方式中,步骤S110可以通过以下方法实现:
获取噪声贴图;
对上述噪声贴图进行复制,直至达到预设复制次数,以得到预设数量的毛发面片。
其中,噪声贴图可以包括多个噪点,该多个噪点可以用于表示毛发的分布区域,例如,参考图2所示,每个晶胞或者每个噪点为一根毛发。预设复制次数可以由制作人员依据每个噪声贴图所包含的噪点数量确定,当噪声贴图的噪点数量较多时,复制较少的次数便可以得到较多数量的毛发所需要的毛发面片,反之,当噪声贴图的噪点数量较少时,复制较多的次数才可以得到较多数量的毛发所需要的毛发面片。
通过上述方法,可以简化生成毛发面片的操作流程,提高生成具有预设数量的毛发面片的效率。
步骤S120.沿毛发面片的法线方向对毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,将透明度处理后得到的多个毛发面片进行叠加,以生成初始毛发模型。
毛发面片的法线方向是指垂直于毛发面片的方向,毛发面片的顶点可以由制作人员使用相应的着色器进行设置。在一片毛发面片中,可以选择一个或多个顶点,例如,可以将一片毛发面片中的每个噪点中的任意一点设置为顶点,从而得到多个顶点。沿毛发面片的法线方向对毛发面片的顶点进行偏移,进而对偏移后的毛发面片进行透明度处理,使得偏移后的毛发面片的边缘呈现出越来越多的透明区域,叠加后的毛发面片便呈现出由粗到细的特点,得到视觉上的毛发效果。例如,图3示出了一种生成毛发模型的示意图,每个三角形片状结构可以视为一片毛发面片,将一片毛发面片进行顶点偏移,得到与毛发面片平行分布的多个毛发面片,对偏移后得到的毛发面片进行透明度处理,使得偏移后的毛发面片的不透明区域越来越小,叠加后的毛发面片在距离比较近的条件下呈现出毛发的形状。
通过上述方法,可以通过将顶点沿毛发面片的法线方向挤出毛发面片表面,然后对挤出后得到的毛发面片进行透明度处理,进而叠加处理后的多个毛发面片以生成初始毛发模型,不需要制作人员人工绘制毛发,能够极大地提高制作毛发模型的效率,尤其是在制作复杂的三维虚拟对象时,能够生成高度精细的毛发模型。
具体的,在一种可选的实施方式中,参考图4所示,步骤S120可以通过以下步骤S410~S420实现:
步骤S410,沿毛发面片的法线方向,将毛发面片的顶点按照预设偏移值进行偏移,直至达到预设偏移次数。
预设偏移值可以通过相应的函数计算得到,或者也可以直接设置为固定值,即,将毛发面片沿其法线方向每次偏移固定距离,直至达到预设偏移次数。
对每一片毛发面片而言,可以沿毛发面片的法线方向,将毛发面片的顶点每次偏移预设偏移值,直至达到预设偏移次数,得到由一片毛发面片偏移而来的一个或多个毛发面片,其中,相邻的两个毛发面片的偏移值相差一个预设偏移值。对于较为复杂的三维虚拟对象,比如游戏内的三维虚拟对象,通常需要偏移20~30次,才能使叠加后的毛发面片呈现出毛发的效果。
步骤S420,对于偏移后得到的每一片毛发面片,按照毛发面片的偏移顺序,沿毛发面片的预设方向对毛发面片的不透明度进行衰减处理。
其中,前一毛发面片的不透明度的衰减量小于后一毛发面片的不透明度的衰减量,预设方向为沿上述毛发面片的径向向外的方向。
具体而言,对于偏移后得到的每一片毛发面片,例如,对于偏移顺序为i的毛发面片,可以按照该毛发面片的偏移次数,沿预设方向对毛发面片进行不透明度衰减处理,使得在透明通道中,毛发面片越靠近边缘的部分透明度越高(黑色的部分越多,全黑表示全透明)。然后,继续对下一个毛发面片,即偏移顺序为i+1的毛发面片进行不透明度的衰减处理,此时,毛发面片的不透明度的衰减量大于偏移顺序为i的毛发面片的衰减量,也就是说,偏移顺序越靠后,所得到的毛发面片的不透明度的衰减量就越大,透明区域就越多,由此,将透明区域视为切除掉的区域,则相邻两个毛发面片呈现出一大一小的效果。参考图5A所示,越靠近上部的毛发面片的不透明度的衰减量越大,毛发面片看起来越小,按照顺序叠加每次偏移后的毛发面片,所有毛发面片便构成了一个锥形结构,即得到如图5B所示的毛发结构,可以看出,此时的毛发结构具备了毛发从根部到顶端呈现出由粗到细的特点。
进一步的,在一种可选的实施方式中,在步骤S420中,还可以执行以下方法:
按照毛发面片的偏移顺序,确定上述毛发面片的不透明度的初始衰减量;
基于上述初始衰减量,对上述毛发面片的不透明度进行衰减处理。
其中,前一毛发面片的不透明度的初始衰减量小于后一毛发面片的不透明度的初始衰减量。初始衰减量以及相邻两次偏移后得到的毛发面片的不透明度的初始衰减量的差值均可以由制作人员自行设置,例如,随着偏移次数的不断增多,偏移后得到的毛发面片的初始衰减量也越来越大,相邻两次偏移后得到的毛发面片的不透明度的初始衰减量可以相差一个固定数值。
例如,在对毛发面片进行偏移处理后,可以对每个毛发面片进行逐像素渲染,在进行渲染时,可以确定每个毛发面片的不透明的初始衰减量,按照这个初始衰减量,沿毛发面片的径向向外的方向,对每个像素进行渲染,比如,可以根据初始衰减量,确定当前像素的毛发面片的不透明度的衰减量,进而确定和设置当前像素的透明度值,使得每个毛发面片从中心点向外呈现出透明度越来越高的趋势。
本示例性实施方式中,可以在将毛发面片的顶点按照预设偏移值偏移预设偏移次数,即得到偏移后的所有毛发面片之后,对每一片毛发面片进行不透明度衰减处理,或者,也可以在一次偏移后,对此次偏移得到的毛发面片进行不透明度衰减处理,在这种情况下,每一片毛发面片会经历两个阶段,即顶点偏移和透明度衰减处理,当衰减处理的单位为像素时,也可以称为一次顶点渲染,一次像素渲染。此外,在确定毛发的扩展范围时,可以将毛发面片的顶点色作为遮罩图,来控制毛发的生长范围,即哪里有毛发,哪有没有毛发。
进一步的,为了提高计算毛发面片的透明度的效率,在一种可选的实施方式中,可以通过以下公式计算每次偏移后得到的毛发面片的透明度:
Alpha=(Noise*2-(Fur_offset*Fur_offset+(Fur_offset*Furmask*5)))*Timing+FurOpacity
其中,Alpha为第i次偏移后得到的毛发面片的透明度,Noise为噪声贴图的R通道的值,Fur_offset为第i次偏移后得到的毛发面片的分层控制量,其取值范围为[0,1],Fur_mask为遮罩的可控变量,可以用于控制毛发的生长范围,即确定哪里有毛发,哪里没有毛发,Timing为一可控变量,FurOpacity为另一可控变量,可以用于优化毛发模型的显示效果。本示例性实施方式中,可控变量Timing和FurOpacity的取值范围一般均可以设置为[0,1]。
通过上述方法,可以快速计算每次偏移后得到的毛发面片的透明度,提高生成毛发模型的效率。
更进一步的,在一种可选的实施方式中,在沿毛发面片的法线方向对毛发面片的顶点进行偏移时,还可以执行以下方法:
根据偏移后得到的毛发面片的偏移顺序,确定偏移后得到的毛发面片在预设外力方向上的偏移值;
控制偏移后得到的毛发面片沿预设外力方向偏移上述偏移值。
其中,预设外力方向可以包括预设重力方向和/或预设风力方向,可以由制作人员预先配置。
为了增强毛发模型的真实感,营造出毛发向某个方向飘扬的视觉效果,可以按照偏移后得到的毛发面片的偏移次数,确定偏移后得到的毛发面片在预设外力方向上的偏移值,例如,可以根据偏移顺序,确定每次偏移后得到的毛发面片在预设重力方向或预设风力方向上的偏移值,从而控制每次偏移后得到的毛发面片沿预设重力方向或预设风力方向偏移一定量,即上述偏移值。由此,毛发模型从根部到顶端呈现出不断向某个方向偏移的特征。
例如,可以按照毛发面片的偏移顺序,对第一次偏移后得到的毛发面片向预设重力方向或预设风力方向偏移0.1,对第二次偏移后得到的毛发面片向预设重力方向或预设风力方向偏移0.2,对第三次偏移后得到的毛发面片向预设重力方向或预设风力方向偏移0.3……直至处理完所有的毛发面片。参考图6A所示,未进行外力偏移时,毛发从根部到顶端成直线延伸,在进行外力偏移后,如图6B所示,毛发从根部到顶端呈现出不断向某一方向偏移的视觉效果。图7示出了本示例性实施方式中一种初始毛发模型的示意图,可以看出,对整个初始毛发模型而言,越靠近外侧的毛发,向重力方向或风力方向偏移的幅度越大。通过这种方法,可以增强毛发模型的真实感,提高毛发模型的视觉效果。
步骤S130.根据初始毛发模型的法线贴图,控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸。
其中,初始毛发模型的法线贴图是指在初始毛发模型的表面的每个点均作法线,并通过RGB(一种颜色通道)颜色通道来标记法线的方向。
由于法线贴图可以表示初始毛发模型表面的纹理,且作为凹凸纹理的扩展,法线贴图可以使每个平面的各个像素拥有高度值,包含更为丰富的表面细节信息。因此,可以通过映射烘焙出初始毛发模型的法线贴图,将法线贴图贴在初始毛发模型的法线贴图通道上,来控制初始毛发模型的生成方向沿法线贴图对应的法线方向延伸。
具体的,在一种可选的实施方式中,步骤S130可以通过以下方法实现:
获取初始毛发模型的顶点法线;
将顶点法线替换为初始毛发模型的法线贴图,以控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸。
初始毛发模型的顶点法线是过顶点的一个矢量,可以在光照计算时,在多面体的表面获得一种平滑的效果。通过使用初始毛发模型的法线贴图替换原有的顶点法线,来控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸,可以使初始毛发模型具有平滑的表面纹理,避免出现畸变。图8A和图8B分别示出了本示例性实施方式一种畸变矫正前后的毛发模型的示意图,如图8A所示,采用顶点法线作为毛发的生长方向的初始毛发模型产生了较大程度的畸变,而参考图8B所示,采用法线贴图替换原有顶点法线后的初始毛发模型呈现出正确的毛发结构。
通过上述方法,可以采用法线贴图替换原有的初始毛发模型的顶点法线,可以解决初始毛发模型的畸变问题,并且相比顶点法线,通过使用法线贴图可以使初始毛发模型呈现出平滑的效果,视觉显示效果更佳。
步骤S140.基于初始毛发模型的漫反射贴图,对初始毛发模型进行渲染,生成目标毛发模型。
其中,漫反射贴图(Diffuse Map)可以表现出初始毛发模型表面的颜色和反射情况,也就是说,漫反射贴图可以表现出初始毛发模型被光照射到而显示出的颜色和强度。
在进行渲染时,可以依据初始毛发模型的漫反射贴图,对初始毛发模型进行渲染,如可以对初始毛发模型进行着色或添加光照等,来生成目标毛发模型。
在一种可选的实施方式中,步骤S140可以通过以下方法实现:
通过漫反射贴图设置初始毛发模型的基础颜色;
依据初始毛发模型的基础颜色,计算初始毛发模型的调整颜色,按照调整颜色对初始毛发模型进行渲染,以生成目标毛发模型。
其中,基础颜色是指初始毛发模型的基本颜色,调整颜色可以包括由环境光、轮廓光和太阳光等照射条件下的毛发颜色。本示例性实施方式中,可以依据初始毛发模型的UV展开结果,渲染初始毛发模型的基础颜色,进一步的,为了增强初始毛发模型的颜色效果和光照效果等,可以依据初始毛发模型的基础颜色,计算调整颜色,并按照该调整颜色对初始毛发模型进行渲染,来生成目标毛发模型。例如,参考图9所示,相比如图7所示的未着色前的初始毛发模型,进行基础着色处理后毛发模型呈现如图9所示的视觉效果。
进一步的,在一种可选的实施方式中,可以通过以下公式计算初始毛发模型的调整颜色:
Cpara=Cbase*CT
C=Cpara*Csun+Cenv
其中,C为初始毛发模型的调整颜色,Cpara为计算初始毛发模型的调整颜色的中间参数,Cbase为初始毛发模型的基础颜色,CT为初始毛发模型的染色,Csun为太阳光,Cenv为环境光。
具体的,在对初始毛发模型进行基础着色之后,可以计算初始毛发模型的调整颜色,并对基础着色后的毛发模型进行再次渲染着色,得到如图10所示的毛发模型,即目标毛发模型。可以看出,相比基础着色后的毛发模型,目标毛发模型具有更丰富的明暗细节和颜色效果。
通过上述方法,可以改善初始毛发模型的根部的亮度,使得在保证毛发模型的层次感和立体感的基础上,具有更好的视觉效果,尤其是针对浅色毛发,能显著改善毛发暗部太深的问题。例如,图11A示出了未进行调整颜色着色处理的目标毛发模型的示意图,图11B示出了进行调整颜色着色处理后的目标毛发模型的示意图,可以看出,相比图11A中的目标毛发模型,图11B中的目标毛发模型通过进行调整颜色着色处理,明显改善了毛发模型的根部过暗的问题。
综上,根据本示例性实施方式中的毛发模型的生成方法,可以沿获取的毛发面片的法线方向对毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,将透明度处理后得到的多个毛发面片进行叠加,以生成初始毛发模型,根据初始毛发模型的法线贴图,控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸,并基于初始毛发模型的漫反射贴图,对初始毛发模型进行渲染,生成目标毛发模型。一方面,通过对毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,以及将透明度处理后的多个毛发面片进行叠加,生成初始毛发模型,不需要制作人员人工绘制毛发,能够极大地提高制作毛发模型的效率,尤其是在制作复杂的三维虚拟对象时,能够生成高度精细的毛发模型;另一方面,通过根据初始毛发模型的法线贴图控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸,能够实现毛发方向的精准控制,避免毛发模型发生畸变。
本示例性实施方式还提供了一种毛发模型的生成装置,参考图12所示,毛发模型的生成装置1200可以包括:获取模块1210,可以用于获取预设数量的毛发面片;偏移模块1220,可以用于沿毛发面片的法线方向对毛发面片的顶点进行偏移,并对偏移后得到的毛发面片进行透明度处理,将透明度处理后得到的多个毛发面片进行叠加,以生成初始毛发模型;控制模块1230,可以用于根据初始毛发模型的法线贴图,控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸;渲染模块1240,可以用于基于初始毛发模型的漫反射贴图,对初始毛发模型进行渲染,生成目标毛发模型。
在本公开的一种示例性实施方式中,获取模块1210可以用于获取噪声贴图,噪声贴图包括多个噪点,多个噪点可以用于表示毛发的分布区域,对噪声贴图进行复制,直至达到预设复制次数,以得到预设数量的毛发面片。
在本公开的一种示例性实施方式中,偏移模块1220可以用于沿毛发面片的法线方向,将毛发面片的顶点按照预设偏移值进行偏移,直至达到预设偏移次数,对于偏移后得到的每一片毛发面片,按照毛发面片的偏移顺序,沿毛发面片的预设方向对毛发面片的不透明度进行衰减处理,其中,前一毛发面片的不透明度的衰减量小于后一毛发面片的不透明度的衰减量,预设方向为沿毛发面片的径向向外的方向。
在本公开的一种示例性实施方式中,在按照毛发面片的偏移顺序,沿毛发面片的预设方向对毛发面片的不透明度进行衰减处理时,偏移模块1220还可以用于按照毛发面片的偏移顺序,确定毛发面片的不透明度的初始衰减量,其中,前一毛发面片的不透明度的初始衰减量小于后一毛发面片的不透明度的初始衰减量,基于初始衰减量,对毛发面片的不透明度进行衰减处理。
在本公开的一种示例性实施方式中,偏移模块1220还可以用于通过以下公式计算每次偏移后得到的毛发面片的透明度:
Alpha=(Noise*2-(Fur_offset*Fur_offset+(Fur_offset*Furmask*5)))*Timing+FurOpacity
其中,Alpha为第i次偏移后得到的毛发面片的透明度,Noise为噪声贴图的R通道的值,Fur_offset为第i次偏移后得到的毛发面片的分层控制量,Fur_mask为遮罩的可控变量,Timing为一可控变量,FurOpacity为另一可控变量。
在本公开的一种示例性实施方式中,在沿毛发面片的法线方向对毛发面片的顶点进行偏移时,偏移模块1220还可以用于根据偏移后得到的毛发面片的偏移顺序,确定偏移后得到的毛发面片在预设外力方向上的偏移值,预设外力方向包括预设重力方向和/或预设风力方向,控制偏移后得到的毛发面片沿预设外力方向偏移上述偏移值。
在本公开的一种示例性实施方式中,控制模块1230可以用于获取初始毛发模型的顶点法线,将顶点法线替换为初始毛发模型的法线贴图,以控制初始毛发模型的生长方向沿法线贴图对应的法线方向延伸。
在本公开的一种示例性实施方式中,渲染模块1240可以用于通过漫反射贴图设置初始毛发模型的基础颜色,依据初始毛发模型的基础颜色,计算初始毛发模型的调整颜色,按照调整颜色对初始毛发模型进行渲染,以生成目标毛发模型。
在本公开的一种示例性实施方式中,渲染模块1240还可以用于通过以下公式计算初始毛发模型的调整颜色:
Cpara=Cbase*CT
C=Cpara*Csun+Cenv
其中,C为初始毛发模型的调整颜色,Cpara为计算初始毛发模型的调整颜色的中间参数,Cbase为初始毛发模型的基础颜色,CT为初始毛发模型的染色,Csun为太阳光,Cenv为环境光。
上述装置中各模块的具体细节在方法部分实施方式中已经详细说明,未披露的方案细节内容可以参见方法部分的实施方式内容,因而不再赘述。
所属技术领域的技术人员能够理解,本公开的各个方面可以实现为系统、方法或程序产品。因此,本公开的各个方面可以具体实现为以下形式,即:完全的硬件实施方式、完全的软件实施方式(包括固件、微代码等),或硬件和软件方面结合的实施方式,这里可以统称为“电路”、“模块”或“系统”。
本公开的示例性实施方式还提供了一种计算机可读存储介质,其上存储有能够实现本说明书上述方法的程序产品。在一些可能的实施方式中,本公开的各个方面还可以实现为一种程序产品的形式,其包括程序代码,当程序产品在终端设备上运行时,程序代码用于使终端设备执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。
参考图13所示,描述了根据本公开的示例性实施方式的用于实现上述方法的程序产品1300,其可以采用便携式紧凑盘只读存储器(CD-ROM)并包括程序代码,并可以在终端设备,例如个人电脑上运行。然而,本公开的程序产品不限于此,在本文件中,可读存储介质可以是任何包含或存储程序的有形介质,该程序可以被指令执行系统、装置或者器件使用或者与其结合使用。
程序产品1300可以采用一个或多个可读介质的任意组合。可读介质可以是可读信号介质或者可读存储介质。可读存储介质例如可以为但不限于电、磁、光、电磁、红外线、或半导体的系统、装置或器件,或者任意以上的组合。可读存储介质的更具体的例子(非穷举的列表)包括:具有一个或多个导线的电连接、便携式盘、硬盘、随机存取存储器(RAM)、只读存储器(ROM)、可擦式可编程只读存储器(EPROM或闪存)、光纤、便携式紧凑盘只读存储器(CD-ROM)、光存储器件、磁存储器件、或者上述的任意合适的组合。
计算机可读信号介质可以包括在基带中或者作为载波一部分传播的数据信号,其中承载了可读程序代码。这种传播的数据信号可以采用多种形式,包括但不限于电磁信号、光信号或上述的任意合适的组合。可读信号介质还可以是可读存储介质以外的任何可读介质,该可读介质可以发送、传播或者传输用于由指令执行系统、装置或者器件使用或者与其结合使用的程序。
可读介质上包含的程序代码可以用任何适当的介质传输,包括但不限于无线、有线、光缆、RF等等,或者上述的任意合适的组合。
可以以一种或多种程序设计语言的任意组合来编写用于执行本公开操作的程序代码,程序设计语言包括面向对象的程序设计语言—诸如Java、C++等,还包括常规的过程式程序设计语言—诸如“C”语言或类似的程序设计语言。程序代码可以完全地在用户计算设备上执行、部分地在用户设备上执行、作为一个独立的软件包执行、部分在用户计算设备上部分在远程计算设备上执行、或者完全在远程计算设备或服务器上执行。在涉及远程计算设备的情形中,远程计算设备可以通过任意种类的网络,包括局域网(LAN)或广域网(WAN),连接到用户计算设备,或者,可以连接到外部计算设备(例如利用因特网服务提供商来通过因特网连接)。
本公开的示例性实施方式还提供了一种能够实现上述方法的电子设备。下面参照图14来描述根据本公开的这种示例性实施方式的电子设备1400。图14显示的电子设备1400仅仅是一个示例,不应对本公开实施方式的功能和使用范围带来任何限制。
如图14所示,电子设备1400可以以通用计算设备的形式表现。电子设备1400的组件可以包括但不限于:上述至少一个处理单元1410、上述至少一个存储单元1420、连接不同系统组件(包括存储单元1420和处理单元1410)的总线1430和显示单元1440。
其中,存储单元1420存储有程序代码,程序代码可以被处理单元1410执行,使得处理单元1410执行本说明书上述“示例性方法”部分中描述的根据本公开各种示例性实施方式的步骤。例如,处理单元1410可以执行图1和图4所示的方法步骤等。
存储单元1420可以包括易失性存储单元形式的可读介质,例如随机存取存储单元(RAM)1421和/或高速缓存存储单元1422,还可以进一步包括只读存储单元(ROM)1423。
存储单元1420还可以包括具有一组(至少一个)程序模块1425的程序/实用工具1424,这样的程序模块1425包括但不限于:操作系统、一个或者多个应用程序、其它程序模块以及程序数据,这些示例中的每一个或某种组合中可能包括网络环境的实现。
总线1430可以为表示几类总线结构中的一种或多种,包括存储单元总线或者存储单元控制器、外围总线、图形加速端口、处理单元或者使用多种总线结构中的任意总线结构的局域总线。
电子设备1400也可以与一个或多个外部设备1500(例如键盘、指向设备、蓝牙设备等)通信,还可与一个或者多个使得用户能与该电子设备1400交互的设备通信,和/或与使得该电子设备1400能与一个或多个其它计算设备进行通信的任何设备(例如路由器、调制解调器等等)通信。这种通信可以通过输入/输出(I/O)接口1450进行。并且,电子设备1400还可以通过网络适配器1460与一个或者多个网络(例如局域网(LAN),广域网(WAN)和/或公共网络,例如因特网)通信。如图所示,网络适配器1460通过总线1430与电子设备1400的其它模块通信。应当明白,尽管图中未示出,可以结合电子设备1400使用其它硬件和/或软件模块,包括但不限于:微代码、设备驱动器、冗余处理单元、外部磁盘驱动阵列、RAID系统、磁带驱动器以及数据备份存储系统等。
应当注意,尽管在上文详细描述中提及了用于动作执行的设备的若干模块或者单元,但是这种划分并非强制性的。实际上,根据本公开的示例性实施方式,上文描述的两个或更多模块或者单元的特征和功能可以在一个模块或者单元中具体化。反之,上文描述的一个模块或者单元的特征和功能可以进一步划分为由多个模块或者单元来具体化。
此外,上述附图仅是根据本公开示例性实施方式的方法所包括的处理的示意性说明,而不是限制目的。易于理解,上述附图所示的处理并不表明或限制这些处理的时间顺序。另外,也易于理解,这些处理可以是例如在多个模块中同步或异步执行的。
通过以上的实施方式的描述,本领域的技术人员易于理解,这里描述的示例性实施方式可以通过软件实现,也可以通过软件结合必要的硬件的方式来实现。因此,根据本公开示例性实施方式的技术方案可以以软件产品的形式体现出来,该软件产品可以存储在一个非易失性存储介质(可以是CD-ROM,U盘,移动硬盘等)中或网络上,包括若干指令以使得一台计算设备(可以是个人计算机、服务器、终端装置、或者网络设备等)执行根据本公开示例性实施方式的方法。
本领域技术人员在考虑说明书及实践这里公开的发明后,将容易想到本公开的其他实施方式。本申请旨在涵盖本公开的任何变型、用途或者适应性变化,这些变型、用途或者适应性变化遵循本公开的一般性原理并包括本公开未公开的本技术领域中的公知常识或惯用技术手段。说明书和实施方式仅被视为示例性的,本公开的真正范围和精神由权利要求指出。