当前位置:首页 >教程首页 > Maya >特约教程:Maya卡通角色2—头发绑定

特约教程:Maya卡通角色2—头发绑定

发布时间:2018-11-17 19:57:24

 

        作者博客:http://blog.163.com/shininglore@126/

        以下只是制作流程的简要介绍,不作为完整的教程使用,因为涉及步骤较多。尽管如此,文章中我所提供的一些技术点介绍,相信会对很多人有帮助。

 

 

        教程思路

 

 

        1.创建头发生长区域。

        2.创建头发系统。

        3.创建头发初始态。

        4.设置头发初始态。

        5.制作发型。

        6.头发初末状态的重要性。

        7.头发碰撞。

        8.头发动力学参数的设置。

        9.头发渲染细节的设置。

 

        使用maya制作动力学头发通常可使用以下几种方法:

        1.手动绘制NURBS曲线,将它转为头发动力学曲线,再赋予PE笔刷进行毛发渲染。
        2.直接在NURBS几何体(或UV平展的多边形几何体)上生成大量均匀分布的头发曲线,然后通过头发约束来制作发型。
        3.通过NURBS曲线生成NURBS曲面,然后赋予贴图;最后通过头发动力学曲线控制骨骼的方法,使NURBS曲面受到骨骼蒙皮的影响。因为贴图渲染速度比PE头发快很多,所以在制作一些短发效果时也常用此方法进行,尽管动力学精度不高。
        4.通过NURBS曲线生成NURBS曲面,然后在NURBS曲面上提取更多的曲线,利用模型历史以曲面控制曲线完成发型。这种方法不适合制作复杂的发型。
        其实方法1和方法2是差不多的,不同点在于:方法1是先定发型,后设置动力学属性;方法2则反过来。相对而言,方法1可有效的利用资源,但缺点就是调节曲线繁琐,且细节上可能很难满足镜头特写,尤其在制作飘逸的长发效果时。
        本例中采用的是方法2。


        【Hair系统的组成】

 

 

        Hair系统由头发动力学节点(hairSystem),毛囊节点(follicle),动力学输出曲线(hairSystemOutputCurves)构成,如果算上渲染部分,则还包含笔刷特效节点(pfxHair)。
        hairSystem节点是头发行为的总控制节点,除了头发的各种行为参数,包括新增力场也是以该节点作为对象进行。
        follicle毛囊,顾名思义,是头发生长的基部,除了可对单条动力学曲线进行额外控制,还记录着头发受到的约束或碰撞情况。
        hairSystemOutputCurves节点是动力学解算后的最终曲线形态,尽管maya的hair系统可以不包含初始态或结束态的曲线,但是我们应按规范至少完成初始态的建立,让输出曲线和follicle毛囊节点进行关联,方便控制。
        pfxHair是通过笔刷特效节点来完成头发的渲染,是maya特有的笔刷系统的一部分(paintEffect笔刷特效包含:植物笔刷,卡通线条,头发笔刷,生长笔刷,特效笔刷等),可通过调节特定功能下的笔触参数,实现丰富的效果渲染。
        hair操作规则:增加力场影响时,是选择头发的动力学解算节点进行;而创建约束,则是选择头发动力学曲线或者毛囊节点进行。#p#e#


        【Hair绑定步骤】


        1.创建头发生长区域

 

 

        将人物头部复制一份,圆滑后删除多余的部分,只留下头皮部分作为头发生成的区域;然后对提取的模型进行UV重展,确保它的UV无拉伸,并尽量利用UV坐标系的空间。
        使用几何体生成头发系统,需要注意:毛囊的分布和几何体的UV信息有关。因为NURBS的UV始终是0到1的方形(如果不是则对曲面UV进行重建),所以通常使用NURBS半球体生成毛发曲线是较为理想的。但问题也就在于NURBS编辑形体没多边形那么灵活,因此我选择多边形进行。

 

 

        2.创建头发系统

 

 

        选择模型执行:hair->CreateHair(选项:Output:NURBScurves;U Vcount20;Length:4;Passive fill:0。其他保持默认。)
        Maya中属性的数值和单位及比例都有密切的联系,默认的5表示头发长度5厘米,但那是1:1的“模型:实物”的比例;我这里使用的是1:10的比例,因此默认的5将表示50厘米的头发长度。因此,根据个人需要,我打算使用长度为40厘米以下的头发,所以修改为4。

 

 

        提示:
        创建大量头发时,应选择paintEffect的创建方式,因为它在场景中显示的速度是NURBS曲线的10倍。当确实需要对头发动力学曲线进行一些额外的操作,例如在曲线上吸附物体随头发进行运动或者模拟湿润头发滴水的时候,则选择后两种。


        3.创建头发初始态

 

        刚创建的头发默认是向四面八方伸展的,因此首先使用一个牛顿场,将大片头发吸引至后上方:选择毛发动力学节点,执行Fields->Newton。

 

 #p#e#

 

        4.设置头发初始态

 

        全选头发曲线,执行Hair->SetStartPosition->FromCurrent。
        如果是以PaintEffect的方式创建头发,则在outliner中选择毛囊组,然后执行Hair->SetStartPosition->FromCurrent。

 

 

        5.制作发型

 

        虽然没有头发插件ShaveAndHair那样的梳子工具,不过配合力场,maya提供的动力学约束功能在设置发型上功能也是很强大的,用的熟练的话并不比插件差多少。

 

 

        Transform变形约束是制作发型时最常用的约束方式,它除了可以将头发曲线进行位移,通过自身的旋转缩放还能影响头发的聚拢和发散。在制作动画时,该约束也常用于制作头 发受到物体作用的效果,如用手拨开头发。
        RubberBand是一种橡胶效果的约束:当控制器远离头发,头发就受到很强的拉力;控制器靠近头发,拉力就降低至零。通常这个约束很适合用来梳理头发制作平滑的发型,但在动力学效果中并不常用,因为它的拉力影响过于“柔顺平滑”(制作洗发露广告倒是不错……)。
        Stick效果和RubberBand类似,所不同的是它会在一定的距离内产生作用:当头发和约束控制器的距离大于初始距离,头发将被控制器吸引;当距离小于初始距离,头发将被控制器推开。制作发型时,可用它来打乱头发的聚拢。
        以上三种约束与头发曲线发生距离变化时,都会产生明显的拉力变化;而以下两种约束只在起始帧时定位曲线上约束点的位置,不会产生任何拉力。
        Hair to Hair用于头发之间的相互吸引,它的作用较为微弱,常用于头发块的定型,例如头发束使用丝带固定。
        HairBunch用于模拟头发间的自碰撞效果,计算速度要快于启用头发的自碰撞功能。并且,该功能可以在起始帧的时候推开叠加在一起的头发,这是其他约束没有的。

        无论是哪种约束,头发的初始态对它都是极其重要的,因为约束参数中有三种不同的点计算方式:Nearest是计算控制器到曲线的相对距离,曲线上的约束点位置会随着运动而不断变化;UParameter是忽略控制器方位,通过0到1的曲线U向方位来定位约束点;UDistance和UParameter差不多,它计算世界空间中曲线上点到约束之间的距离,可进行自定义(UD和UP最大的不同在于当对多条曲线进行控制点定位时,UD能在不同位置的曲线上产生不同的约束点,而UP会使所有曲线的CV点位于相同的距离比),同样的,这个方式是忽略控制器的方位的。但无论是哪个方式,曲线上的约束点都和CV点有关,只能在CV点上进行控制,并且计算只在起始帧时执行(除了HairBunch),动画开始后不会发生改变(即使对UP或UD设置动画帧也是没效果的,约束无法在动画开始后改变位置)。

 

