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

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

specular部分:
ILM的b通道控制高光阈值,r通道控制高光强度。
UnityShader应用——卡通渲染
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应用——卡通渲染
SSS贴图的作用主要就是对于阴影部分的颜色进行进一步的点缀,使得冷暖色调的过度更加明显,效果更好看。

相关文章:

  • 2021-06-06
  • 2022-12-23
  • 2021-09-12
  • 2021-06-01
  • 2021-07-24
  • 2022-12-23
  • 2022-01-03
  • 2021-11-24
猜你喜欢
  • 2022-12-23
  • 2022-01-20
  • 2021-12-04
  • 2022-12-23
  • 2021-12-11
  • 2021-12-25
相关资源
相似解决方案