【HLSL学习笔记】WPF Shader Effect Library算法解读之[Embossed]
原文:【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]的更多相关文章
- 【HLSL学习笔记】WPF Shader Effect Library算法解读之[DirectionalBlur]
原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[DirectionalBlur] 方位模糊是一个按照指定角度循环位移并叠加纹理,最后平均颜色值并输出的一种特效. ...
- 【HLSL学习笔记】WPF Shader Effect Library算法解读之[BandedSwirl]
原文:[HLSL学习笔记]WPF Shader Effect Library算法解读之[BandedSwirl] 因工作原因,需要在Silverlight中使用Pixel Shader技术,这对于我来 ...
- V-rep学习笔记:Reflexxes Motion Library 3
路径规划 VS 轨迹规划 轨迹规划的目的是将输入的简单任务描述变为详细的运动轨迹描述.注意轨迹和路径的区别:Trajectory refers to a time history of positio ...
- OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波
http://blog.csdn.net/chenyusiyuan/article/details/8710462 OpenCV学习笔记(27)KAZE 算法原理与源码分析(一)非线性扩散滤波 201 ...
- 机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记
机器学习实战(Machine Learning in Action)学习笔记————06.k-均值聚类算法(kMeans)学习笔记 关键字:k-均值.kMeans.聚类.非监督学习作者:米仓山下时间: ...
- V-rep学习笔记:Reflexxes Motion Library 2
VREP中的simRMLMoveToPosition函数可以将静态物体按照设定的运动规律移动到指定的目标位置/姿态.If your object is dynamically enabled, it ...
- 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT)
再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Bluestein算法+分治FFT+FFT的优化+任意模数NTT) 目录 再探快速傅里叶变换(FFT)学习笔记(其三)(循环卷积的Blueste ...
- HMM的学习笔记1:前向算法
HMM的学习笔记 HMM是关于时序的概率模型.描写叙述由一个隐藏的马尔科夫链随机生成不可观測的状态随机序列,再由各个状态生成不可观測的状态随机序列,再由各个状态生成一个观測而产生观測的随机过程. HM ...
- jvm学习笔记一(垃圾回收算法)
一:垃圾回收机制的原因 java中,当没有对象引用指向原先分配给某个对象的内存时候,该内存就成为了垃圾.JVM的一个系统级线程会自动释放该内存块.垃圾回收意味着程序不再需要的对象是"无用信息 ...
随机推荐
- 21、根据(应用程序)虚拟驱动vivi的使用过程彻底分析摄像头驱动(有ioctrl分析)
videobuf2-core.h中的vb2_buffer,记录了v4l2_buffer ,驱动可以对vb2_buffer的v4l2_buffer进行操控, vb2_buffer是v4l2框架层的代码, ...
- [TypeStyle] Compose CSS classes using TypeStyle
We will demonstrate composing classes using the utility classes function. classes is also what we re ...
- js中数组如何使用
js中数组如何使用 一.总结 一句话总结:new Array()和[]两种方法都可以创建数组. 二.js中创建数组,并往数组里添加元素 数组的创建 var arrayObj = new Array() ...
- Android中动态设置GridView的列数、列宽和行高
在使用GridView时我们知道,列数是可以通过设计时的属性来设置的,列的宽度则是根据列数和GridView的宽度计算出来的.但是有些时候我们想实现列数是动态改变的效果,即列的宽度保持某个值,列的数量 ...
- bash keys
stty-a CTRL-S and CTRL-Q are called flow-control characters. Bash readline 使用技巧_Linux编程_操作系统_希赛网 htt ...
- ios app初始化和数据迁移的设计思路
整体思路 一般app启动之后,都有一个初始化的过程. 此外兴许app升级,还须要考虑数据迁移.所以初始化和数据迁移的框架.在初期的版本号就要考虑好 总结一下我们的app採取的方案: 1.在持久化的文件 ...
- 联想笔记本装win7
http://jingyan.baidu.com/article/7c6fb42862d63a80642c90b8.html http://bbs.thinkworldshop.com.cn/thre ...
- Go语言:正則表達式的使用
Go语言的正則表達式使用非常easy.演示样例代码: package test import ( "fmt" "regexp" ) func RegixBase ...
- 判断navigation中父控制器类型
for (UIViewController *controller in self.navigationController.viewControllers) { if ([controller is ...
- A GUIDE TO UNDERSTANDINGDISCRETIONARY ACCESS CONTROL INTRUSTED SYSTEMS
1. INTRODUCTION The main goal of the National Computer Security Center is to encourage the widespr ...