#p#e#

 


        约束控制器用于定制发型并不是很复杂,你可以把自己想象为一个真正的发型美容师:通过一堆夹子,发卷,橡皮筋等工具(constraint),吹风筒(NewtonField),来固定头发样式(setStartPosition),最后再加些发胶定型(setRestPosition)。Maya是个艺术软件,很多东西是结合现实来进行的,所以我们不用太惧怕那些条条框框。

 

        6.头发初末状态的重要性

 

        头发制作过程中,初末状态的设置十分重要。 setStartPosition(设置起始位置)一般用于定发型前的不断尝试,最后都会和结束态保持一致;setRestPosition(设置结束位置)则是发型静止时的形态参考。很多时候,由于各种运动和动力学影响,头发会处于运动状态中,结束态对头发行为的影响较为微弱。头发(hair)系统的这个原理和maya柔体(softbody)很像:柔体是通过粒子对几何体的goal目标权重来实现结束态的维持,而hair则是通过动力学曲线参考结束态曲线的方式进行,相当于柔体的一个分支功能。在使用约束进行发型制作时,必须要在交互式动画播放的情况下进行,当达到所需效果,应立即停止动画,然后在当前状态setStartPosition,否则hair的状态将在第一帧时还原。同时,发生位移变化的约束将从当前位置开始,必须再次调整初始位置才能继续进行。

 

 

        我们可以使用Hair菜单下的一些工具对头发曲线进行调整。例如:ScaleTool可以调整头发的长度,但是要注意的是,一定要在起始帧的时候进行;如果是在解算过程中,可能会出现异常。
        另外,可以通过手动调节曲线的cv点,并使用Surfaces菜单下的EditCurves对头发的初始或末态曲线进行各种编辑;还可以使用变形器对大量头发进行定型,但要注意此时不能锁定曲线的长度(LockLength),否则将在去除变形器历史后曲线形态发生异常。
        如果需要对局部头发进行删除或者属性改变,还可以通过PaintHairFollicles(绘制头发毛囊)工具来完成。

 

        7.头发碰撞

 

 

 

 

        选择头发动力学曲线,执行Hair->CreateConstraint->CollideSphere,创建一个头发系统专用的碰撞球,模拟人物头部轮廓。此外,还需要多个碰撞球放置于角色的肩膀,胸部一带。要注意:虽然头发可以通过geoConnector节点和几何体进行直接碰撞(MakeCollide),但是很容易发生异常现象,所以要尽量使用ColllideSphere或者CollideCube来实现碰撞效果。Stiffness是碰撞球和碰撞方体最重要的设置参数,通常0.2至0.3左右即可(数值为0则不产生碰撞),过高数值会使头发发生一些异常的抖动。
        碰撞球可作为最初的头发定型用,虽然在细节上不够精确,但对于完成大体轮廓还是很有帮助的,所以制作发型时除了头发的各种约束,碰撞球和碰撞方体也是很重要的辅助工具。
        毛发对几何体的直接碰撞正如柔体曲线对刚体的碰撞,其反弹效果很难控制。

 

 

        8.头发动力学参数的设置

 

 

 

        此时再次涉及到场景比例和单位的问题。这点我除了有专门文章说明,在柔体,刚体以及布料系统的技术文章中也多次提到,由此可见,了解这些对maya的所有动力学特效是十分重要的。根据我自己惯用的标准比例1:10,这里要将头发系统节点Forces区块下的Gravity设置为9.8(默认的0.98是指在1:1的比例下的值),可直接得到较为真实的效果。当然,这是普遍的效果所用的参数值,某些特殊情况需要另作变更,当所处的环境是宇宙,水底,可根据表现效果的需要而变更。另外,头发的动力学行为,和曲线的段数也有很大的关系:段数越高,头发的运动就越柔顺,但这除了增加解算时间,效果上也不一定合理,因此要谨慎使用过高的头发段数。

 

