震屏效果


Shader:

////////////////////////////////////////////
///// CameraPlay - by VETASOFT 2017 /////
//////////////////////////////////////////// Shader "CameraPlay/Shake" {
Properties
{
_MainTex ("Base (RGB)", 2D) = "white" {}
_TimeX ("Time", Range(0.0, 1.0)) = 1.0
_ScreenResolution ("_ScreenResolution", Vector) = (.,.,.,.)
}
SubShader
{
Pass
{
ZTest Always
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
#pragma glsl
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform float _TimeX;
uniform float _Value;
uniform float _Value2;
uniform float _Value3;
uniform float4 _ScreenResolution;
struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float2 texcoord : TEXCOORD0;
float4 vertex : SV_POSITION;
float4 color : COLOR;
};
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color;
return OUT;
} float nrand(float2 n)
{
return frac(sin(dot(n.xy, float2(12.9898, 78.233)))* 43758.5453);
} float4 frag (v2f i) : COLOR
{
float2 uv = i.texcoord.xy;
float t = float(int(_TimeX * _Value));
float2 suv = float2(,);
suv.x = uv.x + _Value2 * nrand(t);
suv.y = uv.y + _Value3 * nrand(t + 23.0);
suv.x -=_Value2/;
suv.y -=_Value3/;
float3 col = tex2D(_MainTex,suv).rgb;
return float4(col,1.0);
}
ENDCG
}
}
}

Controller:

////////////////////////////////////////////
///// CameraPlay - by VETASOFT 2017 /////
//////////////////////////////////////////// using UnityEngine; public class ShakeController : MonoBehaviour
{
[HideInInspector] public Shader m_shader;
private float m_time = 1.0f;
private Vector4 m_screenResolution;
private Material m_material;
[HideInInspector] public float m_value = 0.5f;
[HideInInspector] public float m_size = 1f;
[HideInInspector] public float m_duration = 1f;
[HideInInspector] private float m_timer = 1f;
[HideInInspector] public float m_speed = 15f; Material material
{
get
{
if (m_material == null)
{
m_material = new Material(m_shader);
m_material.hideFlags = HideFlags.HideAndDontSave;
}
return m_material;
}
}
void Awake()
{
m_value = ;
m_timer = ;
m_shader = Shader.Find("CameraPlay/Shake");
if (!SystemInfo.supportsImageEffects)
{
enabled = false;
Debug.Log("手机不支持后处理...");
return;
} m_duration = 0.2f;
m_speed = ;
m_size = ;
} // Start Animation
void OnEnable()
{
m_value = ;
m_timer = ;
} void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
{
if (m_shader != null)
{
m_time += Time.deltaTime;
if (m_time > ) m_time = ;
material.SetFloat("_TimeX", m_time);
material.SetFloat("_Value", m_speed);
material.SetFloat("_Value2", m_size * 0.008f);
material.SetFloat("_Value3", m_size * 0.008f);
material.SetVector("_ScreenResolution", new Vector4(sourceTexture.width, sourceTexture.height, 0.0f, 0.0f));
Graphics.Blit(sourceTexture, destTexture, material);
}
else
{
Graphics.Blit(sourceTexture, destTexture);
}
}
void Update()
{ m_timer += Time.deltaTime * ( / m_duration);
if (m_timer > 1.1f) /*Object.Destroy(this);*/
this.enabled = false;
}
void OnDisable()
{
if (m_material)
{
DestroyImmediate(m_material);
}
}
}

使用方法:

  1.Shader和Controller拖进项目。Shader还要丢到Edit - Project Settings -Graphics 的Always included Shaders 中

  2.摄像机上挂载对应脚本,控制脚本的Enable属性即可

杂谈:

  Shader控制震屏比animation控制更简单,而且不易出错

波纹效果


Shader:

