Unity Shaders and Effects Cookbook (2-7)实现 Photoshop 色阶效果
看完了这一书上的代码,然后在网上查找 Photoshop 色阶的一些解释,大致理解为:调整色阶就是调整亮度,也就是调整纹理 R、G、B 通道的数值大小。
下面是 Photoshop 中的直方图转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
X 轴表示 亮度,也就是 R 通道 值。
Y轴表示有多少个像素的颜色 的 R通道是这个值。
在 Shader 中调整 色阶,就是来调整 R、G、B的值。原理是这样,但是具体的算法,应该去问Adobe了……。
Shader "CookBookShaders/PhotoshopLevel"
{Properties {_MainTex ("Base (RGB)", 2D) = "white" {}_inBlack ("Input Black",Range(0,255)) = 0_inWhite ("Input White",Range(0,255)) = 255_outBlack ("Output Black",Range(0,255)) = 0_outWhite ("Output White",Range(0,255)) = 255_inGamma ("Input Gamma",Range(0,2)) = 1.61}SubShader {Tags { "RenderType"="Opaque" }LOD 200CGPROGRAM#pragma surface surf Lambertsampler2D _MainTex;float _inBlack;float _inWhite;float _outBlack;float _outWhite;float _inGamma;struct Input {float2 uv_MainTex;};float getPixelLevel(float pixelColor){float pixelResult;pixelResult = (pixelColor*255.0);//因为颜色是(0,1)范围的,这里要(0,255)参与计算pixelResult = max(0,pixelResult - _inBlack); //让 pixelColor也就是通道值,比如R的值,减去一个值 _inBlack ,就是变暗。pixelResult = saturate( pow( pixelResult/(_inWhite - _inBlack),_inGamma ));//用原来的亮度pixelResult除以 指定亮度与指定暗度的差值。得到值范围(1,n),pow进行次方运算。pixelResult = (pixelResult * (_outWhite - _outBlack) +_outBlack ) / 255.0;return pixelResult;}void surf (Input IN, inout SurfaceOutput o) {half4 c = tex2D (_MainTex, IN.uv_MainTex);float outRPixel = getPixelLevel(c.r);float outGPixel = getPixelLevel(c.g);float outBPixel = getPixelLevel(c.b);o.Albedo = float3(outRPixel,outGPixel,outBPixel);o.Alpha = c.a;}ENDCG} FallBack "Diffuse"
}
调节的效果图 转自http://blog.csdn.net/huutu http://www.thisisgame.com.cn
示例项目打包下载:
http://pan.baidu.com/s/1o8zRrnG
Unity Shaders and Effects Cookbook (2-7)实现 Photoshop 色阶效果相关推荐
- Unity Shaders and Effects Cookbook (3-6) 创建各向异性高光类型(Anisotropic) 模拟金属拉丝效果
这一次学习各向异性高光类型,名字真拗口,Anisotropic 这个英文单词也很拗口. 各向异性是模拟物体表面 沟槽方向性的高光反射类型,他会修改或延伸垂直方向上的高光. 比如模拟金属拉丝的效果,就可 ...
- Unity Shaders and Effects Cookbook (3-4) 使用高光贴图
在学习完上一节之后.已经了解了在Unity 中怎样实现一个高光 Shader ,可是会有一个问题.就是效果看起来不切实际,如以下的问题 我用一张图片贴到了Cube上面.然后用了一个高光材质,得到了下图 ...
- Unity Shaders and Effects Cookbook (7-2) Surface Shader 中实现 顶点动画
上一节中说了,在 Surface Shader 中,添加顶点函数,我们可以在 顶点函数中获取到 顶点数据,比如顶点颜色.顶点坐标等. 这一节学习获取顶点坐标,并且修改顶点坐标,来实现顶点动画. 简单介 ...
- Unity Shaders and Effects Cookbook (4-5)Cubemap与菲涅尔反射
菲涅尔是人名,他发现,当我们站在水中,直直的往下看水面,是看不到反射的太阳光的.而当我们往远处看时,就能看到很强的反光,也就是成语波光粼粼所体现的.这一现象就被命名为 菲涅尔反射. 刚看这一节的时候觉 ...
- Unity Shaders and Effects
https://www.baidu.com/link?url=o85V5QLsraCjMOmzJc6081Z3bsQRw4_hjoPki5igyrvrJExygnt2Ex-_oGmH60-wm2VU5 ...
- 【《Unity 2018 Shaders and Effects Cookbook》翻译提炼】(九)Physically - Based Rendering
制作过程中最重要的方面时效率,实时着色很昂贵,而Lambertian或BlinnPhong等技术是计算成本和现实之间的折中. 拥有更 强大的GPU允许我们逐步写更强大的光照模型和渲染引擎,目的是模 ...
- 22.01.23 《Unity 2018 Shaders and Effects Cookbook》笔记Chapter7
7.Fragment Shaders and Grab Passes vertex and fragment shader 对光照如何影响物体表面不感兴趣,不受物理限制,对非真实感的效果很好 使用#p ...
- 【《Unity 2018 Shaders and Effects Cookbook》翻译提炼】(三)法线贴图和透明材质
1.法线贴图 3D模型的每个三角形都有一个面向方向,这是它指向的方向.它通常用放置在三角形中心的箭头表示,并且与表面正交.面对方向在光线反射到表面上的方式中起着重要作用.如果两个相邻的三角形朝着不同的 ...
- 【《Unity 2018 Shaders and Effects Cookbook》翻译提炼】(八)BlinnPhong模型和 Anisotropic 高光(可用于金属性,头发)
这篇文章最好与前一篇连着看,自己可做比较. 1.BlinnPhong 模型 Blinn是计算和估计镜面反射的另一种更有效的方法.这是通过从 视图方向和光方向获得半矢量来完成饿.JimBlinn将它带入 ...
最新文章
- linux内核功能有,好消息!LINUX内核2.6.18终于支持实时功能了
- SAP 应用服务负载均衡的实现
- golang 可变参 不定参 函数 简介
- determination
- VTK:地标变换用法实战
- shell常见的文件属性检查
- 【OpenKruise v0.9.0】新增 Pod 重启、删除防护等重磅功能
- jenkins maven testng selenium自动化持续集成
- 【主席树】更为厉害(P3899)
- iOS modal view的关闭和显示问题
- 监控视图 oracle,Oracle“并行执行”之四——监控视图
- java循环标号_java 标号 break 自循环
- http协议 web开发的应用 笔记
- 5G怎样实现波束赋形?
- 买了基金之后要天天盯着吗?
- 走向.NET架构设计—第五章—业务层模式,原则,实践(后篇)
- AX 2012导入Demo数据
- win10多合一原版系统_如何制作Win10多合一系统安装盘
- Python+Cartopy绘制中国地图
- vulhub学习(1) ActiveMQ反序列化漏洞(CVE-2015-5254)复现