Unity Shader之Post Effect抖动重影效果

版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/qq984786645/article/details/73607315
大家想一下对整张照片做处理,不管照片中物体的材质处理的方法叫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
	}
	}
}




展开阅读全文

没有更多推荐了,返回首页