////////////////////////////////////////////
///// CameraPlay - by VETASOFT 2017 /////
//////////////////////////////////////////// Shader "CameraPlay/ShockWave"
{
Properties
{
_MainTex("Base (RGB)", 2D) = "white" {}
_TimeX("Time", Range(0.0, 1.0)) = 1.0
_ScreenResolution("_ScreenResolution", Vector) = (.,.,.,.)
}
SubShader
{
Pass
{ ZTest Always
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
//#pragma fragmentoption ARB_precision_hint_fastest
#pragma target 3.0
//#pragma glsl
#include "UnityCG.cginc"
uniform sampler2D _MainTex;
uniform float _TimeX;
uniform float _Value;
uniform float _Value2;
uniform float _Value3;
uniform float _Value4;
uniform float4 _ScreenResolution;
uniform float2 _MainTex_TexelSize; struct appdata_t
{
float4 vertex : POSITION;
float4 color : COLOR;
float2 texcoord : TEXCOORD0;
};
struct v2f
{
float2 texcoord : TEXCOORD0;
float4 vertex : SV_POSITION;
float4 color : COLOR;
};
v2f vert(appdata_t IN)
{
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.texcoord = IN.texcoord;
OUT.color = IN.color;
return OUT;
}
float4 frag(v2f i) : COLOR
{
float2 uv = i.texcoord.xy;
float2 uv2 = uv;
#if UNITY_UV_STARTS_AT_TOP
if (_MainTex_TexelSize.y < )
uv.y = - uv.y;
#endif
float Dist = distance(uv, float2(_Value, _Value2));
float Diff = (Dist - _Value3);
float v = (1.0 - pow(abs(Diff * 10.0), 0.8));
float vt = v * 0.02 * _Value4;
vt = saturate(vt);
uv2.x = uv2.x - vt;
uv2.y = uv2.y - vt;
float4 Color = tex2D(_MainTex, uv2);
Color.rgb += float3(vt, vt, vt); return Color;
}
ENDCG
}
}
}

Controller:

/***************************************
Editor: Tason
Version: v1.0
Last Edit Date: 2018-XX-XX
Tel: 328791554@qq.com
Function Doc: ***************************************/ using UnityEngine; public class WaveController : MonoBehaviour
{
[HideInInspector] public Shader m_shader;
private float m_time = 1.0f;
private Vector4 m_screenResolution;
private Material m_material;
[HideInInspector] public float m_posX = 0.5f;
[HideInInspector] public float m_posY = 0.5f;
[HideInInspector] public float m_value = 0.5f;
[HideInInspector] public float m_size = 1f;
[HideInInspector] public float m_duration = 1f;
[HideInInspector] private float m_timer = 1f; Material material
{
get
{
if (m_material == null)
{
m_material = new Material(m_shader);
m_material.hideFlags = HideFlags.HideAndDontSave;
}
return m_material;
}
} void Awake()
{
m_value = ;
m_timer = ;
m_shader = Shader.Find("CameraPlay/ShockWave");
if (!SystemInfo.supportsImageEffects)
{
enabled = false;
Debug.Log("手机不支持后处理...");
return;
} m_posX = 0.5f;
m_posY = 0.5f;
m_duration = 1.5f * ;
m_size = ;
} void OnRenderImage(RenderTexture sourceTexture, RenderTexture destTexture)
{
if (m_shader != null)
{
m_time += Time.deltaTime;
if (m_time > ) m_time = ;
material.SetFloat("_TimeX", m_time);
material.SetFloat("_Value", m_posX);
material.SetFloat("_Value2", m_posY);
material.SetFloat("_Value3", m_value);
material.SetFloat("_Value4", m_size);
material.SetVector("_ScreenResolution", new Vector4(sourceTexture.width, sourceTexture.height, 0.0f, 0.0f));
Graphics.Blit(sourceTexture, destTexture, material);
}
else
{
Graphics.Blit(sourceTexture, destTexture);
}
} void OnEnable()
{
m_value = ;
m_timer = ;
} private void Update()
{
m_timer += Time.deltaTime * ( / m_duration);
if (m_timer > 1.1f)
//Object.Destroy(this);
this.enabled = false; m_value = m_timer;
} void OnDisable()
{
if (m_material)
{
DestroyImmediate(m_material);
}
}
}

使用方法同“震屏”(同上)

资源链接:

  链接:https://pan.baidu.com/s/1ZcSskWxi3wMgYOU9rg4o-g 密码:vzfn

修改:

  1.Ondisable 中注释掉 DestroyImmediate() 函数!不需要销毁材质!

