UnityShader应用——卡通渲染

UnityShader应用——卡通渲染_第1张图片
1.描边
外描边之前记过。
内描边的实现:ILM的a通道控制内描边的范围。
UnityShader应用——卡通渲染_第2张图片
也就是黑色区域对应uv上的地方进行需要内描边。在最后与光照模型算出的颜色相乘就行。

2.光照模型
diffuse部分:
ILM的g通道控制漫反射阴影的阈值。
UnityShader应用——卡通渲染_第3张图片
shadowRange = g值 * 顶点颜色(平时没有的数据) 共同决定受光范围。也就是说黑色的区域,是不想受到阴影的。
diffuse = max( 0 , dot (worldNormal, lightDir)) 光照和法线夹角越小,值越大。
diffuse > shadowRange ? 主色调 :阴影色*SSS

specular部分:
ILM的b通道控制高光阈值,r通道控制高光强度。
UnityShader应用——卡通渲染_第4张图片
specular = pow(max(0.0, dot(reflectDir, viewDir)), 32);
specular > ILM.b ? ILM.r * 高光色 : 无高光

边缘光:
rim =1- saturate( dot (viewDir, worldNormal));
平滑处理一下: rim = smoothstep(min, max, rim);
rimColor = rim * _RimColor;

最后model = 贴图色 * (diffuse + specular + rimColor);

3.SSS
UnityShader应用——卡通渲染_第5张图片
SSS贴图的作用主要就是对于阴影部分的颜色进行进一步的点缀,使得冷暖色调的过度更加明显,效果更好看。

你可能感兴趣的:(UnityShader)