李曙光
(安徽电子信息职业技术学院软件学院,安徽蚌埠 233030)
在纯三维动画电影、真人视觉特效电影、动画片、游戏宣传动画、影视广告、虚拟现实等项目中高质量的三维角色的制作运用了大量的毛发特效技术,如《怪物公司》《长发公主》《纳尼亚传奇》《冰河世纪》等影片都有高质量写实毛发的应用[1]。在三维动画生产流程中,毛发对写实角色形象的塑造至关重要,但由于毛发数量巨大、单根毛发又比较细小、结构复杂,使得毛发动画模拟及渲染非常耗费时间,制作难度较高。目前主流的毛发制作工具有:maya自带的nHair、Shave、FX Hair、Zbrush fibermesh、Yeti等。其中,maya自带的nHair就是PaintEffect,每一束头发都是独立的,nHair控制工具较少,适合制作长发以及动力学解算。Shave适合制作动物皮毛,动力学解算应用较为简单。FX Hair适合做长发和动力学解算。Zbrush fibermesh则适合做毛发的造型。
Yeti是与maya协作的一款强大的基于节点的制作毛发、羽毛以及草皮纤维等的插件,是目前各大影视特效工具制作毛发类特效的首选。Yeti已被开发为一个端到端的解决工具,可以方便地集成到大多数三维制作流程中,轻松有效地传输和渲染生成的数据,其独特的groom引导线的功能以及图表节点的实时控制技术为三维艺术家提供了创造的自由以及更高品质、更自然逼真的呈现。Yeti支持目前主流的四个高级渲染器,包括Pixars Renderman、3Delight、Chaos Groups Vray和Solid Angles Arnold。
在三维软件中制作毛发,一般首先在模型表面制作引导线,引导线的数量可以非常少,对引导线进行梳理编辑,使其符合毛发的自然生长形态,然后再把引导线的形态属性关联到可渲染的毛发本身的节点,通过引导线控制可渲染的毛发的分布位置、密度、长度、曲率等属性,然后经过数据转换,传递到渲染引擎,在引擎中对可渲染的毛发进行相关材质的设置以及数量倍增化的全局处理,最终满足符合三维艺术家对三维角色毛发设定的需求。三维毛发的生产流程如图1所示。
毛发建模首先让毛发依附在角色的模型表面,由模型定义毛发根部的位置并提供法线方向作为毛发初始的生长方向[2]。复杂毛发往往生长在角色模型的一个局部,传统的制作方法是把生成毛发的模型单独提取出来,但这种制作方式由于模型的低细分,生成的发际线不够平滑自然。而在Yeti中可以利用纹理贴图,精确地控制毛发的生长范围,甚至可以利用贴图控制毛发的生长形态。把三维模型UV展分好,然后使用3D Paint工具在模型上直接绘制,在绘制前首先指定一张纹理贴图,在maya软件中白色代表1,黑色代表0,在绘制时使用Floodpaint整体给模型一个黑色,再用白色画笔绘制毛发的生长区域,调整边缘的虚实变化。不同明暗及虚实相交最终将控制不同疏密、长短的毛发。绘制好的贴图仍然可以在photoshop等绘图软件中作进一步的细化处理。
图1 三维毛发的生产流程
maya中的每个Yeti节点的实例对应一个图形,所以创建图形首先确保已经创建了一个Yeti节点。Yeti Node节点就是可以渲染的毛发曲线,在输入模型网格上创建将要变形的Yeti图形,在Yeti工具架上创建Yeti节点,或使用pgYetiNewNode mel命令创建,否则将无法分配输入对象,这里可以进行手动添加。如果想要将输入对象添加或删除到Yeti节点,则需要打开属性编辑器和添加对象中的图形/输入对象选项面板,该对象将显示场景中可添加的对象列表。
选择Yeti节点后,可以在任何窗口中打开Yeti图表编辑器面板,一组毛发至少需要Import、Scatter和Grow三个节点,每个节点有自己对应的参数,图表通过箭头将结点输入和输出链接在一起,该箭头定义了数据流如何通过图表节点,当数据从一个节点移动到另一个节点时,任何节点的输出口都可以连接多个节点输入口,可视化参数将对Yeti节点起作用,进而影响毛发的基础形态。
尽管图表起到了足够的控制作用,以便在大多数情况下获得较好的整体毛皮效果,对于写实角色来说,需要更多的手段来控制毛发的随机效果。如maya的nHair一样,首先需要制作初始曲线,由初始曲线决定毛发的长短和造型[3]。Yeti通过Grooms提供所需的随机控制,由于Grooms是一组可控制的节点,所以在每个节点上可以存储任意数量毛发的自定义属性。图表可以实现任何数量的输入,Groom通过属性节点来控制长度、密度、方向或其他节点参数。
Groom引导线在图表中的应用总流程如图2所示。创建一个Groom就可以在图表中应用这个结果。首先把Groom关联上Yeti Node节点,选择Groom节点,打开the Graph/Input Grooms面板中添加Groom,弹出的选择窗口列出场景中所有可能的Groom,选择所需的Groom和关联上Yeti Node节点的Groom,然后返回图形编辑器(选择了Yeti节点,并在Yeti工具架上点击GE,然后导入Groom,使用导入节点,并在属性栏中将其设置为Groom模式,在名称字段中指定Groom的全部或部分名称。Groom的主要用途是调整毛发方向,在图表列表中选择Comb节点。创建后要确保Grow的输出节点连接到Comb节点的第一个输入口,并将您的Groom Import节点的输出连接到Comb节点的第二个输入口。当设置为root时Groom形态会影响到Yeti Node毛发。
如果调整Groom节点中的线条长度,还可以将Groom属性连接到Grow节点的第二个输入口,这样可以让Grow节点将线条的长度属性作为乘数倍增。最后如果在Groom节点上绘制了密度属性,也可以以类似的方式将Groom连接到Scatter节点,以控制如何生成初始点的密度。Groom被导入并在图表中应用,Groom的更改就将在图形和视窗中动态地进行实时更新。虽然图表的密度和复杂度可能会降低交互性,但对于查看图的最终结果非常方便。
图2 Groom引导线在图表中的应用流程
Guide curves是可以利用第三方软件生成并作为数据导入的任何nurbs曲线。虽然引导曲线的位置是任意的,但是最好将它们创建在尽可能靠近模型表面的位置并且保持与Yeti Node方向一致。要在Yeti Node中使用Guide curves,首先必须将Guide curves转换为maya集,通过mel语言可以直接把曲线转换为集。Yeti节点上的“输入指令集”调板可以将新集分配给Yeti Node节点。在图表中创建一个新的导入节点,并在属性面板中将模式更改为Guide,并为该节点设置新集。
Guide curves节点通常用于变形毛皮曲线的输入设置,可以通过新的属性Yeti在输入的曲线弧度上创建,进而引导曲线围绕和引导曲线聚集。还可以通过Yeti节点显示调色板中的指南切换,在maya视窗中预览影响范围的衰减。Guide curves只需将引导线的输出或与Groom合并,连接到Scatter和Grow节点就可以设置生成的毛发的密度和长度。
默认情况下Guide curves将根据其全局位置进行采样,它们可以被动地进行配置和动态的使用,通过Yeti可以在任何指定集上创建“锁定到表面”属性来实现,即使曲线毛皮变形也可以保持与表面的初始关系。Guide curves切换的属性将与变形表面一起移动,曲线集被添加到Yeti节点中,集中的每个曲线形状将被赋予并用于控制毛发的形态属性。
Yeti中的羽毛可以使用实例节点和自定义羽毛节点创建,该节点设计可较为便捷实现在所选渲染引擎内产生许多羽毛。Yeti可以实现自定义羽毛节点,可以通过Yeti工具架上的CRF按钮或Yeti菜单中的Create Feather创建节点。创建场景起点处的默认羽毛形状,即最终渲染后羽毛的简单视窗预览效果。在组件模式中,选择羽毛的顶点来调整羽毛的形状,这个控制框架可以被认为是简单的默认多边形拓扑结构。控制羽毛角度和羽毛撕裂的参数可以在羽毛的属性编辑器中设置,这些参数作为几何形状的特有属性被传递到Yeti图中,由程序生成可渲染的羽毛,它们与羽毛的被唯一标识的ID一起作用,产生每根羽毛形态的多样变化。Yeti在羽毛形状中生成单个羽毛框架用于视窗预览,在渲染时可以通过羽毛属性编辑器中的“Barb”参数来控制单个羽毛形态的输出,不同形态羽毛的输出控制如图3所示。
图3 不同形态羽毛的输出控制
Yeti目前支持四个主流的高级渲染器:Pixars Renderman、3Delight、Chaos Groups Vray和Solid Angles Arnold。这些渲染器都自带毛发材质,结合Yeti Node节点渲染属性,可以控制毛发最终渲染的数量,较好地定义倍增、密度、根尖颜色等属性。
在三维角色制作中,写实类生物角色毛发一直是制作的一个技术难点,近年来主流的制作方法是采用几何建模的方法来构建毛发,将每根毛发显示成一串三角片或圆锥体,并进行反混淆以及复杂的光照计算,从而生成令人满意的绘制效果[5]。在制作过程中首先制作数量较少的引导线,通过引导线的形态属性控制较多数量的可渲染毛发,Yeti的Groom笔刷工具丰富,独特的图形节点结构直观且方便于后期编辑,图形节点描述毛发在制作过程中的所有参数,尤其是参数的随机化处理和组合,可直观地模拟真实世界的毛发形态。配合Autodesk maya动力学引擎、渲染模块生成皮毛、羽毛和树叶等效果,创造可信真实的三维角色,且制作效率极高。