【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]

原文:【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]

Embossed(浮雕效果)

         浮雕效果主要有两个参数:Amount和Width。Amount控制浮雕边缘的对比度,Width参数控制浮雕效果的精细程度,数值越小越精细。

效果如下图所示:

【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]

源代码如下:

+++++++++++++++++++++++++++++++++++++++++++++

//浮雕特效

//数量,一个控制雕刻边缘对比度的参数,数值越大,对比越强

float Amount : register(C0);

//位移,一个用于控制雕刻效果宽度的参数,数值越小,雕刻效果越细腻、清晰

float Width : register(C1);

sampler2D implicitInputSampler : register(S0);

float4 main(float2 uv : TEXCOORD) : COLOR

{

         //用一个中性灰不透明的纹理当做默认的纹理

    float4 outC = {0.5, 0.5, 0.5, 1.0};

  //通过两次正反的位置偏移叠加产生边缘错位的效果,可以用Amount参数来控制错位的边缘对比度

    outC -= tex2D(implicitInputSampler, uv - Width) * Amount;

    outC += tex2D(implicitInputSampler, uv + Width) * Amount;

    //上面的纹理叠加难免会产生色彩混合后不等于中性灰的地方,所以再将纹理变成灰度

    outC.rgb = (outC.r + outC.g + outC.b) / 3.0f;

    return outC;

}

+++++++++++++++++++++++++++++++++++++++++++++

 

 

这个特效中主要是利用中性灰色来区分高光边缘和暗部边缘,通过对纹理进行错位来突出纹理的边缘,通过数量值来控制高光和暗部的对比。

这种多次采样并叠加的方式就类似于Photoshop中的图层混合模式,下面简单做几个PS中默认的混合模式特效:

1、  正片叠底Multiply

算法:C=A*B

代码:

+++++++++++++++++++

float4 c;

c=tex2D(input,uv);

c*=tex2D(input,uv);

    return c;

+++++++++++++++++++

效果:

【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]

 

1、  滤色Screen

算法:C=1-(1-A)*(1-B)

代码:

+++++++++++++

c=tex2D(input,uv);

c=1-(1-c)*(1-c);

+++++++++++++

效果:

【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]

 

 

上一篇:Extjs6(五)——写一个包含toolbar、form、grid的子页面


下一篇:WPF InkCanvas 毛笔效果