自译 教程/经验 版权:禁止匿名转载;禁止商业使用;禁止个人使用。

240 0 1 2020-05-05 15:40:38 举报

《THE SILVINA PROJECT》最后一篇完结篇,重点内容:毛发。建议英文辅助阅读

《THE SILVINA PROJECT》最后一篇完结篇,重点内容:毛发





教程来自:英国伦敦3D艺术家Şefki Ibrahim







XGen Demo  Facial Groom Overview




A paint over diagram helps break down the general flow of the subject's eyelashes. You can also see how the curvature of the lines change drastically as the head rotates.



Geometry was extracted from the base mesh and an XGen description was applied. For this project,I used the placing and shaping guides' option in XGen legacy.

As you can see above,I positioned and sculpted the guides based on the reference images provided.

从基本网格中提取几何图形,并应用XGen description。在这个项目中,我使用的是在XGen 旧版中的 "placing and shaping guides放置和成形导向"选项。



placing and shaping guides放置和成形导向


1.    通过将控制基本体(Control the Primitives)设置为“放置和成形导向”(Placing and Shaping Guides)创建描述。

2.    从“XGen 窗口”(XGen Window)或“工具架”(Shelf)单击  


图标以访问“添加导向”(Add Guide)工具。


3.    单击曲面以放置导向。

注意若要增大或减小“添加导向”(Add Guide)工具的半径,请按住 B 键拖动。




A note: the extracted XGen geometries are UV-mappedso they fully utilise the UV space, ensuring a highresolution when painting maps in XGen.



I start by painting a density mask for the eyelashes. This is essentially a weight map. Black represents no hair, white means the full specified density and any value from 0-1 is a multiplier of the density value. Below are the primitives before adding modifiers.

我首先为睫毛画density mask。这本质上是一个权重图。黑色表示没有头发,白色表示完全指定的密度,0-1中的任何值都是密度值的倍数。以下是添加modifiers之前的Primitive。


I always employ the ' rand(a,b)' script using the expression editor to add as much randomness and variation as possible with the groom.

You can see how it's been used in the length and width attribute above.






Adding modifiers to the eyelash groom。



The same process was repeated for the eyebrows:geometry was extracted and a description was applied.



Here's a look at the guides.I find that for more complex hair patterns such as the eyebrows, it's better to add more guides to distinguish the correct look.I' ve identified the growth pattern of the brows below. If there aren't enough guides to support this, XGen will interpolate (as it should)and you may get unwanted results.


You can see from the dlagram on the left how the growth of theeyebrows can be separated into two distinguishable paterns.

The red arrows represent the hairs growing upward, while the blue arrows highlight the hairs growing downward. And these two pattens converge in the middle of the brow.

The guides above are my attempt at emulating this.





Again,a mask was painted for the density. This map usually requires more precision than the eyelashes, since it's important to get smooth transitions.

There is less density at the start of the eyebrows.Density then gradually increases (the middle beingthe densest at the point in which the two patterns converge) and then the number of hairs decrease again.

再次,为密度涂了一个遮罩图。这张图通常比睫毛需要更高的精度,因为获得smooth transitions非常重要。



The eyebrow primitives before modifters were applied

应用 modifters/修改器之前的眉形基本体。


Modifiers were then added to the eyebrow description.

Usually, for smaller grooms like this,I tend to use around two clump and two noise modifiers to break up the uniformity of the hair. Of course, at all times,I'm working closely with my reference images to ensure the groom matches as best as possible.

On the right shows the description's attributes. After many render tests and iterations,I found the wldth ramp works best when the root of the eyebrow primitives are very fine and thenbegin to thicken and gradually taper off agaln. This allows the groom to transition smoothly from the surface of the character's head and avoids the ' stuck-on' effect.


通常,对于像这样的较小的grooms,我倾向于使用两个clump和两个noise modifiers来打破头发的均匀性。当然,在任何时候,我都会与我的参考图片多次对比,以确保groom尽可能地匹配。

右边显示了描述的属性。经过多次渲染测试和迭代,我发现当眉毛primitives的根部非常细,然后开始变厚并逐渐变细时,wldth ramp效果最好。这样groom可以从角色的头部表面transition smoothly,避免“卡在”效果。





A map is connected to Mask attribute. This acts as a multiplier to thedensity. So if the maskis painted with a grey value of 0.5, then the density is multiplied by 50%



Modifler CV Count

For shorter grooms like the eyebrows and lashes, a relatively low CV count will suffice.A value of 22 is probably too high.



Width Ramp


The ramp represents how the width varies from root to tip.





Taper is a gradual thinning. The feature will reduce the thickness at the tip of the primitives.




Normalize is used to average the CVs on the guide and createsmoother primitives.




