Unity酱~ 卡通渲染技术分析

Posted lijiajia

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Unity酱~ 卡通渲染技术分析相关的知识,希望对你有一定的参考价值。

前面的话

技术图片

上一篇Unity酱~ 卡通渲染技术分析(一) 写了CharaMain.cginc,服装的渲染是怎么实现的。这篇来分析一下头发跟皮肤的实现

头发

本来以为unitychan的头发会有各向异性的实现,没想到她也是用的CharaMain.cginc实现的。我们来看看头发的材质
技术图片
其他实现都一样,也是通过高光反射贴图来控制高光区域跟反射区域

计算法线跟视角向量的点积,这样的效果是越垂直于视角向量的高光越大,然后用RGB贴图来控制哪些区域更容易出高光

技术图片

反射依然是用A通道来控制,越白的地方,反射的越强
技术图片

如何实现皮肤效果

技术图片

这么漂亮的皮肤,其实只用了两个效果就实现了

漫反射+边缘光

这一次我们来详细说一下漫反射的实现

    float_t normalDotEye = dot( i.normal, i.eyeDir );
    float_t falloffU = clamp( 1 - abs( normalDotEye ), 0.02, 0.98 );

还是用法线跟视角向量的点积,并且限制在了0.02到0.98的范围。
本来是夹角越小的值越大,夹角越大的值越小,用1 - 去点积的绝对值后,表示越靠近视角向量的,就越接近0。跟视角向量夹角越大,值也就越大,也就是边缘的部位值会越大

    float4_t falloffSamplerColor = FALLOFF_POWER * tex2D( _FalloffSampler, float2( falloffU, 0.25f ) );
    float3_t combinedColor = lerp( diffSamplerColor.rgb, falloffSamplerColor.rgb * diffSamplerColor.rgb, falloffSamplerColor.a );

用刚刚求出来的值,采样的这张衰减贴图,也就是反映出皮肤质感的重要一步了!值越大,采样出的颜色就越接近肉色。也就是越边缘越接近肉色

FALLOFF_POWER 是一个衰减系数,skin shader中的值为1,也就是不衰减

技术图片

技术图片

再加上边缘高光

技术图片

总结

unity chan的技术分析差不多完了,主要的技术特点如下:

  1. 漫反射是用N.V的值去采样一张衰减贴图实现的,这张贴图还可以用来实现皮肤效果
  2. 通过一张高光反射贴图来控制高光的细节,以及哪些区域要显示反射
  3. 边缘光没用菲涅尔反射,而是采样rim贴图后去乘以漫反射值得到的边缘高光
  4. 描边不是纯色的,采样了纹理颜色,再做了暗化处理

最后再来两张照片吧~~ 这套渲染效果其实还是蛮不错的

技术图片

技术图片

以上是关于Unity酱~ 卡通渲染技术分析的主要内容,如果未能解决你的问题,请参考以下文章

23333

Unity Shader 卡通渲染 基于退化四边形的实时描边

Unite 2018 | 《崩坏3》:在Unity中实现高品质的卡通渲染(下)

游戏开发实战下载原神模型,PMX转FBX,导入到Unity中,卡通渲染,绑定人形动画(附Demo工程)

游戏开发实战下载原神模型,PMX转FBX,导入到Unity中,卡通渲染,绑定人形动画(附Demo工程)

游戏开发实战下载原神模型,PMX转FBX,导入到Unity中,卡通渲染,绑定人形动画(附Demo工程)