Shader 屏幕后期特效 Shake(震屏)&Wave(波纹)的更多相关文章

  1. fullpage 单屏高度超过屏幕高度,实现单屏内可以滚动并解决手机端单屏高度不正确的问题

    最近接触了好几次jquery.fullpage.js这个插件,实现整屏的滑动,效果很炫,用fullpage来实现也很简单,但是也碰到了一些问题和大家分享一下 1.单屏高度超过屏幕高度,实现单屏的滑动 ...

  2. 一款纯css3实现的发光屏幕旋转特效

    今天给大家带来一款纯css3实现的发光屏幕旋转特效.该屏幕由纯css3实现带发光旋转特效,效果图如下: 在线预览   源码下载 实现的代码. html代码: <div class="s ...

  3. Unity shader学习之屏幕后期效果之调整屏幕亮度,饱和度,对比度

    Unity的屏幕后期处理效果,使用MonoBehaviour.OnRenderImage来实现. 转载请注明出处:http://www.cnblogs.com/jietian331/p/7228063 ...

  4. Unity Shader 屏幕后效果——颜色校正

    屏幕后效果指的是,当前整个场景图已经渲染完成输出到屏幕后,再对输出的屏幕图像进行的操作. 在Unity中,一般过程通常是: 1.建立用于处理效果的shader和临时材质,给shader脚本传递需要控制 ...

  5. 用VBox虚拟机安装Android 屏幕90度翻转竖屏设置

    在虚拟机中安装好Android之后,有一些Android应用(比如UC浏览器.UC桌面)不能安装.但更有一些程序是可以安装,却自动顺时间旋转了90度,操作和看起来非常不爽! 这个情况下,在Androi ...

  6. Android 判断当前屏幕是横屏还是竖屏

       记录学习 /**  * 返回当前屏幕是否为竖屏.  * @param context  * @return 当且仅当当前屏幕为竖屏时返回true,否则返回false.  */  public s ...

  7. 迅为-ARM嵌入式开发一体化工业9.7寸屏幕 平板式智能触控屏

    产品名称:迅为9.7寸IPS高清屏幕 适用于:[iTOP-4412精英版][iTOP-4412全能版][iTOP-4418开发板][迅为-iMX6开发板] 分辨率:1024*768 触摸屏类型:电容屏 ...

  8. C# 图像处理:复制屏幕到内存中,拷屏操作

    /// <summary> /// 复制屏幕到内存中 /// </summary> /// <returns>返回内存流</returns> publi ...

  9. 如何确定拍照时,相机屏幕是横屏or竖屏?

    http://www.eoeandroid.com/thread-80028-1-1.html TAG_DATETIME时间日期 TAG_FLASH闪光灯 TAG_GPS_LATITUDE纬度 TAG ...

随机推荐

  1. Populate screen data automatically

    field zz_test-uname. module populate_record on chain-request. module populate_record input. ztlo_tes ...

  2. 2018-2019-2 20165315 《网络对抗技术》Exp2+ 后门进阶

    2018-2019-2 20165315 <网络对抗技术>Exp2+ 后门进阶 一.实验要求 以下三个课题三选一 1.其他专用后门工具研究(CROSSRAT ...) 2.恶意代码绑定技术 ...

  3. Python基础测试有关联的接口

    test_guanlian.py放在case文件夹下 test_guanlian.pyimport unittest import requestsfrom urllib.parse import u ...

  4. .net WebApi中使用swagger生成WepApi集成测试工具

    我在WebApi中使用swagger的时候发现会出现很多问题,搜索很多地方都没找到完全解决问题的方法,后面自己解决了,希望对于遇到同样问题朋友有帮助.我将先一步一步的演示项目中解决swagger遇到问 ...

  5. vue 打包后本地先自己启动服务 anywhere 非常好用

    :)nodejs服务器Anywhere Anywhere是一个随启随用的静态服务器,它可以随时随地将你的当前目录变成一个静态文件服务器的根目录. 一,安装node 在nodejs官网下载,安装后打开c ...

  6. LogXGEController: Error: XGE version 8.01 (build 1867) or higher is required for XGE shader

    找到Engine/Config/ConsoleVariables.ini 禁用XGEShaderCompile就可以了

  7. maven项目引用时,导入类报错,选择两个项目同时执行Maven update

    maven项目引用时,导入类报错,选择两个项目同时执行Maven update springboot引入第三方jar,需要扫描时加@ComponentScan("第三方的包名") ...

  8. JS判断一个数组中有无重复元素(数字)

    前段时间遇到了这个问题 也百度了很多 不过还是用自己的方法解决了 一个超级简单的方法 简单到令人发指 由于直接写文本太丑了 所以还是截图吧 嘻嘻嘻 假如有一个这样的数组 (这是假如  可能每个人的数据 ...

  9. 洛谷P1576||最小花费||dijkstra||双向建边!!

    题目描述 在n个人中,某些人的银行账号之间可以互相转账.这些人之间转账的手续费各不相同.给定这些人之间转账时需要从转账金额里扣除百分之几的手续费,请问A最少需要多少钱使得转账后B收到100元. 数据范 ...

  10. python 09 文件操作

    一 流程: #1. 打开文件,得到文件句柄并赋值给一个变量 #2. 通过句柄对文件进行操作 #3. 关闭文件 二 例子 #1. 打开文件,得到文件句柄并赋值给一个变量f=open('a.txt','r ...