Rebuild lets you add more CVs to your guide for sculpting more complex shapes (e.g. long/curly hair).

For the eyebrows and eyelashes, the default amount of 5 was sufficient.





Eyelashes + Eyebrows + Peachfuzz and Facial Hair

Vellus Hair(Peach fuzz)


For the peach fuzz, It's important not to assume that vellus hair grows perpendicular to the surface of the model. Instead, the guides are placed and sculpted according to the directionality of the hair growth on the face.I' ve demonstrated this on the right 。

Adding vellus hair to a character can make a big difference to the look of the skin and the way it reacts to light. But the effect should be subtle and respect the age, gender and ethnicity of the character.




Velus hair is mostly unnoticeable and so it' svery difficult to see In the reference images (on the left and below). So I' ve drawn these diagrams to show the directionality of the vellus hair on the face using the red arrows (V).

While the green arrows are following dark facial hair, such as the sideburns(F).

The Primitive Attributes are shown below.






The peach fuzz density mask is shown on the left.

Lips do not grow vellus hair so these are painted with

100% black. This is also repeated for the back of the ears. Some variation is added by painting different grey values on the face and neck.

On the right is a close-up of the peach fuzz guides and the generated primitives(Maya viewporty) for the ear alongside an Arnold render.

左图为桃子绒毛density mask。


右边是桃子绒毛的特写,以及MAYA视图里的耳朵绒毛图(Maya viewporty)和Arnold渲染图。



Close-up of the ear and vellus hair (2K image rendered 15 of the way through)耳朵和绒毛的特写镜头

Facial Hair


Around the side-burn and temple region, the subject's face consists of some dense facial hair. Therefore, I created a new description and sculpted the guides according to the reference. This description also acted as transitional hairs, demonstrated in the image below, which allowed the eyebrows to blend more naturally into the skin. Of course, this description is dependent on the subject: some ethnicities have more facial hair (and vellus hair) than others.



Rather than a single value,I decided to paint a map for the width attribute, carefully painting the value of grey to achieve the desired thickness. These facial hairs are genorally unnoticeable around the eyes, cheeks and nose, so those regions were painted with a darker value and thus were generated thinner.

Clump, noise and cut modifiers were again used to add variation to the vellus and facial hair.

Particularly with the peach fuzz, it was important to use a noise modifler to emulate their sporadic nature. If their directionality is too uniform, the surface of the skin would feel unnatural particularly when caught by a back/rim light.I also turned down the opacity in the peach fuzz shader a little to emulate their subtle translucent nature.


“Clump”、“noise”和“cut modifiers”修改器再次用于增加绒毛和面部毛发的变化。

特别是对于桃子绒毛,使用noise modifler模仿其散发性非常重要。如果它们的方向性太均匀,则皮肤表面会感觉不自然,尤其是在被背光/边缘光捕获时。我还降低了peach fuzz shader的不透明度,以模仿其微妙的半透明性质。



Close-up render

Here's the hair shader for the eyebrows. All of the hair shaders use relatively similar values.

The peach fuzz shader, for example, has a higher Azimuthal Roughness value(0.57) so the whites are more visible in low-level lighting conditions.


例如桃子毛发着色器,它的Azimuthal Roughness值(0.57)较高,所以在低光照条件下,白色的毛发更明显。


Ichose to use a dark base colour (not fuly black)

because a base colour of white accompanied by a higher melanin value resuited in a saturated brown colour, which didn't respect the photo references. After some testing,I managed to getthe resuit shown on the right using the shader shown above.

For the peach fuzz, the base colour is white and the melanin value is 0.13 to give the hairs a slight tan.

(For all of the XGen descriptions, the mode was left at Ribbon)


因为白色的底色伴随着higher melanin value/较高的黑色素值,重新呈现出饱和的棕色,这并不尊重照片的参照物。经过一番测试,我用上图所示的着色器得到了右图所示的效果。



For the faclal groom,I chose to keep the shaders simple, and not connect texture maps, becausel was able to get the desired result by tweakingvalues and sliders. For the main groom, the hair shader was far more complex due to variation in colour.

Armold's standard hair documentation mentionshow the Shift attribute correlates to certain ethnicities. Silvina is of Argentinian descent, while the value 3.7 is associated with someone of Indian ethnicity. However, after setting up a light rig similar to the reference images.I found this value matched the best.

对于facial groom/面部毛发,我选择了保持shaders simple,不连接texture maps纹理贴图,因为通过调整值和滑块就能得到想要的效果。而对于main groom,由于颜色的变化,头发着色器要复杂得多。



XGen + Render Demo

2K Render


Grooming Curly Hair Placing and Sculpting the Guides


