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

Embossed(浮雕效果)

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

效果如下图所示:

源代码如下:

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

//浮雕特效

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

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;

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

效果:

 

1、  滤色Screen

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

代码:

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

c=tex2D(input,uv);

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

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

效果:

 

 

【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]的更多相关文章

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

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[DirectionalBlur] 方位模糊是一个按照指定角度循环位移并叠加纹理,最后平均颜色值并输出的一种特效. ...

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

    原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[BandedSwirl] 因工作原因,需要在Silverlight中使用Pixel Shader技术,这对于我来 ...

  3. V-rep学习笔记:Reflexxes Motion Library 3

    路径规划 VS 轨迹规划 轨迹规划的目的是将输入的简单任务描述变为详细的运动轨迹描述.注意轨迹和路径的区别:Trajectory refers to a time history of positio ...

  4. OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波

    http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...

  5. 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记

    机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...

  6. V-rep学习笔记:Reflexxes Motion Library 2

    VREP中的simRMLMoveToPosition函数可以将静态物体按照设定的运动规律移动到指定的目标位置/姿态.If your object is dynamically enabled, it ...

  7. 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)

    再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...

  8. HMM的学习笔记1:前向算法

    HMM的学习笔记 HMM是关于时序的概率模型.描写叙述由一个隐藏的马尔科夫链随机生成不可观測的状态随机序列,再由各个状态生成不可观測的状态随机序列,再由各个状态生成一个观測而产生观測的随机过程. HM ...

  9. jvm学习笔记一(垃圾回收算法)

    一:垃圾回收机制的原因 java中,当没有对象引用指向原先分配给某个对象的内存时候,该内存就成为了垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息 ...

随机推荐

  1. OCulus Rift 游戏开发六原则

    本文章由cartzhang编写,转载请注明出处. 所有权利保留. 文章链接:http://blog.csdn.net/cartzhang/article/details/46685477 作者:car ...

  2. php 文件夹是否存在,不存在就创建

    $lujing = "./nihao/wohao"; if(!is_dir($liujing)){ mkdir(iconv("UTF-8", "GBK ...

  3. thinkphp3.2.3 excel导出,下载文件,包含图片

    关于导出后出错的问题 https://segmentfault.com/q/1010000005330214 https://blog.csdn.net/ohmygirl/article/detail ...

  4. Linux下安装Oracle11G(虚拟机)

    1.内存设置为2G及以上2.设置swap: (1)root登录 (2)建立swap文件,如在/tmp下建立swapfree作为交换文件. # cd /tmp #dd if=/dev/zero of=s ...

  5. Ntp配置文件详解

    1. http://www.ine.com/resources/ntp-authentication.htm 2. http://blog.chinaunix.net/uid-773723-id-16 ...

  6. Android 面试之横竖屏切换的Activity生命周期

    public class EngineerJspActivity extends Activity { private static String Tag = "EngineerJspAct ...

  7. html常用属性border-radius、linear-gradient怎么使用

    html常用属性border-radius.linear-gradient怎么使用 一.总结 一句话总结: 1.border-radius: 8px 8px 8px 8px !important; 2 ...

  8. ionic新手教程第三课-在项目中使用requirejs分离controller文件和server文件

    继上篇教程中提到的,我们新建一个简单的tabs类型的Ionic项目. 依据文件夹文件我们知道,系统自己主动创建了一个controller文件和server文件,而且把全部的控制器和服务都写到这两个文件 ...

  9. 使用蒲公英来发布iOS内侧版本

    1.生成ipa包 这里不介绍正规的打包方式(选择真机调试-编译成功以后-工具product-archive-....) 下面介绍快速打包方式: 1)选择真机调试-编译成功以后右击下图.app文件,选择 ...

  10. 三次握手、四次握手、backlog

    TCP:三次握手.四次握手.backlog及其他   TCP是什么 首先看一下OSI七层模型: 然后数据从应用层发下来,会在每一层都加上头部信息进行封装,然后再发送到数据接收端,这个基本的流程中每个数 ...