Files
3d-bxqz/Assets/Tazo_fx/Shader/refraction_nornal.shader
2026-05-06 17:36:41 +08:00

81 lines
2.2 KiB
Plaintext

Shader "Sprites/Refraction" {
Properties {
//_MainTex ("Sprite Texture", 2D) = "white" {}
_Refraction ("Refraction", Range (0.00, 100.0)) = .1
_DistortTex ("Distortion Map (RGB)", 2D) = "white" {}
_RefractionLayer ("Refraction Render Texture (RGB)", 2D) = "white" {}
_ScreenPadding ("Screen Padding", Range(0.00, 0.5)) = .1
_PixelSize("Pixel Size", float) = 0.004166
}
SubShader {
Tags
{
"Queue"="Transparent"
"IgnoreProjector"="True"
"RenderType"="Transparent"
"PreviewType"="Plane"
"CanUseSpriteAtlas"="True"
}
Cull Off
Lighting Off
ZWrite Off
Blend One OneMinusSrcAlpha
CGPROGRAM
// Upgrade NOTE: excluded shader from OpenGL ES 2.0 because it does not contain a surface program or both vertex and fragment programs.
#pragma target 4.0
#pragma exclude_renderers gles
#pragma surface surf NoLighting keepalpha
#pragma vertex vert
fixed4 LightingNoLighting(SurfaceOutput s, fixed3 lightDir, fixed atten){
fixed4 c;
c.rgb = s.Albedo;
c.a = s.Alpha;
return c;
}
sampler2D _DistortTex;
sampler2D _RefractionLayer;
//sampler2D _MainTex;
float _Refraction;
float _ScreenPadding;
float _PixelSize;
struct Input {
float2 uv_DistortTex;
//float2 uv_MainTex;
fixed4 color;
float3 worldRefl;
float4 screenPos;
INTERNAL_DATA
};
void vert (inout appdata_full v, out Input o) {
UNITY_INITIALIZE_OUTPUT(Input,o);
o.color = v.color;
}
void surf (Input IN, inout SurfaceOutput o) {
fixed4 c = IN.color;
float3 distort = tex2D(_DistortTex, IN.uv_DistortTex).rgb;
distort = (distort*float3(1.0, 1.0, 2.0)) - float3(0.0, 0.0, 1.0);
distort = distort*_Refraction;
float2 offset = float2(distort.b, distort.r-distort.g);
offset = round(offset)*float2(_PixelSize, _PixelSize);
IN.screenPos.xy = IN.screenPos.xy*float2(1-(_ScreenPadding+_ScreenPadding), 1-(_ScreenPadding+_ScreenPadding));
IN.screenPos.xy = IN.screenPos.xy+float2(_ScreenPadding, _ScreenPadding);
IN.screenPos.xy = offset + IN.screenPos.xy;
float4 refrColor = tex2Dproj(_RefractionLayer, IN.screenPos);
o.Emission = refrColor.rgb * c.a;
o.Alpha = c.a;
}
ENDCG
}
Fallback "Transparent/VertexLit"
}