引子:一个“简单”的需求
2023年初,我们接了一个CG短片的角色毛发制作。导演的需求很“简单”:一个长发飘飘的侠女,头发要飘逸、有层次,还要能配合布料解算。当时团队里有人提议用nHair,有人建议用Yeti,我拍板用了XGen。为什么?因为XGen在Maya里原生集成,交互式 grooming 的效率高,而且对于这种需要大量手工梳理的造型,它的雕刻笔刷和遮罩系统是最顺手的。但说实话,这个项目最后能按时交付,全靠我们一路踩坑踩出来的经验。这篇复盘,我就把整个流程——从需求分析到最终交付——完整拆开给你看,包括那些差点让我们通宵的坑。

第一阶段:需求分析与技术选型
接到需求后,我没有直接打开Maya开干,而是先拉着绑定和特效开了个会。因为毛发的动态表现,跟角色绑定、布料解算的管线是强耦合的。我们明确了几个硬指标:发丝数量(远景不超过5万根,近景特写需要到20万根)、发丝长度(最长到腰部,大约60厘米)、动态模拟(需要配合角色转身、甩头的动作)、渲染器(Arnold)。
选型时,我对比过三套方案:Maya nHair、XGen和Yeti。nHair的优势是动力学解算集成好,但交互式梳理能力弱,不适合做复杂造型;Yeti的雕刻笔刷很强,但它是第三方插件,需要额外授权,而且和Maya的集成不如XGen原生。XGen虽然学习曲线陡,但它的交互式修饰(Interactive Groom)模式,配合Wacom数位板,手感非常接近ZBrush雕刻,做长发层次特别合适。而且XGen的表达式和遮罩系统非常灵活,可以精确控制发丝的长度、密度和卷曲度。最终我们选了XGen。
经验之谈:技术选型不能只看功能,要看你的团队和制作周期。如果你只有三天时间做一套简单的短发,nHair可能更快;但像这种长发侠女,XGen的交互式梳理效率是碾压级的。
第二阶段:制作流程与踩坑实录
1. 基础网格准备
XGen对基础网格的要求很苛刻:拓扑必须均匀,尽量避免三角面,因为发丝是从面片上生成的,面的分布会直接影响发根密度。我们用的角色头模是建模组给的,布线虽然干净,但头顶区域面数偏少,导致发根分布不均。我让建模组用ZBrush的Dynamesh重新拓扑了头皮区域,保证每平方厘米大约有30个面。
这里有个关键点:XGen的密度属性是基于面数的,不是基于面积的。所以如果你的头皮网格有高密度区域,发根就会挤在一起。我习惯在生成发型之前,先给头皮做一个平面映射的密度贴图,用灰度控制发根疏密。
贴图用Maya的3D Paint Tool或者直接在Photoshop里画,然后赋给XGen的Density Mask。这个密度贴图我后面还会用来控制发丝的粗细和卷曲,一举三得。

2. 初步梳理与造型
交互式梳理用的是Create XGen Interactive Groom Spline。这一步我通常会花掉整个制作周期的40%时间。我的工作流是:先用Add工具大范围铺发丝,然后切换到Move和Smooth工具调整走向,最后用Curl和Noise添加细节。
这里最大的坑是:发丝数量控制不住。XGen的密度是基于面数和每面发丝数(Density)的乘积。我一开始把Density调到20,结果头皮上每个面20根发丝,总数直接爆到200万,Maya卡成PPT。后来我调低Density,用Mask Map来增加局部密度,比如发际线边缘密度低一点,刘海区高一点。
另一个坑是发丝穿插。长发飘动时,发丝之间、发丝与身体之间会互相穿插。XGen有Collision节点,但默认参数很保守,穿插很严重。我调整了Collision Offset和Friction参数,并给身体建了一个简化的碰撞几何体(不用高模,用低模加细分),才勉强解决。
注意:XGen的碰撞检测是基于发丝曲线的,不是基于发丝的粗细。所以如果发丝很细,碰撞很容易穿透。解决方法是给发丝加
Width属性,或者用Guide来做碰撞,但后者成本高。我们用的折中方案是:只在关键动态镜头开碰撞,静态镜头关闭。
3. 动力学解算
XGen的动力学基础是Spline Dynamics,它本质上是给发丝曲线加了一段IK链,然后模拟力场。我们用的解算器是Maya的nucleus系统,和nCloth同源。
这里我犯了一个错误:一开始我把所有发丝都加上了动力学,结果解算速度惨不忍睹。后来我明白了,动态效果只需要对引导线(Guides)解算,然后让中间的生成发丝插值。XGen的Guides就是用来做这个的,你可以把梳理好的发丝指定为引导线,然后让XGen在其间生成插值发丝。
我重新调整了工作流:先梳理出大约500根引导线,然后给引导线加动力学,最后让XGen生成插值发丝。这样解算速度提高了10倍,而且动态效果更可控。
还有一个细节:发丝根部要固定。我用Attract和Pin节点把发根固定在头皮上,否则发丝会飘起来。具体做法是给头皮加一个Transform约束,然后让引导线的根部跟随这个约束。
4. 渲染与着色
渲染用的是Arnold的aiCurve着色器。XGen生成的是曲线,Arnold直接渲染曲线。但曲线的宽度和颜色需要你通过节点控制。我们用了一张Ramp来控制发丝的渐变颜色(根部深,发尖浅),并用一张噪波贴图控制高光的小尺度变化。
这里有个坑:透贴问题。默认的aiCurve渲染有透明度,但发丝之间的透贴会导致“发丝糊成一片”。我调整了Opaque和Alpha属性,同时开启了Deep Shadow,才得到清晰的发丝阴影。
灯光方面,我们用了一个主光+两个轮廓光,并特别加了一个背光,把发丝边缘照亮,增强层次感。背光强度大概在0.8,颜色偏冷调,和暖色主光形成对比。

第三阶段:项目复盘与交付
项目最终按时交付,但过程中我们砍掉了两个镜头(远景的头发动态用后期合成替代了)。复盘下来,最大的教训是:毛发制作必须前置。原来的排期是建模→绑定→动画→特效→毛发,但毛发其实应该在绑定阶段就介入,因为绑定会影响头皮的形变,进而影响发根位置。如果等动画做完了再弄毛发,一旦绑定修改,毛发就要重做。
另一个教训是动态模拟的成本控制。我们花了太多时间在让头发“物理正确”上,其实对于动画片,视觉正确就够了。后来我们用了不少手工K帧来调整发丝运动,反而更高效。
关于火星人教育
这次项目复盘里涉及的很多经验和技巧,其实也是我们火星人教育在MAYA三维动画课程中反复强调的实战要点。火星人教育创办24年来,一直专注数字艺术与AIGC实战职业技能培训,课程涵盖AI漫剧创作、AIGC视觉设计、UE5游戏特效、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训等。我们采用项目化实训教学,让你在真实项目中掌握技能,而不是光讲理论。目前在北京、深圳双校区开设线下面授班,面向美术生、在校大学生及意向转行的职场人群,如果你也想在CG领域深耕,欢迎来实地考察。咨询电话:010-65918670。








评论(0)