Groom Demo.

Hair shader was changed here to make it easier to see in the viewport



I started the groom workflow by creating simple trace-over diagrams.

The front, side and ¾ view reference images were traced in Photoshopto break down the hair into simple shapes. These drawings were then imported into Maya as image planes, as was the reference photography.

I set up multiple cameras and lined-up the model as best as I could with the images.

The most difficult thing with curly hair is that the shape changes from angle to angle. Simplitying these shapes using the diagrams allowed me to understand how the curls changed as the angle changed, so I could get as close 3D representation as possible.

我通过在图表上创建简单的trace-over diagrams来启动groom workflow。




I like to breakdown the hair similar to skin with 3 main layers: primary, secondary and tertiary.

The primary layer consists of the overall shape of the hair and parted sections.

The secondary layer consists of the clumps and any definition within the hairstyle. And the tertiary layer can be thought of as the fine noise layer as well as any stray hairs/flyaways.

Of course, just like when working on the skin, you start with the primary information and work toward the smaller details.






To add, hair is all about variation. The more randomness you add to the groom, the more natural it will look. In this part,I will demonstrate how I implemented scripts to create noise and colour variation in the groom.

Silvina's hair is an extremely complex hairdo to recreate in 3D.I wouldn't necessarily employ my extensive workflow for more simple grooms.

That's something that will have to be assessed by you!




Through these diagrams and through studying the reference images,I established early on that,I needed one description for the main bulk of the hair, another for any of the defining curls that sit on top;a further description for the hairline to create a clean transition from the scalp and a final description for the flyaway hairs.

Early progress is shown on the right. The first rendered image shows how a coil modifier with simple guides (left side) compares with detailedguides and a clump modifier(right side), as I was initially figuring out how to best achieve the look.

Of course,I went with the latter.


下面是早期进展图。第一张渲染图显示的是simple guides/简单导向的a coil modifier/线圈修饰器(左侧)与detailedguides/详细导向和a clump modifier/团块修饰器(右侧)的对比,因为我在最初的时候,我正在琢磨如何最好地实现这个外观。




XGen 交互式修饰导向(Guide)和线性线(Linear Wire)修改器属性

使用“导向”(Guide)和“线性线”(Linear Wire)修改器可确定头发形状并使其变形,以及驱动头发动画或模拟。“导向”(Guide)和“线性线”(Linear Wire)修改器可用于相同的用途。“导向”(Guide)修改器使用插值方法和区域贴图对头发形状进行其他控制。

有关详细信息和这些修改器之间的异同,请参见 XGen 交互式修饰修改器。



Sculpting these guides to emulate the curly shapes required a high number of guide points usually over 20(sometimes around 30).I figured the more detailed and accurate my guides, the more definition I would get with the groom.

The entire guide setup is shown on the left, each representing a description.

The orange guides are the main bulk of the hair, yellow are the defining curls, blue represents the hairline and red are the flyaways.

The main bulk of the hair used a large number of guides so I could ensure that all of the hair was controlled and not interpolating in a way that I didn't want.I also spent the time to painstakingly ensure that none of these guides was clipping with one another.I focused on the left-hand side of her hair first, mirrored these guides to the right and then spent the time to individually sculpt each guide in respect of the reference images and the trace-over diagrams present in the scene.

雕刻这些guides /导向来模仿卷曲的形状需要大量的引导点,通常在20个以上(有时在30个左右)。我认为我的guides/导向越详细和准确,我会得到更多的definition/定义和groom。

整个guide setup/导向设置显示在左侧,每个代表一个description/描述。





Modifers and Expressions


For each description,I used a range of modlifiers to get the look I wanted.

You can see from the video below how each modifier gradually transforms the hair. Density maps were painted to specify where I wanted the primitives to show, particularly for the curls' description. The first clump would always use a' clump by guides' and then I would further break up these clumps with another clump modifier.

Additionally,I used up to 4 noise modifiers on each description. The first would be a generic noise, the second for strays, the third for giving noise to specifted areas of the groom, and sometimes a fourth for an extra layer of variation. It's all very much dependent on the reference images. Her hair is particularly unruly so the combination of these noise modifier allowed me to emulate that


您可以从下面的视频中看到每个modlifier/修改器如何逐渐改变头发。绘制了Density maps是为了显示primitives的位置,特别是对于卷发的描述。第一个clump将始终使用“指南团块”,然后我将使用另一个clump modifier进一步分解这些clump/束。

另外,我在每个description述中最多使用了4个noise modifiers。第一个是generic noise,第二个是strays,第三个是给groom的特定区域giving noise,有时第四个是an extra layer of variation(额外的变化层)。这完全取决于参考图像。她的头发特别不规则,所以这些noise modifier的组合让我可以模仿



