最近要搞个效果就是屏幕周围要有种向后拉的感觉
其实原理是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