123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293 |
-
- Shader "YXJ/Effect/DistortionExternal" {
- Properties{
- _Alpha("Alpha", range(0,1)) = 1
- _MaskTex("Mask Tex (A)", 2D) = "white" {}
- _NoiseTex("Noise Texture (RG)", 2D) = "white" {}
- _HeatTime("Heat Time", range(0,1.5)) = 1
- _HeatForce("Heat Force", range(0,5)) = 0.1
- _CutAlpha("小于此alpha 跟着顶点a做渐变", range(0,1)) = 0.3
- }
- Category{
- Tags{ "Queue" = "Transparent+100" "IgnoreProjector" = "True" "RenderType" = "Transparent" "LightMode" = "Grab_YXJ" }
- Cull Off Lighting Off ZWrite Off
- SubShader{
- LOD 300
- Blend SrcAlpha OneMinusSrcAlpha
- AlphaTest Greater .01
- Pass{
- HLSLPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma fragmentoption ARB_precision_hint_fastest
- #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
- #include "Packages/com.unity.render-pipelines.core/ShaderLibrary/Color.hlsl"
- struct appdata_t {
- float4 vertex : POSITION;
- half4 color : COLOR;
- float2 texcoord: TEXCOORD0;
- };
- struct v2f {
- float4 vertex : SV_POSITION;
- half4 color : COLOR;
- float2 uvMask : TEXCOORD0;
- float4 uvGrab : TEXCOORD1;
- };
- sampler2D _MaskTex;
- float4 _MaskTex_ST;
- sampler2D _NoiseTex;
- float4 _NoiseTex_ST;
-
- half _HeatTime;
- half _HeatForce;
- half _Alpha;
- half _CutAlpha;
- SAMPLER(_CameraTransparentTexture);
- v2f vert(appdata_t v)
- {
- v2f o;
- o.vertex = TransformObjectToHClip(v.vertex);
- o.color = v.color;
- o.uvMask = TRANSFORM_TEX(v.texcoord, _MaskTex);
- #if UNITY_UV_STARTS_AT_TOP
- float scale = -1.0;
- #else
- float scale = 1.0;
- #endif
- o.uvGrab.xy = (float2(o.vertex.x, o.vertex.y * scale) + o.vertex.w) * 0.5;
- o.uvGrab.zw = o.vertex.zw;
- return o;
- }
-
- half4 frag(v2f i) : COLOR
- {
-
- half4 offsetColor1 = tex2D(_NoiseTex, i.uvMask - _Time.xz * _HeatTime);
- i.uvGrab.x += ((offsetColor1.r + offsetColor1.r) - 1) * _HeatForce;
- i.uvGrab.y += ((offsetColor1.g + offsetColor1.g) - 1) * _HeatForce;
- half4 grab = tex2D(_CameraTransparentTexture, i.uvGrab.xy / i.uvGrab.w);
- half4 mask = tex2D(_MaskTex, i.uvMask);
- half maskA = min(mask.r, mask.a) * _Alpha;
- if(i.color.a < _CutAlpha) maskA = maskA * i.color.a;
- return half4(grab.rgb, maskA);
- }
- ENDHLSL
- }
- }
-
- }
- }
|