#p#e#

 

        9.头发渲染细节的设置

 

        更改了力场,接着是头发笔刷的大小。人的头发丝在0.1mm左右(0.05mm-0.15mm),虽然maya不一定能按实际标准来完成这种精度的头发丝,但稍微研究下参数还是能得到很好的方案的。Brush节点是用于头发的渲染,但是头发的直径是由头发系统节点的HairWidth所控制。HairWidth默认值为0.01(厘米),也就是0.1mm,那么根据我的场景比例1:10,将HairWidth设为0.001即可。不过,这个数值达到了软件文本框可输入的最小值,无法再进行降低,因此我的做法是:保持HairWidth的默认值0.01不变,然后将Brush节点下的GlobalScale(全局缩放)参数设为原来的十分之一(将默认的5改为0.5)。于是,一个软件单位的头发丝诞生了。如果觉得还不够细,可以继续降低HairWidth的数值,但不应低于0.005(再低就是纳米纤维了)。

 

 

         Displacements区块下的SubClumping会生成很多聚拢的发簇,常用于制作头发淋湿的效果,但对通常头发并没有太大的作用,反而会减少头发细节。
        MultiStreaks(子头发)是在原有头发的基础上增加头发渲染的总数量。当设置为9,虽然数量上相当于HairPerClump数值为原来的10倍。不过因为MultiStreaks是在头发簇宽度的基础上生成,发丝的散布范围可超出ClumpWidth,细节更丰富;而HairPerClump是在ClumpWidth范围内的,如果头发宽度HairWidth*HairPerClump大于ClumpWidth,那就没什么意义了。因此,一般在设定好头发宽度和簇数量后,如需要增加头发密度,应该增加MultiStreaks的数值;而且相对而言,增加MultiStreaks的数量比增加HairPerClump渲染速度要快。当然,有时也需要适当的修改MultiStreakSpread1(头发宽度最大偏移)和MultiStreakSpread2(头发末梢最大偏移),因为当头发数量乘以头发宽度大于发簇宽度时,就没意义。
        开启LightEachHair后渲染效果会好很多,尤其在子头发数量很多,头发运动时影响到头发自身阴影效果的时候。不过同样的,渲染时间也就增加不少。
        尽管MultiStreaks在头发细节上不错,但是因为是简单的通过复制头发簇来完成,渲染效果并不尽如人意,因此一般都采用比较低的数值,如1。过多的话将造成头发高光效果的错乱。

 

 

        因此为了更好的表现头发质感,适当的控制hairPerClump和ClumpWidth才是最佳的方案。
        将笔刷Brush添加到头发进行渲染,可以得到更为丰富的效果。要注意,brush节点连接到pfx节点时,并不是所有的参数都有效,如笔刷的宽度和颜色,将被头发系统节点的头发宽度和发色所替换。而笔刷的高光属性则替代头发系统的高光设置(mentalRay会忽略),同时,头发系统节点下的MultiStreaks功能失效。

 

        10.PaintEffect和Brush的关系

 

        创建头发时选择PaintEffect的方式,和选择头发系统节点执行Hair->AssignPaintEffectBrush to Hair,效果上是不同的。前者仅仅是将曲线以笔刷的形式进行渲染,而后者则在头发系统中加入一个Brush笔触节点,提供了更为丰富的渲染效果(如果手动删除Brush节点,那么和创建头发时选择PaintEffect的方式是同样的效果)。

 

 #p#e#

 

        MayaSoftWare渲染PE特效时,是作为后期渲染的,只支持深度贴图阴影,无法渲染头发的反射;MentalRay渲染PE头发可支持反射和光线追踪成影,并且在使用光线追踪时效率很高,但MR渲染的头发相对较亮,且在头发细节上稍逊于software。使用MayaSoftware渲染时,开启Brush下的Illumination功能(默认是关闭的,MR渲染不需要开启,SW则需要),头发将得到高光照明的效果。关闭RealLight可以使用内置灯光照明,提高解算速度;而specular参数对头发高光的渲染效果没任何影响,取决定作用的仍然是头发系统节点下的specular。而且要注意的是,mentalRay将忽略Illumination区块下的所有功能。

 

 

        以下是不同设置的效果对比。

 

 

 #p#e#

 

 


        【总结】


        本质上,hair就是粒子动力学系统。它和柔体系统、内核布料系统有很多共通点,例如初始模型的保留,约束模拟碰撞,作用力的单位设置等。因此,要学习maya各个动力学模块,我们要了解的不是那些大量的固定参数,而是认识它们之间的共通点。Maya是个为艺术家而准备的软件,对此我是十分赞同的。

 

 

        下一篇将介绍【Maya】原创卡通角色制作流程3—表情、蒙皮和灯光篇 ,敬请期待……

 

 

学员作品赏析
  • 2101期学员李思庭作品

    2101期学员李思庭作品

  • 2104期学员林雪茹作品

    2104期学员林雪茹作品

  • 2107期学员赵凌作品

    2107期学员赵凌作品

  • 2107期学员赵燃作品

    2107期学员赵燃作品

  • 2106期学员徐正浩作品

    2106期学员徐正浩作品

  • 2106期学员弓莉作品

    2106期学员弓莉作品

  • 2105期学员白羽新作品

    2105期学员白羽新作品

  • 2107期学员王佳蕊作品

    2107期学员王佳蕊作品

专业问题咨询

你担心的问题,火星帮你解答
×

确定