关于CG角色的毛发,可以说是影视制作流程中的顶级难题之一。最早只是通过贴图制作角色毛发,这在当时可以说是十分了不起的尝试。
20多年过去了,随着CG技术的不断进步,毛发制作也精细了许多。先来康康《玩具总动员》第一部和第四部的角色毛发对比吧。
《玩具总动员4》
想要让CG创作的毛发具有真实感,这背后复杂的解算以及计算量等方面,一直都是CG制作中棘手难题。随着技术迭代升级,如今艺术家们脑海中CG角色毛发大都可以活灵活现的呈现。
CG毛发技术的进步少不了行业人士不断地探索与学习。来自意大利的资深行业技术讲师和大家分享使用Houdini创建高级感的毛发的教程,让角色的毛发时髦起来~一起来学习一下吧~
Denis Zen,有20多年三维制作及讲师经验,参加他课程的学生有很多在全球顶尖的工作室工作,包括迪斯尼、工业光魔、维塔等。
Zen制作的 Grooming 案例
前言
Houdini通常被视为一个解算(模拟)工具,其实是一个功能齐全的DCC软件,可以做毛发造型,视效开发,灯光渲染等。在这个教程中,我们会展示毛发梳理之前和梳理之后的两种造型,当中会学习到如何使用皮克斯出品的着色器和灯光。
教程会主要介绍毛发梳理“之后”的版本,因为它结合了Houdini 18的最新技术,包括新的绘画属性节点。
PS:感兴趣的小伙伴建议下载教程素材文件,动手学起来(微信公众号后台回复“CG界托尼老师”)
记得要在Houdini打开文件之前设置项目(文件>设置项目...),以便读取$JOB变量,并在项目的tex目录中找到所有纹理,在geo目录中找到头部模型。
Zen使用的头部模型来自3D SCAN STORE,而且是免费。
Scene Setup 场景设置
首先,将模型导入到Houdini并且设置一个非常简单的灯光来检查Groom。这一点非常重要,因为毛发非常稀薄,光线与毛发的交互方式对于造型和视效开发过程至关重要。
第一步(灯光设置将在后面介绍),选择Pxr环境日光,简单而写实的效果是这个灯光的主要特点。
创建一个用于渲染最终帧的新相机也很有用。可以移动透视摄像机拍摄模型。
如图所示,PxrEnvDayLight非常具有交互性,在主灯光阶段可以提供很好的反馈。你只需要调整强度和方向。
要改变光的方向,你可以使用旋转工具或调整基本控制参数(经度,纬度等)。
Latitude(纬度)
Longitude(经度)
你也可以通过调整Sun Size数值以调整阴影的柔软度。
Sun size > 阴影的柔软度
如图所示,因为这是一个Omni Lights(全局光),光线没有变换,也就是说,灯光放置的位置不会影响结果。
Grooming
对于CG界的发型师而言(制作写实毛发的通则),参考素材是基本的。找到360度的发型参考素材并不容易,所以Zen搜索YouTube Beardbrand频道,那里每个视频结尾,发型师会360度展示客户的发型,这就是参考素材。
参考素材源自YouTube Beardbrand频道
Grooming 包括两个步骤:
1、Guide Styling 引导线造型(毛发种植的方式)
2、Hair Styling 毛发造型
Guide styling
Zen喜欢Houdini的程序化工作流程,自带的梳理工具很棒,但Zen通常更愿意使用GroomBear,由Kamil Wacławiak所开发。这个工具很赞,让你发型制作的非常快。
你可以轻松地无损地烘焙该节点,没有这个插件的朋友也可以打开该场景文件或使用云渲染也没问题。
Zen把Grooming分成不同的部分,给他们不同的引导方向和密度。
Hair 头发
Moustache 八字胡
Beard 络腮胡
Eyebrows 眉毛
Eyelashes 睫毛
Nostril hairs 鼻毛
Peach fuzz 绒毛
引导线的造型是关键,也是最困难和费时。
下面这一步在Guide Groom节点中操作:
头顶毛发引导线设置
这些制作过程并不都是一样的。Houdini十分有用的工具之一是Guide Advect工具,它使你可以简单地通过绘制笔触轻松地覆盖毛发。
通过速度场来设置引导点
在这个过程中,继续使用Houdini Grooming工具和GroomBear工具去设计引导线风格。这个过程不是很难,但如果你想做成真实的效果是非常耗时的。
这是最终的样子:
接下来是为每个部分绘制遮罩。这是Grooming的重要部分,因为它可以让你使用颜色图(color maps)控制毛发的生长方式和位置。
Houdini 18引入了一个新版本的Attribute Paint(绘画属性)节点,有了很大改进。
你绘制的遮罩越多,你获得的控制也就越大。以下是Zen的设置:
在这里,我们可以在模型上看到一些可视化内容:
从红外线颜色图可以轻松查看细微的密度差异
Hair styling毛发造型
现在是时候为头发做造型了,因此对于每个引导部分,都创建了一个Hairgen Generate节点,添加各种修改器,使头发看起来尽可能真实。
每种毛发造型都是不同的,但大多数情况下最终会使用相同的修改器。区别在于它们的设置和组合。
最常见的修改器是 Clump、 Noise、 Bend 和 Length。
Zen通常从Clump开始,因为它是每个毛发的灵魂,而且层次是一个关键特征。
你可以用不同的方式设置层次
方法一
你可以使用Clump节点的Clump设置,为每个层次调低数值。
方法二
Houdini Clump节点有一个Fractal Clumping的选项,这个功能很棒。
设置“Fractal Clumping”的数值,你可以使用一个节点来细分发束Clump。
方法三
创建发束层的另一种方法是将“Hair Generate”节点与“Clump”节点的“Custom Clump Curves(自定义聚集曲线)”相连。这样你可以得到更多的控制甚至为毛发/引导线添加修改器:
你也可以用Hair Generate节点制作第一层毛发。使用这个节点的优势是,你可以使用节点参数(density密度, masks遮罩等)更好地控制发束曲线。
为了清楚地可视化你的发束,你可以将“Color(颜色)”节点连接到Hairclump节点的第一个输出(引导线),并分配一个Clumpid变量。
在这之后,Zen使用了一个Noise Modifier (噪波修改器),比如Frizz(毛躁)节点赋予了头发很自然的感觉。通过调整它的设置,你几乎可以得到任何你想要的毛躁效果。
这个节点实现自然的发型的另一个关键特征:飘逸的毛发。打造由于干燥,静电,护发产品和其他原因而产生卷曲的毛发。
要获得飘逸的毛发,使用“Mask(遮罩)”选项卡的“Noise Mask(噪声遮罩)”。将“Gain”设置为1,并调整“Noise Mask Frequency(噪声遮罩频率)”和“Bias”设置,以决定你想要的飘逸感:
变化是另一个关键特征,遮罩Masks就尤为重要。用它们来驱动尽可能多的属性,因为毛发由大约15万个独立的发束组成,这些发束根据许多元素(Dirt污垢,Age年龄,Length长度,Gender性别等)而创建多种样式。
除了我们刚刚看到的Paint属性Mask外,几乎每个Houdini节点属性都有一个菜单,可以让你选择不同类型的Mask。
不幸的是,Houdini没有像Maya中的“噪点”画笔。因此如果要获得一些“邋遢”效果,必须从外部绘画应用程序中导入贴图。
另一个很棒的修改器Bend(弯曲)节点,和Curve Mask(曲线遮罩)一起结合使用:
设置Effect Position(效果位置)和Range Min(最小范围) 和Max(最大值),你可以决定哪一部分(红色)受了影响(选中“Visualize Masks可视化遮罩”以查看它)。
关于毛发真实感的最后一个技巧是Clump节点中的Curl选项。低数值在大多数情况下都能达到很好的效果。
没有选择Curl卷曲。注意,制作的毛发十分规则。
使用Curl卷曲。发型更自然了。有时候很微妙,但是每个细节都很重要。
我们也可以在八字胡和胡须上应用同样的技术。唯一的区别在于修改器的设置,因此你要发挥创意!
这是最终的效果:
Lighting and Shading 灯光和着色
现在我们得到了想要的发型,现在是时候添加一些灯光并开始为模型着色了。
灯光设置非常重要,因为它可以让你检查头发的流动和外观。如果你想转盘渲染(render a turntable),那么你的模型要360度完美呈现。
Zen通常从三点布光开始(Key,Fill,Back)并添加其它的灯光,确保良好展示所有角度:
为了更好地理解灯光是怎样影响你的模型,每次只使用一个灯光。
Houdini网格分布:
Shop通常是创建着色器的地方。
在创建最终着色器之前,Zen通常使用两个简单的灰色着色器:浅灰色的用于头发,深灰色的用于皮肤。
有了这些,可以快速检查模型的毛发和色调的差异,显示发型的空洞或其它一些问题。直到你满意了,才建立最终的。
RenderMan着色器颜色在“Scene View(场景图)”中不可见,并且应用在模型中显示为灰色。为了克服这个问题,必须在材料网络中构建原生的Houdini材质:
点击Scene View工具栏的Texture图标以可视化材质:
如果无法看到着色器的应用,关闭当前的“Scene View”并打开一个新的:
然后创建一个简单的皮肤着色器...在这里就不作深入讲解啦~本文只是让大家了解Zen如何使用Houdini制作毛发。
幸运的是,3D Scan Store的模型都带纹理,你需要在连接纹理之前转换成.tex文件格式。最简单的方法是使RenderMan Texture Manager(纹理管理器),它可以为你处理所有的纹理转换。
你还可以使用 txmake,它位于 $rmantree / bin 中。
贴图转换的一个快速技巧是打开一个空的命令提示符,将txmake可执行文件拖放到cmd窗口中(而不是编写路径),然后拖放要转换的纹理。
要快速保存新的tex文件,请在cmd窗口中拖动纹理两次,并为最后一个添加.tex扩展名。
一旦转换了纹理,创建一个RIS Shader Network(单击RenderMan选项卡中的图标),然后进入新创建的网络,创建一个PxrSurface材质。
在这个节点中你可以创建你的材质。
如图所示,Zen将最终材质分为两部分,一部分是BXDF,另一部分是Displacement,它们通过Collect节点连接在一起,PxrSurface处理表面着色,PxrDisplace处理几何着色。
作为一名Groomer,Zen不会花很多心思处理着色器,因为视效开发人员通常会在制作中完善它,所以Zen简单地将映射(Diffuse漫反射,Specular高光,Normal法线等等)连接输入,并调整一些常规的着色器设置。
请注意,修饰之前的模型皮肤看起来不够清爽,当油渍和污渍覆盖皮肤时,会发生这种情况。你可以使用高光贴图和数值进行调整。
准备好将其应用到模型中,将其加载到Geo节点的Render Tab的材质参数中:
对于头发,Zen制作了四个不同的着色器以实现之前说的变化:
如图所示,每个着色器由两部分组成:Pxr Hair Color和Pxr Marschner Hair。
PxrHairColor是Melanin-besed黑色素样式,所以我们可以通过数值让头发从金色变成黑色:
另一个需要特别注意的设置是Hair ID Primvar,每一个发束都有一个独特的值。如果hairIndexPrimvar数值为空,随机选项不会发挥作用。
看看它们之间的区别:
PxrMarschner毛发着色器可以处理毛发的物理着色。通过更改高光设置(Primary主要,Secondary次要和Transmit透射),你可以从光泽/湿润的外观变为柔和:
对于发色,以下有很好的文档资源:
PxrHairColor:
rmanwiki.pixar/display/REN23/PxrHairColor
PxrMarschnerHair:
rmanwiki.pixar/display/REN23/PxrMarschnerHair
Rendering 渲染
现在可以渲染模型了,Groomer的任务通常还会包含一个360度的转盘渲染,小伙伴们可以尝试旋转相机,这样比较节省时间。通常Zen会这样操作:
·创建一个空对象Null Object;
·把它放在模型的中心;
·动画旋转360度;
·将渲染相机作为“动画化的空对象 Animated Null”(已与灯光作为父项)的父项。
该空对象驱动这一切:
在为灯光设置父对象之前,记得检查保持灯光的位置,避免它们错位。
Render Settings渲染设置
创建一个RIS节点,转到Out Network,按Tab并从下拉菜单中选择 RenderMan:
单击刚刚创建的RIS节点,以在Parameter Pane Tab中访问其设置(或按P键)。
Samples采样
已着色的毛发渲染起来非常耗时,你必须特别注意设置,特别是Sampling(采样)。Zen做了很多测试,以下这些数值是速度和质量之间的良好折衷:
噪波在图像的较暗部分中更为明显。要消除它,您可以减小Pixel Variance或增加Maximum Samples:
最后,你可以在灯光设置的“高级”选项卡中增加“Light Samples”:
使用这些设置,噪波更小,光线采样更清晰,但渲染时间也随之更长。
渲染通道Render Passes(AOVs & LPEs)
要想增加照片逼真度,每个图像渲染后要进行后期处理,如果不想费劲处理渲染设置,可以选择多通道渲染,然后在Nuke合成最终效果。
在“Out Network”选择要保存的渲染通道,选择RIS节点,然后在“Parameters Pane Tab”中选择“Images(图像)”:
这些是Zen通常用于合成的通道:
·Standard: z (depth)
·Lighting: albedo, directDiffuse, directSpecular, indirectDiffuse, IndirectSpecular, subsurface
添加渲染通道不会增加渲染时间,因此可以随意选择所需的渲染通道,并将渲染文件另存为OpenEXR(.exr)文件格式。
Compositing 合成
最后~使用Nuke修改图像。
产生逼真的首个基本效果是景深。尽管DOF在后期中并不像在渲染中那样完美,但很多时候在后期中做会更好,因为:
- 耗时
- 不能改变主意
使用z(Depth深度)通道十分轻松,可以在几秒钟内确定图像的焦点在哪一部分。
只需创建一个 ZDefocus 节点:
- 选择你要的焦点放置focal_point;
- 将Math设置为Direct(或任何其他选项);
- 调整景深(图像的焦距);
- 尺寸和最大值(示效果要多强烈)。
如果将鼠标光标停在字域的值上,Nuke会显示相应的解释。
要使用其他通道,你必须使用Shuffle节点从.exr文件中提取它们:
选择合适的通道后,你需要选择遮罩作为颜色分级。
现在,你可以应用Nuke Color Correction(颜色校正)节点获得最终外观。以下是Zen用来校正图像的简单网络:
这是其中一种结果:
Conclusion 总结
教程中涵盖了Groom到渲染的主要步骤,希望给各位小伙伴们提供一些新的思路。了解了Grooming的过程后,你可以将其中的思路应用到其他地方:例如 XGen、Yeti 或者Ornatrix 等一些主流的产品。
素材源自RenderMan及网络
,