Applying a Custom Hair Colour

Here's a breakdown of how to add a custom hair colour map to your XGen description:

1.Under the XGen description in Preview/Output, I assigned a name to the attribute, selected colour and pressed“+”.


  1. Xgen里选择“Preview/Output”预览/输出,我为属性分配了名称,选择了颜色并按“ +”。


2. Next,I clicked the dropdown beside the expression icon and selected “create map”

A texture map node then shows up in the hypershade window.

2.接下来,我点击了表情图标旁边的下拉菜单,然后选择了“create map/创建地图”


3. Clicking on this texture node,I then assigned my hair colour map. Pressing the save icon ensures the texture is assigned to the description.


4. For this example,I' ve assigned an ai Standard Hair shader to the description. In the Hypershade, I created an ai User Data Colour node. The outcolour of this node was then connected to the base colour attribute of the shader.

4.在此示例中,我为description描述指定了一个ai Standard Hair shader。在Hypershade中,我创建了一个ai User Data Colour节点。然后,将此节点的outcolour连接到着色器的base colour属性。


5. The User Data Colour node then gets assigned the name specified in Step 1. So, in this case, Hair_Colour'.. and then render!

5.然后为User Data Colour节点分配在步骤1中指定的名称。因此,在这种情况下,为“Hair_Colour”..然后进行渲染!


Tip 1: An ai Colour Correct node can be inserted in between the User Data Colour node and the hair shader.

This allows you to tweak the colour of thehair and acquire real-time feedback on the colouration changes as you render.

(The correction node can also be isolated in the renderer to see a flat-lit view of the hair colour).

提示1:可以在“User Data Colour”节点和hair shader之间插入一个“ ai Colour Correct”节点。



Tip 2: An ai Colour Correct node can also be used to control the melanin attribute by connecting the red channel(instead of out colour).

Checking ' invert' in the node will essentially give you a melanin weight map, which corresponds to the hand-painted hair colour map. Again, the sliders can be tweaked and viewed in real-time for an efficient hair shading workflow. Below shows how this connection can be made.

技巧二:ai Colour Correct节点也可以通过连接red channel(而不是out colour)来控制melanin attribute。

在节点中勾选'invert',基本上就会得到一个melanin weight map,对应于手绘发色图。同样,滑块可以实时调整和查看,以实现高效的头发着色工作流程。下面展示了如何实现这种连接。


Hair Shading

I started 3D painting onto the hair geometry so I could identify which areas I wanted to have lighter coloured strands of hair.

The benefit of painting inside of Maya is that I can see the groom as Ipaint so l know where the clumps form and what colour those clumps will be when I render.



The shader I chose to use for the hair was Maya's Physical Hair shader. With Arnold's ai Standard Hair I found that white hair required high render settings to produce decent results.

The Physical Hair shader was much faster to render and gave me enough control to achieve the resuits Iwanted. The custom colour attribute was connected to both the Root and Tip Colour.

我选择用于头发的shader/着色器是Maya的Physical Hair shader。使用Arnold的ai Standard Hair,我发现白发需要较高的渲染设置才能产生不错的效果。

Physical Hair shader的渲染速度要快得多,并且给了我足够的控制权来实现所需的效果。自定义颜色属性已连接到“Root/根”和“Tip Colour/尖端颜色”。



08HDRI Tests.jpgHDRI Tests


A new custom colour attribute was created;I named this, Randomise'.

In the expression editor,I applied the script shown below.

This code is essentially multiplying the specified hair colour map with arandom noise map. The colour of this noise is specified by (0.12,0.1,0.1), which represents a dark brown colour.A slider is then generated allowing me to choose how much of the noise will affect the colour of the hair.

For example, if I set the slider to 10, then 10% of the hairs will randomly be assigned this colour.

创建了一个新的自定义颜色属性;我将其命名为“ Randomise”。


此代码实质上是将指定的hair colour map/头发颜色图与arandom noise map/随机噪波图相乘。这种噪波的颜色由(0.12,0.1,0.1)指定,代表深棕色,然后生成一个滑块,允许我选择多少噪音会影响头发的颜色。



For this to show up in the renderer, the at User Data Colour name needs to be changed to the new overriding custom colour attribute,' Randomise'.

So in the renderer,I get the hair colour plus the randomly assigned dark strands of hair.

为了使它显示在渲染器中,需要将“User Data Colour/用户数据颜色”名称更改为新的覆盖自定义颜色属性“ Randomise”。




011(移动和照明)Turntables (Moving and Lighting).gif

(移动和照明)Turntables (Moving and Lighting)


标签 教程


首页推荐 编辑推荐 首轮轮播


取消 通知作者