1、发型设计(图文)直线网 以 计算机绘图(Cg)设计的 3D头发并不件容易的事,大多数人所使用的方法就是以对象表面(geometry surface)搭配材质贴图(texture mapping)的设计方式。但这种方法有其缺点使得设计上易产生困难点。首先要设定头发的外观就必须重绘材质贴图,并且控制每个区段头发对象排列的形成 样式。而为什么要使用 Maya Paint Effects(简称 PFX)?PFX 很适合用在头发的产生,它让你更容易控制形成头发的精确方式而完全不需用到材质(包括 Color与Alpha部份的 材质贴图),因而大大减少花费在头发制作上的时间成本。另一个好处是可以随时改变头发
2、的造型并立即得知完成的结果。此外,在着色上(render)比较快 速而且内存负担大大地降低。如图这个头发只要用 30秒的时间来着色(以1Ghz的机器着色来算),但我听说在 Final Fantasy影片制作上共花了好几天,用了好几部机器,同时又有多少人投入。当然这个头发是不能跟 FF的人物头发来比,我的重点主要是说明利用 PFX不 仅执行效能较佳而且也更有效率。当然使用 PFX也有其不便之处,例如 PFX无法直接支持碰撞侦测(collision detection),因此如果要制作头发及头部与衣物之间的互动,那么还是要花一点心思,而通常都要靠 Maya Cloth来完成。setup【基本设定】
3、首先决定好在人物头上要搭配那一种造型的头发,以免之后又要忙于应付不断修改的繁复过程。如果所要的发型不是长在你自己的头上,那么最好用一张相片或草 稿做为参考的底图。一旦决定好造型之后就开始设计吧!我们要让头发的表面用 Make Live活化,然后在头顶上方画出曲线。如果用的是细分表面(Subdiv Surface)那么就请先转换成多面体(poly)然后用 Make Live活化。选定头部后,Modify-Make Live,Create-CV Curve Tool,从头的后方中间开始再到前面。这个曲线决定了头发中分与开始长出的分界线,参考图中所需的曲线长度。接着以 EditCurves-Rebu
4、ild Curve 重制成 Uniform,然后用 9 Spans与 Degree 3的参数。记得打开曲线的 Show CV 功能,在这个说明中要常常打开这个功能。不妨指定成一个 Hotkey,如 Ctrl-Alt-V,并将曲线更名为 hair_split_curve01。现在选择这个曲线,以 Duplicate复制,将此第二曲线更名为hair_split_curve02,然后将两条曲线稍微区分开来使头发的中间线位 于这两曲线之间,同时在这两条 hair_split曲线的前方再画出一个小的曲线使其结合在一起,用 2 spans应该就可以了不需要太精确。将三条曲线拉低一些然后缩小使其插入头骨内而
5、不是浮在头顶上方,我们的头发就是从这三个曲线开始成长,因此如果头发 偏右或其它方向的话,那么也要跟着在该处设定hair_split曲线。精确。将三条曲线拉低一些然后缩小使其插入头骨内而不是浮在头顶上方,我们的头发 就是从这三个曲线开始成长,因此如果头发偏右或其它方向的话,那么也要跟着在该处设定 hair_split曲线。hair control curves【头发控制曲线的设计】接下来就要画出与头发生长走向(flow)类似的一组曲线。选择头部,Make Live-CV Curve Tool,开始将第一个定点贴附(snap)在hair_split_curve01曲线的前方。然后在头部的侧边(即左
6、边)再加入 4到 6个 CV控制点。 CV 的数量应该尽可能少些但仍足以控制头发的造型为原则。一开始可以先用多一些的 CV之后再视需要删除多余的点以降低调整所花费的时间。接着用这个方法再 加入新的曲线并使每个曲线的起点贴附到hair_split_curve01曲线的 CV上。如此即可让主要的 hair_control_curve曲线得 以平均分置,且在用 PFX时得到最佳化的效果。如果 hair_split_curve01有 9个 spans,那么就需要在头的每一边都画上9到 11条 hair_control_curves 曲线。选择第一条 hair_control_curves曲线并移动其
7、CV到头部外使其不会与头部交叉。调整这条曲线上的 CV使其在这个部位形成头发的造 型(例如头的前方或侧边)。再来调整 hair_control_curves曲线上所有的 CV使其不会互相交叉并可形成头发的造型。这个步骤可以慢慢来, 如果你在最少的CV与曲线条件下让头发造型设计的越像,那么到时候以 PFX设计时就会更有效能。通常花上 30分钟也不为过,请参考附图的结果。完成微调之 后以 Group功能群组 hair_control_curves,然后再以 Duplicate功能复制到头的另一边。同样也调整一下使其造型有些独特性以 便不会与另一边长得完全相同。接着以相同的 front hair_s
8、plit_curve方法画出曲线使前面也有些控制曲线,3 条曲线应该就够了,但确定这些曲线在左右两边的 control_curves上产 生连续性。现在选择这个曲线,以 Duplicate复制,将此第二曲线更名为hair_split_curve02,然后将两条曲线稍 微区分开来使头发的中间线位于这两曲线之间,同时在这两条 hair_split曲线的前方再画出一个小的曲线使其结合在一起,用 2 spans应该就可以了不需要太精确。将三条曲线拉低一些然后缩小使其插入头骨内而不是浮在头顶上方,我们的头发就是从这三个曲线开始成长,因此如果头发 偏右或其它方向的话,那么也要跟着在该处设定hair_spl
9、it曲线。Power of Pfx【PFX 的魔法】现在总算要开始长出头发了!打开 Visor部份(Window -General Editors- Visor)然后打开/brushes/hair/档案夹,选择一个与所要设计的发型最接近的 Hair Brush样式。选择 hairRed1.mel的发型(确定是选定状态)。我们要开始以这个笔刷画出头发,选择 hair_split_curve01,再 选定 Paint-Effects-Curve Utilities-Attach Brush to Curves,如此可以让hairRed1.mel笔刷连接到由 hair_split_curve01产生
10、的新笔触上,并让头发从这个曲线开始成长。这时 会有两个对象产生-笔刷(brush)与笔触(stroke)而且重迭在 hair_split_curve因此看不到。如果头发看起来像闪电也不用耽心。 将新笔触在 Outliner窗口更名为 hair_side_ stroke01,而新的笔刷为 hair_side_brush。如果在 Outliner窗口选取笔触时就会打开Attribute Editor,切到 Brush Tab可以看到好多参数滑板(sliders),这些都分类整理好了因此方便找到所要的项目。必要时 要跟据头部的大小来调整 Global Scale,在此用的是 0.150,但这是因为这
11、个人物只有 8cm高。因此你可以视需要调整这个参数,例如人物如果有 160cm高,那么 Global Scale用 3应该就适合。打开 Open Brush Profiles然后注意看 Brush Width,这是决定头发自 hair_split _curves长出时的宽度,在此设定为 0.8,但不要设得太低否则头发会看起来过于平板。其它的参数都不需更动。在 Outliner 选择 hair_side_stroke01,然后以 Shift键复选头部两边所有的 main_control_curves,以 Paint Effects-Curve Utilities-Set Stroke Contr
12、ol Curves功能。这时头发应该稍微顺着头发的形状,打开hair_side_brush的 Attributes ,然后打开 Tubes|Behavior|Force Tab,设CurveFollow = 1,这时所有的头发应该完全顺着 main_control_curves的曲线,因此你现在可以藉由调整 main_control_curves来控制头 发的走向(flow)。设 Length Flex =1,这会让头发的长度拉长并使其与 main_ control_curves一样长。接着以 hair_side_stroke01.shapeNode,设 Display Quality为 10
13、左右以便让更新速度较快一些。现在测试一次着色效果,确定 Camera的背景是白色的以便头发看得较清楚。别耽心是否长得跟你所想要 的是不是一样,只要长得接近就算成功。Tweaking PFX【PFX 的调整】这个部份会花较多的时间来细部调整以使头发更贴近完美。首先再从头发的侧边开始。由于窗口内的头发不完全会反应出设定的结果,因此一边要随时进行着色测 试得知实际情形,建议用 320 * 240的预窗口大小即可以节省 PFX的着色时间,而且除了头发的笔触之外其它对象都要隐藏起来。打开hair_side_brush 的 Tubes|Creation Tab设为 Tubes Per Step,这样可以明
14、显地影响 PFX的着色速度与头发所需的数量,大约设定为 25就够了。接着设Length Min = 7,Length Max = 10。 如果要更长的头发那就设 Length Min值高些甚至与 Length Max值一样。接着设 Tube Width1 = 0.3,Tube Width2 = 0.1,Width2 是发稍部份,因此如果要尖一点的写实效果,那么就用较低的Width1与 Width2值。但 tubes per Step 要设高一些以使头发较薄,这是因为这种头发的数量不够。调整 Segment = 64,这个值要越小越好,但仍要让头发较为平滑为原则,当然数量也一定会影响着色的时间。
15、同时也将 simplify Method 设为 Tubes Per Step以便加速窗口更新速度但又不失细节。在测试着色一次之可得到与图中大致相同的结果。多试几次以了解每个设定的作用,如果不确定滑板会用何作用,分别测试看看其效果,也试试将值设超过范围之后再测试效果如何。 shading and texturing【材质属性设定】选定 hair_side_brush之后打开 Shading|tube shading Tab,将 Color1改为发根的颜色而 Color2为发稍的颜色,或者用内定的黑与暗红色也可以。设Transparency1为 黑,Transparency2 为灰以得到较柔软的效
16、果,也可像我一样用黑色以得到较尖的效果。设 Fade = 0.2,如果要让发稍较柔软就设高一些,多测试着色几次以得到想要的结果。接下来材质部份可让头发看起来更为写实,如果不设材质那么就比较像是卡通的效 果,有时不设材质的效果也不错,有材质会比较写实并不表示每一次都得使用材质来设定,完全视人物的需要来决定是否使用。开始进行材质的 设定,选定前一个笔刷后打开 Shading|Tubes Shading|Texturing。选择 Map Color,设 Texcolorscale = 0,这可让你使用材质上的所有色系。设 Texture Type = File,Map Method = Tube3D
17、,并将TexColor1与 TexColor2 都设为白色以取自材质上的色系。接着在 Image Name部份加载一个材质档,请选用自己的材质样本,材质上的随意效果(random)越多其 Pattern效果也就越好。我的做法是用同一个 hairRed1.mel 笔刷来画在窗口的 2D画布上,画出几条垂直线然后再到 Photoshop放大并修饰。如果头发的宽度还要更少那么就设头发材质, 好像将发根放大一样。如果材质显示不出来那么有可能是你将宽度设得太薄而材质分辨率又太高。completing the whole hair【完成整个头发造型】现在你需要将笔刷作用在右边与前面的头发笔触上。选择hai
18、r_side_stroke01,再以 PaintEffects-Get Settigns from Selected Stroke,这样可以取得刚刚设定的内容;接着选择 hair_split_curve02,再以PaintEffects-Curve Utilities-Attach Brush to Curves,选定笔触并以Shift键复选两边所有的 control_curves曲线,如同前面一样再以 PaintEffects-Curve Utilities- Set Stroke Control Curves。我们现在有两个笔刷可以控制头发的外观,一个是左一个是右。如果你希望只用一个笔刷就
19、能控制所有的头发造型那么以下列的步骤进行:选取 new_stroke并以 Shift键复选 hair_side_stroke01,以PaintEffects-Share One Brush可以让你一个笔刷(hair_side_brush)控制两个头发笔触。而头发的前面部份,我们打算用分开的笔刷来进行使之后得以最佳化。选择原来的 front_hair_split_curve曲线,这主要是让右边再长出头发出来,但不要再共享同一个笔刷。将此新的笔触更名为 stroke to hair_front_stoke。注意 Hypergraph窗口内的联结情形(如果你的头发设计是两边不同时,那么必须使用不同的
20、笔刷,只要将原笔刷设 定内容转移到新的笔刷即可开始进)。如果要使用材质的话那么前面的头发也要使用不一样的材质才行。Optimizing your hair【头发的最佳化】到此为止头发的前半部看起来还不是很对劲而且侧边的头发也缺少份量(volume)。接着要让头发的两个笔刷都进行最佳化以使其不仅着色时较快速,同时 也较有份量。你不需要使用一大堆 Tubes Per Step来产生较有份量的效果。只要选择 hair_front_brush,打开 Attribute Editor,设 tubes-PerStep = 10,由于前面的头发较少因此可试着降低这个值,其重点是用较高的 width1值使其不
21、致于代表每一根头发,而是一束头发,你也可以让每根头发都具有材质 贴图。同时设 segments = 24,而如果头发仍然过于平滑时再设低一点的值。打开 Behavior|forces的 Tab,设 curveattract =-0.041,这会让头发自小小的控制点散开来,使头发不会紧靠在控制曲线上而过于密集地束在一起。选定hair_side_brush然后设定负的 curveAttract 值,例如在此是以-0.050 设定。现在的头发看起来应该很自然,为了避免过于随意,试试在 in the stroke.shape Node与 brush Node调整 Seed值与 tube Rand值。以
22、下是选项设定一般人类的头发在整体上是不会很均匀地成长,这是由于我们常常要剪头发的关系。例如有些前面的头发会比较散,而后面的头发一般会比较密,或者两边的头发 比后面的还密。因此我们不可能都以 tubesPerStep设定否则整个头发会过于密集。但我们可以利用 Pressure Curves来告诉 PFX那里的头发要较多。Pressure Curves 可以作用在许多其它的参数上以达到你所想要的头发造型。你可以利用 Wacom数字笔来画并以既有的曲线来设计。选择 hair_side_stroke01,PaintEffects-CurveUtilities-Make Pressure Curves的
23、 Option,设 control points =10,Offset Scale = 0.05,这时在笔触旁边应该会多一个曲线,如果 Pressure Curves太远或太近那么就需要设一个不同的 Offset Scale值,如果要删除之,在 stroke.shapeNode打开pressure Mapping tab,以右键按 pressureMin3,deleteExpression,然后删除此 Pressure Curves。如果在靠近 near hair_side_stroke01取得一个不错的 Pressure Curve,那么打开 pressureMapping tab并设 pr
24、essureMapping1为 tubes Per Step,set pressure min1= 0.1,pressureMax1 = 1。关掉其它pressure-Mappings以避免不必要的结果。 接着要调整 pressureCurve上的 CV,将曲线中间的点移高一些。如果你看不到头发旁边密度的改变那么就改变 pressureMin1并更新。同 时将曲线两端的 CV拉低使后两端的密度较少。测试着色看看不同 CV位置的结果有何差异,使用相同的 Camera角度并使用 renderView下面的滑板 以便看到不同的情形。一旦满意后让 hair_side_stroke02产生一个 Pres
25、sure Curve。结论到目前已成功地设计一个头发造型。但有些细节在此并未提及,例如你可能会问为什么不能让头发产生动作,的确,在有了 control_curves set之后让这个头发加上动作是容易的事。你可以利用许多方法来带动hair_control_curves的动作,像是 mel/expression /softbodies/clothObjects对象。而碰撞侦测就较为麻烦,不过可用ClothObject的方法,你只要用已经设计好的 control curves 即可产生 cloth objects(tubes)。另一个要考虑的是打光的效果,有关强光与阴影在此并未提及,这是因为要在头发上具有较好的光影效果需要的不仅是 PFX的设 定,重要的是打光的技术,请使用者自行测试。而且不仅头发可用 PFX,其它类似的毛发效果也可以用 PFX来达成,重点是如何使用笔触与几个 control_curves来产生头发所需的效果,剩下就靠 PFX来完成。直线网