引子:一个“简单”的需求

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

Maya XGen毛发系统角色造型实战:从需求分析到交付的全流程复盘 - 配图1
Maya XGen毛发系统角色造型实战:从需求分析到交付的全流程复盘

第一阶段:需求分析与技术选型

接到需求后,我没有直接打开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。这个密度贴图我后面还会用来控制发丝的粗细和卷曲,一举三得。

Maya XGen毛发系统角色造型实战:从需求分析到交付的全流程复盘 - 配图2
Maya XGen毛发系统角色造型实战:从需求分析到交付的全流程复盘

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,颜色偏冷调,和暖色主光形成对比。

Maya XGen毛发系统角色造型实战:从需求分析到交付的全流程复盘 - 配图3
Maya XGen毛发系统角色造型实战:从需求分析到交付的全流程复盘

第三阶段:项目复盘与交付

项目最终按时交付,但过程中我们砍掉了两个镜头(远景的头发动态用后期合成替代了)。复盘下来,最大的教训是:毛发制作必须前置。原来的排期是建模→绑定→动画→特效→毛发,但毛发其实应该在绑定阶段就介入,因为绑定会影响头皮的形变,进而影响发根位置。如果等动画做完了再弄毛发,一旦绑定修改,毛发就要重做。

另一个教训是动态模拟的成本控制。我们花了太多时间在让头发“物理正确”上,其实对于动画片,视觉正确就够了。后来我们用了不少手工K帧来调整发丝运动,反而更高效。

关于火星人教育

这次项目复盘里涉及的很多经验和技巧,其实也是我们火星人教育在MAYA三维动画课程中反复强调的实战要点。火星人教育创办24年来,一直专注数字艺术与AIGC实战职业技能培训,课程涵盖AI漫剧创作、AIGC视觉设计、UE5游戏特效、室内全屋定制、MAYA三维动画、C4D动态设计、工业设计、NUKE影视后期、摄影摄像实训等。我们采用项目化实训教学,让你在真实项目中掌握技能,而不是光讲理论。目前在北京、深圳双校区开设线下面授班,面向美术生、在校大学生及意向转行的职场人群,如果你也想在CG领域深耕,欢迎来实地考察。咨询电话:010-65918670。

声明:本站所有文章,如无特殊说明或标注,均为本站原创发布。任何个人或组织,在未征得本站同意时,禁止复制、盗用、采集、发布本站内容到任何网站、书籍等各类媒体平台。如若本站内容侵犯了原著者的合法权益,可联系我们进行处理。