URP/Loading_Fixed
Shader "URP/Loading_Fixed"
{
Properties
{
[PerRendererData]_MainTex ("Texture", 2D) = "white" {}
_Color ("Color", Color) = (1,1,1,1)
[Toggle(UNITY_UI_ALPHACLIP)] _UseUIAlphaClip ("Use Alpha Clip", Float) = 0
[Toggle] _Invert("Invert", Float) = 0
_Radius("Radius", Range(-0.5,1.5)) = 0.1
_Smooth("Smooth", Range(0,10)) = 0.2
_OffsetX("Offset Center U",Range(0,1)) = 0.5
_OffsetY("Offset Center V",Range(0,1)) = 0.5
_StampTex("Stamp", 2D) = "black" {}
_StampColor("StampColor", Color) = (1,1,1,1)
_GradientColorTop("Gradient Color Top", Color) = (1,1,1,1)
_GradientColorDown("Gradient Color Down", Color) = (1,1,1,1)
}
SubShader
{
Tags
{
"RenderType"="Transparent"
"RenderPipeline"="UniversalPipeline"
"IgnoreProjector"="True"
"Queue"="Transparent"
"CanUseSpriteAtlas"="True"
}
Cull Off
Lighting Off
ZWrite Off
ZTest Off
Blend SrcAlpha OneMinusSrcAlpha
Pass
{
HLSLPROGRAM
#pragma target 3.0
#pragma vertex Vert
#pragma fragment Frag
#pragma multi_compile _ UNITY_UI_ALPHACLIP
#include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
TEXTURE2D(_MainTex);
SAMPLER(sampler_MainTex);
TEXTURE2D(_StampTex);
SAMPLER(sampler_StampTex);
CBUFFER_START(UnityPerMaterial)
half4 _Color;
half4 _MainTex_ST;
half4 _MainTex_TexelSize;
half4 _StampTex_ST;
half4 _StampColor;
half4 _GradientColorTop;
half4 _GradientColorDown;
half _OffsetX;
half _OffsetY;
half _Radius;
half _Smooth;
half _Invert;
CBUFFER_END
struct Attributes
{
float4 positionOS : POSITION; // 改为 float
half4 color : COLOR;
half2 uv : TEXCOORD0;
};
struct Varyings
{
float4 positionCS : SV_POSITION; // 改为 float
half4 color : COLOR;
half2 uv : TEXCOORD0;
half2 stampuv : TEXCOORD1;
};
Varyings Vert (Attributes IN)
{
Varyings OUT;
OUT.positionCS = TransformObjectToHClip(IN.positionOS);
OUT.uv = IN.uv;
// 等价于 TRANSFORM_TEX(IN.uv, _StampTex)
OUT.stampuv = IN.uv * _StampTex_ST.xy + _StampTex_ST.zw;
OUT.color = IN.color;
return OUT;
}
half4 Frag (Varyings IN) : SV_Target
{
half2 uv = IN.uv;
// 动态屏幕分辨率
half2 screen = GetScaledScreenParams();
half aspectRatio = screen.y / screen.x;
// 你的原始 alpha/圆环/反转等逻辑(按需打开)
half aspect = max(aspectRatio, 1e-4);
uv.y *= aspect; // 以水平宽度为基准 对应屏蔽 比例 X:(0,1) Y:(0,1*aspect)
half smoothV = _Smooth * 0.2h; // 0.2h 调节变化率
half alpha = distance(uv, half2(_OffsetX, _OffsetY * aspect)) - _Radius;
alpha = smoothstep(0.0h, smoothV, alpha);
half invOn = step(_Invert, 0.1h); // 反转
alpha = invOn * (1.0h - alpha) + (1.0h - invOn) * alpha;
half4 col = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, IN.uv) * IN.color * _Color;
col.a *= saturate(1.0h - alpha);
// 渐变与 Stamp(按需)
half3 grad = lerp(_GradientColorTop.rgb, _GradientColorDown.rgb, 1.0h - IN.uv.y);
col.rgb *= grad;
half stampA = SAMPLE_TEXTURE2D(_StampTex, sampler_StampTex, IN.stampuv).a;
col.rgb = lerp(col.rgb, _StampColor.rgb * col.rgb, stampA);
#ifdef UNITY_UI_ALPHACLIP
clip(col.a - 0.001h);
#endif
return col;
}
ENDHLSL
}
}
}简介
中心圆形过渡动画shader