震屏效果


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. rabbitmq 启动报错 Failed to get nic info

    这个报错 基本搜索不到什么有效信息 解决办法: hostnamectl set-hostname xxx.local # 先把rabbitmq进程杀掉$ ps -ef | grep rabbitmq ...

  2. 警惕32位程序在MethodImplOptions.Synchronized在x64机器上的同步缺陷[z]

    https://www.cnblogs.com/junchu25/archive/2012/08/10/2631422.html 上周四产品上线一切运行正常,做了一点小改动后周四晚上发布,周五大量用户 ...

  3. unity 动态更新模型透明度

    RaycastHit[] hits; Vector3 normal = transform.position - target.position; hits = Physics.RaycastAll( ...

  4. vue中具名插槽的使用

    <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8&quo ...

  5. windows下运行Eigen

    参看:https://blog.csdn.net/zhujiahui622/article/details/50504678## 下载C++下的一个线性代数运算库Eigen并解压:http://eig ...

  6. 谷歌搜索技巧(转)https://www.runningcheese.com/google

    原文地址: Google是一个非常精密成熟的搜索引擎,其搜索结果的丰富性和准确度较其他搜索引擎都要好,但大多数用户都还只是停留在搜索框中输入一两个关键字,然后点击“搜索”按钮的阶段,这一过程是非常低效 ...

  7. docker--centos镜像安装tomcat jdk1.8 mysql部署java web项目

    一.下载centos7标准镜像及安装mysql5.7 在centos安装mysql5.7 二.安装jdk 1.查询可用jdk版本 yum search java|grep jdk 2.根据搜索到的jd ...

  8. 使用Tenorshare iCareFone for mac为iPhone做系统修复

    tenorshare icarefonemac中文版采用一键式方法来保护,修理,清洁,优化并最终加快您的iPhone,iPad和iPod的速度.它可以帮助您轻松解决所有iOS问题,并让您的iPhone ...

  9. Java的xml与map,与Bean互转

    xml与map互转,主要使用dom4j import org.dom4j.Document; import org.dom4j.DocumentException; import org.dom4j. ...

  10. ASP.NET Core使用EntityFrameworkCore CodeFrist

    1,安装环境: 如果是VS2015,确保已经升级至 update3或以上 .net core sdk (https://www.microsoft.com/net/download/core) vs2 ...