Shader "Unlit/ScreenPosEffects"
{
Properties
{
_MainTex ("Texture", 2D) = "white" {}
_PCFOTex ("PCFO Texture", 2D) = "white" {}
_PCFOTexDrawSize ("PCFOTex Draw Size", float) = 1.0
_TrackedPosition ("Tracked position", Vector) = (0, 0, 0, 0)
}
SubShader
{
Cull Off
ZWrite Off
ZTest Always
Pass
{
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
sampler2D _MainTex;
float4 _MainTex_ST;
sampler2D _PCFOTex;
float4 _PCFOTex_ST;
float _PCFOTexDrawSize;
float4 _TrackedPosition;
struct appdata
{
float4 vertex : POSITION;
float2 uv : TEXCOORD0;
};
struct v2f
{
float2 uv : TEXCOORD0;
float4 vertex : SV_POSITION;
};
v2f vert (appdata IN)
{
v2f OUT;
OUT.vertex = UnityObjectToClipPos(IN.vertex);
OUT.uv = IN.uv;
return OUT;
}
fixed4 frag (v2f IN) : SV_Target
{
fixed4 mainColor = tex2D(_MainTex, IN.uv);
fixed4 pyroColor = tex2D(_PCFOTex, IN.uv);
float2 posFactor = (IN.uv - 0.5) * (unity_OrthoParams.xy * 2);
float2 camWorldPos = posFactor + _WorldSpaceCameraPos.xz;
float blendFactor = saturate(distance(camWorldPos, _TrackedPosition.xz + 0.5) * _PCFOTexDrawSize);
mainColor.rgb = lerp(pyroColor.rgb, mainColor.rgb, blendFactor);
return mainColor;
}
ENDCG
}
}
}