卡通渲染--Dot3 Cel Shading

    技术2022-05-11  54

               按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。


    最新回复(0)