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制作的是否精细。