Unity Shader之Post Effect抖动重影效果

来源:互联网 发布:四川卫生统计网络直报 编辑:程序博客网 时间:2024/06/06 07:31
大家想一下对整张照片做处理,不管照片中物体的材质处理的方法叫Post Effect
有些效果,比如雾啊,Bloom拉,模糊拉,Hdr,都需要用到PostEffect,我们需要单独写一个脚本,绑定在Camera上
在OnRenderImage这个回调函数中,用Graphics.Blit这个方法来处理,传入我们制作的shader即可,下面是我自己写的一个抖动效果

纪念碑谷中就有类似的效果,房子要塌了,整个屏幕就开始动起来,配合上重影的效果,多了一种身临其境的感觉

先看Camera上的脚本:
using UnityEngine;[ExecuteInEditMode]public class CameraRenderTexture : MonoBehaviour{    public Material Mat;    public void OnRenderImage(RenderTexture source, RenderTexture destination)    {        Graphics.Blit(source, destination, Mat);//source就是由片源着色器输出的最终屏幕rendertexture,des是经过//我们处理后renderTexture,处理过程由mat这个材质球来决定,这个材//质球请绑定上之后的shader    }}

shader部分,其中有两个偏移量,分别控制两个影子抖动,一个幅度大一些,一个小一些,一个快些一个慢些,注意这里的_MainTex其实就是上面输入的SourceTexture
Shader "Custom/Shaking"{Properties{_MainTex("Texture", 2D) = "white" {}_OffsetX1("Offset X1", Range(-0.5, 0.5)) = 0.0_OffsetX2("Offset X2", Range(-0.5, 0.5)) = 0.0}SubShader{Tags{ "RenderType" = "Opaque" }Pass{CGPROGRAM#pragma vertex vert_img#pragma fragment frag#include "UnityCG.cginc"sampler2D _MainTex;float _OffsetX1;float _OffsetX2;fixed4 frag(v2f_img i) : SV_Target{_OffsetX1 = sin(_Time.y*20)/20;_OffsetX2 = sin(_Time.y *10) / 100;fixed4 col = fixed4(1, 1, 1, 1);fixed4 scol = tex2D(_MainTex, i.uv+ float2(_OffsetX2, 0));float2 uv = i.uv + float2(_OffsetX1, 0);col.rgb = tex2D(_MainTex, uv).rgb;return col*0.9+scol*0.5;}ENDCG}}}




原创粉丝点击