[Unity3D] 战场电视屏幕抖动扭曲Shader
来源:互联网 发布:2016科普知识网络竞赛 编辑:程序博客网 时间:2024/04/28 02:34
由于项目需要,弄了一个屏幕抖动Shader,直接看效果吧,UGUI Shader。
注意:使用的时候需要两张噪音贴图
注意:使用的时候需要两张噪音贴图
Shader "Effect/SimpleHeadEffect"
{
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
_StencilComp ("Stencil Comparison", Float) = 8
_Stencil ("Stencil ID", Float) = 0
_StencilOp ("Stencil Operation", Float) = 0
_StencilWriteMask ("Stencil Write Mask", Float) = 255
_StencilReadMask ("Stencil Read Mask", Float) = 255
_ColorMask ("Color Mask", Float) = 15
_NoiseTex ("Alpha Texture", 2D) = "white" {}
_NoiseTex2 ("Alpha Texture", 2D) = "white" {}
_DistortionFreq ("distortionFreq", Float) = 5
_BKColor ("BKColor", Color) = (0.5,0.5,0.5,1)
_Scale ("Scale", Float) = 256
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Stencil
{
Ref [_Stencil]
Comp [_StencilComp]
Pass [_StencilOp]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
}
Cull Off
Lighting Off
ZWrite Off
ZTest [unity_GUIZTestMode]
Blend SrcAlpha OneMinusSrcAlpha
ColorMask [_ColorMask]
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
half2 texcoord0 : TEXCOORD0;
half2 texcoord1 : TEXCOORD1;
};
fixed4 _Color;
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
OUT.texcoord0 = IN.texcoord;
OUT.texcoord1 = half2(IN.texcoord.x + _CosTime.y * 0.25, IN.texcoord.y + frac(_Time.y));
#ifdef UNITY_HALF_TEXEL_OFFSET
OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
#endif
OUT.color = IN.color * _Color;
return OUT;
}
sampler2D _MainTex;
sampler2D _NoiseTex;
sampler2D _NoiseTex2;
float _DistortionFreq;
float _DistortionRoll;
half4 _BKColor;
fixed4 frag(v2f IN) : SV_Target
{
half2 tex0 = IN.texcoord0;
half2 tex1 = IN.texcoord1;
half dis = frac(tex0.y * _DistortionFreq + 0.5 * _Time.y);
dis *= (1 - dis);
dis /= 1 + _CosTime.y * 200 * abs(tex0.y);
tex0.x += dis * (tex2D(_NoiseTex2, tex1).r - 0.5);
half4 color = tex2D(_MainTex, tex0);
float noise = tex2D(_NoiseTex, tex1 * 4).r - 0.2;
color.rgb = lerp(color.rgb, _BKColor, 1 - color.a) * noise * 3;
color.a = 1;
return color;
}
ENDCG
}
}
}
{
Properties
{
[PerRendererData] _MainTex ("Sprite Texture", 2D) = "white" {}
_Color ("Tint", Color) = (1,1,1,1)
_StencilComp ("Stencil Comparison", Float) = 8
_Stencil ("Stencil ID", Float) = 0
_StencilOp ("Stencil Operation", Float) = 0
_StencilWriteMask ("Stencil Write Mask", Float) = 255
_StencilReadMask ("Stencil Read Mask", Float) = 255
_ColorMask ("Color Mask", Float) = 15
_NoiseTex ("Alpha Texture", 2D) = "white" {}
_NoiseTex2 ("Alpha Texture", 2D) = "white" {}
_DistortionFreq ("distortionFreq", Float) = 5
_BKColor ("BKColor", Color) = (0.5,0.5,0.5,1)
_Scale ("Scale", Float) = 256
}
SubShader
{
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Stencil
{
Ref [_Stencil]
Comp [_StencilComp]
Pass [_StencilOp]
ReadMask [_StencilReadMask]
WriteMask [_StencilWriteMask]
}
Cull Off
Lighting Off
ZWrite Off
ZTest [unity_GUIZTestMode]
Blend SrcAlpha OneMinusSrcAlpha
ColorMask [_ColorMask]
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float4 vertex : SV_POSITION;
fixed4 color : COLOR;
half2 texcoord0 : TEXCOORD0;
half2 texcoord1 : TEXCOORD1;
};
fixed4 _Color;
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = mul(UNITY_MATRIX_MVP, IN.vertex);
OUT.texcoord0 = IN.texcoord;
OUT.texcoord1 = half2(IN.texcoord.x + _CosTime.y * 0.25, IN.texcoord.y + frac(_Time.y));
#ifdef UNITY_HALF_TEXEL_OFFSET
OUT.vertex.xy += (_ScreenParams.zw-1.0)*float2(-1,1);
#endif
OUT.color = IN.color * _Color;
return OUT;
}
sampler2D _MainTex;
sampler2D _NoiseTex;
sampler2D _NoiseTex2;
float _DistortionFreq;
float _DistortionRoll;
half4 _BKColor;
fixed4 frag(v2f IN) : SV_Target
{
half2 tex0 = IN.texcoord0;
half2 tex1 = IN.texcoord1;
half dis = frac(tex0.y * _DistortionFreq + 0.5 * _Time.y);
dis *= (1 - dis);
dis /= 1 + _CosTime.y * 200 * abs(tex0.y);
tex0.x += dis * (tex2D(_NoiseTex2, tex1).r - 0.5);
half4 color = tex2D(_MainTex, tex0);
float noise = tex2D(_NoiseTex, tex1 * 4).r - 0.2;
color.rgb = lerp(color.rgb, _BKColor, 1 - color.a) * noise * 3;
color.a = 1;
return color;
}
ENDCG
}
}
}
0 0
- [Unity3D] 战场电视屏幕抖动扭曲Shader
- Shader屏幕扭曲效果
- Unity3D 屏幕空间雪场景Shader渲染
- Unity 热扭曲Shader
- unity Shader 扭曲效果
- Unity教程之-Unity3d实现屏幕抖动效果
- Unity Shader Example 4 (扭曲)
- Unity跑酷扭曲shader
- shader之——扭曲
- 智能电视—小米的下一个战场?
- 智能电视,品牌营销的新战场
- [Unity3D]Shader编程之动态屏幕遮罩
- Unity3d Shader
- unity3d shader
- Unity3D shader
- Unity3D Shader
- Unity3D -- Shader
- Unity3D: Shader
- SVN中trunk,branches,tags用法详解
- 数据结构学习之链表
- Andorid获取本地电话的方法
- js之执行环境(作用域)与作用域链深入剖析3
- Linux IO 多路复用详解
- [Unity3D] 战场电视屏幕抖动扭曲Shader
- Oracle触发器详解
- 集合初探(八)
- ABAP 获取 状态的两个函数 STATUS_TEXT_EDIT 和 STATUS_READ 的简单介绍
- Redis和Memcache对比及选择
- HTML5中History 新特性使用方法详解
- 脏读、幻读、重复读、串行化
- 数据结构学习之栈、队列等
- HTML+js+css实现点击图片弹出上传文件窗口的两种思路