震屏效果


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. Robot Return to Origin

    There is a robot starting at position (0, 0), the origin, on a 2D plane. Given a sequence of its mov ...

  2. excle 内部 超链接(锚点)

    超连接对象: 1.文档 2.本文档中的位置. 3.  本文重点  指定 链接到 xx表中的xx位置. 第三种连接  类似于 web文档的中 锚点 超连接 看下图 选 择本文档中的位置, 选择 工作表. ...

  3. 在进行商业运算时解决BigDecimal的精度丢失问题

    System.out.println(0.05+0.01); System.out.println(1.0-0.42); System.out.println(4.015*100); System.o ...

  4. L3-021 神坛(极角排序求三角形最小面积)

    在古老的迈瑞城,巍然屹立着 n 块神石.长老们商议,选取 3 块神石围成一个神坛.因为神坛的能量强度与它的面积成反比,因此神坛的面积越小越好.特殊地,如果有两块神石坐标相同,或者三块神石共线,神坛的面 ...

  5. spring注解式参数校验

    很痛苦遇到大量的参数进行校验,在业务中还要抛出异常或者返回异常时的校验信息,在代码中相当冗长,今天我们就来学习spring注解式参数校验. 其实就是:hibernate的validator. 开始啦. ...

  6. Bar 柱状图

    1.生成基本图形 向上向下分别生成12个数据,X为 0 到 11 的整数 ,Y是相应的均匀分布的随机数据. 使用的函数是plt.bar,参数为X和Y: import matplotlib.pyplot ...

  7. 国内最火的10款Java开源项目,都是国人开发,CMS居多

    原文链接:https://www.cnblogs.com/jimcsharp/p/8266954.html 国内的开源环境已经相当好,但是国内开发注重是应用,创新有但不多,从榜单可以看出,专门搞技术的 ...

  8. C#获取文件夹下面的所有文件名

    String path = @"X:\xxx\xxx";   //第一种方法 var files = Directory.GetFiles(path, "*.txt&qu ...

  9. Python批量执行oracle中的insert语句

    从oracle导出一个表的数据,导出的格式是insert语句,数据量30万. 直接在PL/SQL Developer中执行,速度非常慢,脚本中也是100条数据提交一次.因为需要的时间太长,每次中断后, ...

  10. Play中JSON序列化

    总的来说在scala体系下,对于习惯了java和c#这些常规开发的人来说,无论是akka-http还是play,就处理个json序列化与反序列化真他娘够费劲的. 根据经验,Json处理是比较简单的,但 ...