【翻译】CryEngine3下的HumanSkin Shader

本文详细介绍了HumanSkinshader,一种专为皮肤表面渲染设计的着色器。它能够基于黑色和红色素重现皮肤颜色,提供丰富的颜色变化。文章还探讨了如何通过调整参数来模拟不同类型的皮肤,并解释了边缘光照和次表面散射的概念。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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)

附加说明:

      你可以通过设置glossmapdiffuse texture的高光通道你可以去掩盖一些镜面反射和Rim的高光。

      镜面反射的高光是很微妙的,油性皮肤会影响更多,像鼻子,额头,嘴唇的区域。

      请参阅Rim Lighting部分获取更多细节

      请参阅Subsurface Scattering tuorial部分获取细节

      始终在中性条件下去做调整设置。

5.       Rim Lighting(边缘光照)

Rim Lighting 模拟了光在一些大角度位置的反射,这意味着他的轮廓形状会与背景分离的更加明显。

CryEngineSkin shader中支持这个功能,它是基于纹理的。这意味着我们需要mask-out那些我们需要它是边缘的像素。

注释:

           Rim的颜色来自于漫反射颜色和光的漫反射色

           通过设置glossmapdiffuse纹理的透明通道,你可以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制作的是否精细。

 

作者: 无花无酒
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利.

 

转载于:https://www.cnblogs.com/wanax/archive/2009/12/20/1628182.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值