HumanSkin Shader
1. 概述
HumanSkin shader是专门用于渲染皮肤表面的。由于皮肤是一个独特外观,并且不能通过常规shading来实现的。一个有趣的特点是,这种shader允许我们基于黑色和红色素重新创建皮肤纹理颜色。这样我们可以获得更多的颜色变化而不需要更多的纹理。

使用skin shader的模型例子
2. Shader参数
|
Shader 参数 |
描述 |
|
Subsurface multiplier |
次表面散射强度乘数 |
|
Rim multiplier |
边缘光照强度乘数(受环境贴图影响) |
|
Wrinkles blend |
设置表情皱纹贴图混合 |
|
Specular multiplier |
设置镜面反射乘数 |
|
Light diffusion amount |
光散射量 |
|
Rim Power |
设置边缘光强度 |
|
Melanin |
设置黑色度层级 |
|
Detail tilling U |
设置细节贴图U |
|
Detail tilling V |
设置细节贴图V |
|
Detail bump scale |
设置细节凹凸强度 |
|
Wrinkles bump scale |
设置皱纹凹凸强度 |
|
Wrinkles diffuse blend |
设置皱纹变形与漫反射图混合强度 |
|
Inner layer depth |
设置表面内层有多深或多近 |
|
Outer layer opacity |
设置外层表边的不透明度 |
|
Inner layer anim frequency |
设置内存动画频率(与深度有关) |
|
Inner layer anim phase |
移动动画(当前无用) |
|
Inner layer diffuse |
设置内层的颜色 |
3. 皮肤属性
它总是非常分散的,并且取决于皮肤的类型和颜色。在深色的皮肤上反射是十分特别的。油性和湿性也会影响皮肤的反射。嘴唇的颜色默认还要跟多的反射。它同样依赖于油性和湿性来变化更多或更少的反射,
根据皮肤表面的厚度我们能看到光线穿透表边并且有很有趣的细节,这个现象在明亮的肤色如耳,鼻,手处更明显。
4. 如何使用Skin Shader
Skin shader考虑了所有上边的属性,并且它简单易用,有6个默认参数
Specular Multiplier: 设置镜面反射的强度,请注意这是非常微妙的(0.2以下),对于明亮的皮肤色和比暗色的皮肤色调更强一些

没有高光(multiplier {{ 0), subtle specular (multiplier }} 0.1)到极强的高光(multiplier = 1).注意微妙的高光带来的不错的Normal贴图细节,以及极强的高光会把这些细节又破坏掉了
Subsurface Multiplier: 设置次表面有多强,次表面部分来自此表面纹理的输入,越深的纹理越越少的次表面可见,查看次表边散射以获得更多信息。

没有次表面到最大次表面(multiplier {{ 0), maximum subsurface amount (multiplier }} 1.0) 注意次表面散射部分,你可以通过次表面纹理来调整此表面散射的强度。
Rim Power: 设置边缘照明的强度,越高变化的越锐利,查询RimLighting来获得更多信息。

没有边缘光找到最大边缘光找效果(multiplier {{ 0), medium rim (multiplier }} 0.5), max rim (1.0),注意角色上的边缘光照强度的效果
Hemoglobin: 设置血红色,越高分红色成分越多,越低红色成分越多。我们可以设定不同颜色类型而无需做太多纹理。

很少的血红色(-0.6),默认的血红色(0.0),较多的血红色(0.6),注意越少的血红色使的角色看起来更发黄,越多看起来越粉红。
Melanin: 设置黑色素越高,它看起来更暗,可以通过一些不同类型的颜色值来模拟,而不需要更多的纹理。

默认的黑色素(0.0) 更多的黑色素(0.5)
附加说明:
你可以通过设置glossmap在diffuse texture的高光通道你可以去掩盖一些镜面反射和Rim的高光。
镜面反射的高光是很微妙的,油性皮肤会影响更多,像鼻子,额头,嘴唇的区域。
请参阅Rim Lighting部分获取更多细节
请参阅Subsurface Scattering tuorial部分获取细节
始终在中性条件下去做调整设置。
5. Rim Lighting(边缘光照)
Rim Lighting 模拟了光在一些大角度位置的反射,这意味着他的轮廓形状会与背景分离的更加明显。

CryEngine在Skin shader中支持这个功能,它是基于纹理的。这意味着我们需要mask-out那些我们需要它是边缘的像素。
注释:
Rim的颜色来自于漫反射颜色和光的漫反射色
通过设置glossmap在diffuse纹理的透明通道,你可以mask-out边缘的高光
检查SkinShader上光与边缘照明的参数描述。

光从左侧来,光从右侧来

没有边缘照明 有边缘照明
6. Subsurface Scattering(次表面散射)
次表面散射基本上是传输过程中穿透了表面的效果,更具表面的类型和厚度,能见多随着增加或减少。

CryEngine基于shader支持皮肤,冰、植被等近似的模拟。
Skin Shader的次表面散射
使用起来非常简单,能得到最廉价的近似效果。以Wapped Diffuse Shader为基础使用了一个次表明映射来mask-out次表面范围。
你可以通过次表面贴图Mask-out次表面区域。纹理需要一个红色,并且依赖于你想要得到的可视化细节。你可以使用一个低分辨率的纹理,也可以使用一个高分辨率的纹理(如果你想要得到一个显示静脉效果的话)
次避免需要依赖于diffuse texture颜色,这意味着越黑色的diffuse颜色,你看到次表面上部分越少。
下面介绍SkinShader中此表面散射参数。
一个次表面纹理的例子
次表面部分没有次表面纹理 次表面部分应用了sss纹理

没有次表面和有次表面的最终效果。
7. 结束语
如果小心使用HumanSkin shader可以达到非常真实的效果。
它非常依赖输入的数据,主要是Diffuse/Normal/subsurface Map制作的是否精细。
浙公网安备 33010602011771号