Unity屏幕后处理四周拉伸效果

最近要搞个效果就是屏幕周围要有种向后拉的感觉

其实原理是uv偏移,就是越往里的偏移越少,越往外偏移越大

实现:就是算uv和拉伸中心点距离来计算偏移

其实这个效果是全屏效果,靠近中心点位置也会进行偏移,只是偏移的幅度非常小,小到看不见

我这里使用pow几次方来计算,次方越大则越靠近屏幕的强度越少,这样子很小的数值就会接近0

下面是实现的shader


Shader "ScreenEffect/ScreenStretch"
{

	Properties
	{
		_MainTex("Base (RGB)", 2D) = "white" {}
		_WeakFactor("Weak Factor",Range(1,5)) = 0
	}

	CGINCLUDE
	uniform sampler2D _MainTex;
	//拉伸强度
	uniform float _StretchFactor;
	//拉伸中心点xy值(0-1)屏幕空间
	uniform float4 _ScreenPos;
	//衰减强度
	uniform float _WeakFactor;
	#include "UnityCG.cginc"

	fixed4 frag(v2f_img i) : SV_Target
	{
		float2 dir = i.uv - _ScreenPos.xy;
		//这里算出偏移强度,这里引用了几次方运算,_Weak越大则越靠近屏幕点的则拉伸越小
		float power = pow(length(dir), _WeakFactor) * _StretchFactor;
		//这里编译坐标
		float2 Offset = power * normalize(dir);
		float2 uv = i.uv + Offset;
		return tex2D(_MainTex, uv);
	}
	ENDCG

	SubShader
	{
		Pass
		{
			ZTest Always
			Cull Off
			ZWrite Off
			Fog{ Mode off }

			CGPROGRAM
#pragma fragmentoption ARB_precision_hint_fastest 
#pragma vertex vert_img
#pragma fragment frag 
			ENDCG
		}
	}
}

下面是工程地址

链接:https://pan.baidu.com/s/1UpmoOF2ISCyDG1yjl6s30w 
提取码:h0w0 

猜你喜欢

转载自blog.csdn.net/SnoopyNa2Co3/article/details/86658804