卡通渲染--Dot3 Cel Shading

来源:互联网 发布:韩帅净水器多少钱淘宝 编辑:程序博客网 时间:2024/05/01 14:44

           按ShadeX 3中《Dot3 Cel Shading》的方法所渲染的卡通茶壶,简单的代码效果居然如此好。因为是卡通渲染,所以除了最后着色以外的大部分计算都可以移动到vertex shader中,不过因为我的代码是在普通渲染的基础上改的,所以vertex shader中只是做了基本的变换。另外如果加上高光,效果反而不真实了,直接用普通光照模型计算出的漫反射进行调整就能得出不错的效果。

普通渲染(漫反射+高光)+ 边缘轮廓线:

卡通着色:



多条过渡带:


完整的pixel shader代码:

void PixelShader(out half4 color : COLOR0,
 in float3 worldPos :TEXCOORD0,
 in float3 normal : TEXCOORD1)
{
   normal = normalize(normal);
   float3 lightVect = normalize( lightPos - worldPos);
   float diffuse = saturate( dot ( normal,lightVect));

    float3 eyeVect = normalize( eyePos - worldPos);
 
   half scale = saturate(dot( normal, eyeVect));

   int scaleFactor = floor(scale * shaders);
   scale = scaleFactor / shaders; 
 
    if(scale < exclude / shaders)
   {
     color.xyz = 0;
   }
    else
  {
    diffuseColor = lightColor * diffuseColor * diffuse;
    color.xyz = diffuseColor * scale + diffuse / shaders;
  }
  color.w = 1.0;   
}

      shaders是颜色带的数量,exclude是边缘轮廓线宽度,上面中间的三幅图中shaders=4,exclude=1。

原创粉丝点击