unity3d shader之浮雕效果
浮雕就是对图像上的一个像素和它右下的那个像素的色差的一种处理
非常容易,只需要一个简单的算法
用fragment shader来实现
我们只看实现部分就好
在frag函数中
mc00mc = tex2D (_MainTex, i.uv_MainTex).rgb;
获取当前点的颜色
mc11 = tex2D (_MainTex, i.uv_MainTex+fixed2(1,1)/_Size).rgb;
获取当前点右下角(偏移了(1,1)个单位)的点的颜色,
由于CG函数tex2DSize函数(获取图片长宽的像素数)在unity中不能用,我也不知道用什么函数来替代它,就弄了个外部变量_Size方便调节
如果有什么函数能代替tex2DSize函数各位看官一定要告诉我
diffs = abs( mc00mc - mc11);
diffs为亮点颜色差
max0 = diffs.r>diffs.g?diffs.r:diffs.g;
max0 = max0>diffs.b?max0:diffs.b;
求出色差中rgb的最大值设为色差数
gray = clamp(max0+0.4 , 0, 1);
灰度值其实就是这个色差数
c = float4(gray.xxx,1)*_Color;
最终颜色
效果如下:
全部代码如下:
Shader "Custom/test" {Properties {_MainTex ("MainTex", 2D) = "white" {}_Size("Size", range(1,2048)) = 256//size_Color("Main Color",color)=(1,1,1,1)}SubShader {pass{Tags{"LightMode"="ForwardBase" }Cull offCGPROGRAM#pragma vertex vert#pragma fragment frag#include "UnityCG.cginc"float4 _Color;float _Size;sampler2D _MainTex;float4 _MainTex_ST;struct v2f {float4 pos:SV_POSITION;float2 uv_MainTex:TEXCOORD0;};v2f vert (appdata_full v) {v2f o;o.pos=mul(UNITY_MATRIX_MVP,v.vertex);o.uv_MainTex = TRANSFORM_TEX(v.texcoord,_MainTex);return o;}float4 frag(v2f i):COLOR{//浮雕就是对图像上的一个像素和它右下的那个像素的色差的一种处理float3 mc00mc = tex2D (_MainTex, i.uv_MainTex).rgb;//当前点的颜色float3 mc11 = tex2D (_MainTex, i.uv_MainTex+fixed2(1,1)/_Size).rgb;//当前点右下角(偏移了(1,1)个单位)的点的颜色,//由于CG函数tex2DSize函数(获取图片长宽的像素数)在unity中不能用,我也不知道用什么函数来替代它,就弄了个外部变量_Size方便调节float3 diffs = abs( mc00mc - mc11);//diffs为亮点颜色差float max0 = diffs.r>diffs.g?diffs.r:diffs.g;max0 = max0>diffs.b?max0:diffs.b;//求出色差中rgb的最大值设为色差数float gray = clamp(max0+0.4 , 0, 1);//灰度值其实就是这个色差数float4 c = 0;c = float4(gray.xxx,1)*_Color;//最终颜色return c;}ENDCG}//}
}
-----------------by wolf96 http://blog.csdn.net/wolf96
unity3d shader之浮雕效果相关推荐
- unity3d shader编程中GrabPass 在某些android手机上失效的解决方案
unity3d shader编程中GrabPass 在某些android手机上失效的解决方案 参考文章: (1)unity3d shader编程中GrabPass 在某些android手机上失效的解决 ...
- 【浅墨Unity3D Shader编程】之三 光之城堡篇:子着色器、通道与标签的写法 amp; 纹理混合...
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://hpw123.net/a/C__/kongzhitaichengxu/2014/1117/120.html 作者:毛星 ...
- Unity3D Shader入门指南(二)
关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...
- 猫都能学会的Unity3D Shader入门指南(二)
关于本系列 这是Unity3D Shader入门指南系列的第二篇,本系列面向的对象是新接触Shader开发的Unity3D使用者,因为我本身自己也是Shader初学者,因此可能会存在错误或者疏漏,如果 ...
- 【浅墨Unity3D Shader编程】之一 夏威夷篇:游戏场景的创建 第一个Shader的书写
本系列文章由@浅墨_毛星云 出品,转载请注明出处. 文章链接: http://blog.csdn.net/poem_qianmo/article/details/40723789 作者:毛星云(浅墨) ...
- 【游戏渲染】【译】Unity3D Shader 新手教程(1/6)
http://gad.qq.com/article/detail/7175490 该文章来自用户转载 点击阅读原文 刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散, ...
- Unity3D Shader 新手教程(1/6)
刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D Shader编程望而却步.该系列教程的第一篇文章(译者注:即本文,后续还有5篇文章) ...
- 【译】Unity3D Shader 新手教程(1/6)
刚开始接触Unity3D Shader编程时,你会发现有关shader的文档相当散,这也造成初学者对Unity3D Shader编程望而却步.该系列教程的第一篇文章(译者注:即本文,后续还有5篇文章) ...
- Unity3D Shader 入门
什么是Shader Shader(着色器)是一段能够针对3D对象进行操作.并被GPU所执行的程序.Shader并不是一个统一的标准,不同的图形接口的Shader并不相同.OpenGL的着色语言是GLS ...
最新文章
- python之路---迭代器和生成器
- 聊聊elasticsearch的RoutingService
- MAC下 Apache服务器配置
- 在IIS7中应用Application Request Routing配置反向代理
- ecplice中class.forname一直报错_英雄联盟LOL闪退,弹出吉格斯报错BUGSPLAT
- nginx在linux下是服务吗,[Linux]如何给Nginx添加服务
- php 声波图,Canvas 美丽的声波图
- oracle知识博客链接
- MySQL 取得两个时间相差的分钟数 及 常用时间函数
- 服务高可用利器——限流算法介绍与示例
- Responsive Web Design
- Crush Crouse 心理学笔记
- gstreamer/deepstream方面的博文,全网首发且唯一,有图为证
- python简单实现文件上传/下载
- Android UI线程
- 上次被 ArrayList 锤了一拳后,LinkedList 很不服气,做出最后一击
- 什么是keep-alive
- pytorch torchvision.ops.roi_align
- 郝小亮-读王坚《在线》:互联网能做的和没做的事还有很多
- 电信联通魔百盒烽火HG680-J/V系列-卡刷固件包(可救砖)