154 lines
5.2 KiB
Plaintext
154 lines
5.2 KiB
Plaintext
|
Shader "SpatialFramework/FauxBackgroundOverlayBlurURP"
|
||
|
{
|
||
|
Properties
|
||
|
{
|
||
|
_Blur("Blur", Range(0, 10)) = 1.5
|
||
|
_Alpha("Alpha", Range(0, 1)) = 1
|
||
|
_GradientSize("Gradient Size", Range(0, 6)) = 2
|
||
|
_MainTex("Noise Texture (REQUIRED for Blur Noise)", 2D) = "white" {}
|
||
|
}
|
||
|
|
||
|
SubShader
|
||
|
{
|
||
|
PackageRequirements
|
||
|
{
|
||
|
"com.unity.render-pipelines.universal": "12.1.3"
|
||
|
}
|
||
|
|
||
|
Tags { "RenderPipeline" = "UniversalRenderPipeline" "Queue" = "Transparent-1" "LightMode" = "Always" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
|
||
|
|
||
|
ZWrite On
|
||
|
ZTest LEqual
|
||
|
Lighting Off
|
||
|
Blend SrcAlpha OneMinusSrcAlpha
|
||
|
|
||
|
Pass
|
||
|
{
|
||
|
Tags { "LightMode" = "UniversalForward" }
|
||
|
|
||
|
HLSLPROGRAM
|
||
|
#pragma vertex vert
|
||
|
#pragma fragment frag
|
||
|
|
||
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
|
||
|
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/ShaderVariablesFunctions.hlsl"
|
||
|
#include "Packages/com.unity.render-pipelines.core/ShaderLibrary/EntityLighting.hlsl"
|
||
|
|
||
|
SAMPLER(_MainTex);
|
||
|
|
||
|
CBUFFER_START(UnityPerMaterial)
|
||
|
half _Alpha;
|
||
|
half _Blur;
|
||
|
half _GradientSize;
|
||
|
CBUFFER_END
|
||
|
|
||
|
struct appdata_t
|
||
|
{
|
||
|
half4 position : POSITION;
|
||
|
half3 normal : NORMAL;
|
||
|
half2 texcoord : TEXCOORD0;
|
||
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
};
|
||
|
|
||
|
struct v2f
|
||
|
{
|
||
|
half4 position : POSITION;
|
||
|
half3 worldPos : TEXCOORD0;
|
||
|
half2 cleanUV : TEXCOORD2;
|
||
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
};
|
||
|
|
||
|
v2f vert(appdata_t v)
|
||
|
{
|
||
|
v2f output;
|
||
|
UNITY_SETUP_INSTANCE_ID(v);
|
||
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
||
|
output.position = TransformObjectToHClip(v.position.xyz);
|
||
|
output.worldPos = mul(unity_ObjectToWorld, v.position).xyz;
|
||
|
output.cleanUV = v.texcoord;
|
||
|
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
half4 frag(v2f input) : SV_Target
|
||
|
{
|
||
|
half2 uvPos = abs(input.cleanUV - float2(0.5, 0.5));
|
||
|
half uvMax = max(uvPos.x, uvPos.y);
|
||
|
half fadeFromBorderAmount = 1 - clamp(0, 1, pow(uvMax, _GradientSize) * 2);
|
||
|
half3 reflectionDir = -normalize(GetWorldSpaceViewDir(input.worldPos));
|
||
|
half noise = tex2D(_MainTex, input.cleanUV).r;
|
||
|
half4 reflectionData = SAMPLE_TEXTURECUBE_LOD(unity_SpecCube0, samplerunity_SpecCube0, reflectionDir, 1.5);
|
||
|
half3 reflectionColor = DecodeHDREnvironment(reflectionData, unity_SpecCube0_HDR);
|
||
|
return half4(reflectionColor, clamp(0, 1 - pow((uvMax * 2), _GradientSize * (_Blur / 10)), fadeFromBorderAmount) * _Alpha * noise);
|
||
|
}
|
||
|
ENDHLSL
|
||
|
}
|
||
|
}
|
||
|
|
||
|
SubShader
|
||
|
{
|
||
|
Tags{ "RenderPipeline" = " " "Queue" = "Transparent-1" "LightMode" = "Always" "IgnoreProjector" = "True" "RenderType" = "Transparent" }
|
||
|
|
||
|
ZWrite On
|
||
|
ZTest LEqual
|
||
|
Lighting Off
|
||
|
Blend SrcAlpha OneMinusSrcAlpha
|
||
|
|
||
|
Pass
|
||
|
{
|
||
|
CGPROGRAM
|
||
|
#pragma vertex vert
|
||
|
#pragma fragment frag
|
||
|
#include "UnityCG.cginc"
|
||
|
|
||
|
half _Alpha;
|
||
|
half _Blur;
|
||
|
half _GradientSize;
|
||
|
sampler2D _MainTex;
|
||
|
|
||
|
struct appdata_t
|
||
|
{
|
||
|
half4 position : POSITION;
|
||
|
half3 normal : NORMAL;
|
||
|
half2 texcoord : TEXCOORD0;
|
||
|
UNITY_VERTEX_INPUT_INSTANCE_ID
|
||
|
};
|
||
|
|
||
|
struct v2f
|
||
|
{
|
||
|
half4 position : POSITION;
|
||
|
half3 worldPos : TEXCOORD0;
|
||
|
half2 cleanUV : TEXCOORD2;
|
||
|
UNITY_VERTEX_OUTPUT_STEREO
|
||
|
};
|
||
|
|
||
|
v2f vert(appdata_t v)
|
||
|
{
|
||
|
v2f output;
|
||
|
UNITY_SETUP_INSTANCE_ID(v);
|
||
|
UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(output);
|
||
|
|
||
|
output.position = UnityObjectToClipPos(v.position);
|
||
|
output.worldPos = mul(unity_ObjectToWorld, v.position).xyz;
|
||
|
output.cleanUV = v.texcoord;
|
||
|
|
||
|
return output;
|
||
|
}
|
||
|
|
||
|
fixed4 frag(v2f input) : SV_Target
|
||
|
{
|
||
|
half2 uvPos = abs(input.cleanUV - float2(0.5, 0.5));
|
||
|
half uvMax = max(uvPos.x, uvPos.y);
|
||
|
half fadeFromBorderAmount = 1 - clamp(0, 1, pow(uvMax, _GradientSize) * 2);
|
||
|
half3 reflectionDir = -normalize(UnityWorldSpaceViewDir(input.worldPos));
|
||
|
half noise = tex2D(_MainTex, input.cleanUV).r;
|
||
|
half4 reflectionData = UNITY_SAMPLE_TEXCUBE_LOD(unity_SpecCube0, reflectionDir, 1.5);
|
||
|
half3 reflectionColor = DecodeHDR(reflectionData, unity_SpecCube0_HDR);
|
||
|
return half4(reflectionColor, clamp(0, 1 - pow((uvMax * 2), _GradientSize * (_Blur / 10)), fadeFromBorderAmount) * _Alpha * noise);
|
||
|
}
|
||
|
ENDCG
|
||
|
}
|
||
|
}
|
||
|
}
|