Spine-SkeletonLit-URP-2D.shader 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308
  1. Shader "Universal Render Pipeline/2D/Spine/Skeleton Lit"
  2. {
  3. Properties
  4. {
  5. [NoScaleOffset] _MainTex ("Main Texture", 2D) = "black" {}
  6. [NoScaleOffset] _MainColor ("Main Color", Color) = (1,1,1,1)
  7. [NoScaleOffset] _MaskTex("Mask", 2D) = "white" {}
  8. _LiuGuang("LiuGuang", 2D) = "white" {}
  9. [Gamma][HDR] _LiuGuangColor ("LiuGuangColor", Color) = (1,1,1,1)
  10. [Toggle(_STRAIGHT_ALPHA_INPUT)] _StraightAlphaInput("Straight Alpha Texture", Int) = 0
  11. [MaterialToggle(_LIGHT_AFFECTS_ADDITIVE)] _LightAffectsAdditive("Light Affects Additive", Float) = 0
  12. [HideInInspector] _StencilRef("Stencil Reference", Float) = 1.0
  13. [Enum(UnityEngine.Rendering.CompareFunction)] _StencilComp("Stencil Compare", Float) = 0.0 // Disabled stencil test by default
  14. _LiuGuangTime("LiuGuangTime", Float) = 0
  15. _ViewportPointY("屏幕视点Y坐标", Float) = 0
  16. _EnableFog("启用全局雾", Float) = 1
  17. _Fogstrength("强度", Float) = 0
  18. _FogColor("雾的颜色", Color) = (1,1,1,1)
  19. _Freeze("Freeze", Float) = 0
  20. _freezeNoises ("冰冻噪音图", 2D) = "black" {}
  21. _freezeSurface ("冰面贴图", 2D) = "black" {}
  22. _freezeTransition ("冰面过度图", 2D) = "black" {}
  23. _freezeAddColor ("冰冻叠加颜色", Color) = (0,0,0,0)
  24. _freezeAddStrength("冰冻强度", Float) = 0
  25. _freezeWorldX("冰冻起始的X值", Float) = 0
  26. _freezePow("冰冻Pow值", Float) = 8
  27. _dis("冰冻差值", Float) = 8
  28. }
  29. HLSLINCLUDE
  30. #include "Packages/com.unity.render-pipelines.universal/ShaderLibrary/Core.hlsl"
  31. ENDHLSL
  32. SubShader
  33. {
  34. // UniversalPipeline tag is required. If Universal render pipeline is not set in the graphics settings
  35. // this Subshader will fail.
  36. Tags
  37. {
  38. "Queue" = "Transparent" "RenderType" = "Transparent" "RenderPipeline" = "UniversalPipeline" "IgnoreProjector" = "True"
  39. }
  40. Cull Off
  41. ZWrite off
  42. // ZTest On
  43. Stencil
  44. {
  45. Ref[_StencilRef]
  46. Comp[_StencilComp]
  47. Pass Keep
  48. }
  49. Pass
  50. {
  51. Tags
  52. {
  53. "LightMode" = "Universal2D"
  54. }
  55. ZWrite off
  56. Cull Off
  57. // ZTest On
  58. Blend One OneMinusSrcAlpha
  59. HLSLPROGRAM
  60. // Required to compile gles 2.0 with standard srp library
  61. #pragma prefer_hlslcc gles
  62. #pragma exclude_renderers d3d11_9x
  63. #pragma multi_compile USE_SHAPE_LIGHT_TYPE_0 __
  64. #pragma multi_compile USE_SHAPE_LIGHT_TYPE_1 __
  65. #pragma multi_compile USE_SHAPE_LIGHT_TYPE_2 __
  66. #pragma multi_compile USE_SHAPE_LIGHT_TYPE_3 __
  67. #pragma multi_compile _ _LIGHT_AFFECTS_ADDITIVE
  68. // Fog
  69. // #pragma multi_compile_local __ ENABLE_FOG_ON
  70. // #pragma multi_compile __ ENABLE_FOG_ON
  71. // #pragma multi_compile ENABLE_FOG_ON __
  72. // #pragma shader_feature _ ENABLE_FOG_ON
  73. // #pragma multi_compile __ ENABLE_FOG
  74. #include <HLSLSupport.cginc>
  75. struct Attributes
  76. {
  77. float3 positionOS : POSITION;
  78. half4 color : COLOR;
  79. float2 uv : TEXCOORD0;
  80. };
  81. struct Varyings
  82. {
  83. float4 positionCS : SV_POSITION;
  84. half4 color : COLOR0;
  85. float2 uv : TEXCOORD0;
  86. float2 lightingUV : TEXCOORD1;
  87. float2 scenUV : TEXCOORD2;
  88. float3 objectPos : TEXCOORD3;
  89. };
  90. // Spine related keywords
  91. #pragma shader_feature _ _STRAIGHT_ALPHA_INPUT
  92. #pragma vertex CombinedShapeLightVertex
  93. #pragma fragment CombinedShapeLightFragment
  94. #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/LightingUtility.hlsl"
  95. #define USE_URP
  96. #include "../Include/SpineCoreShaders/Spine-Common.cginc"
  97. TEXTURE2D(_MainTex);
  98. SAMPLER(sampler_MainTex);
  99. TEXTURE2D(_MaskTex);
  100. SAMPLER(sampler_MaskTex);
  101. uniform half4 _ExploreFogColor;
  102. float _ViewportPointY;
  103. float _EnableFog;
  104. fixed _GrayFloat;
  105. float4 _MainColor;
  106. float4 _TextrueRect[3];
  107. sampler2D _LiuGuang;
  108. float4 _MainTex_TexelSize;
  109. float4 _LiuGuang_ST;
  110. float4 _LiuGuangColor;
  111. float4 _vertextPos;
  112. float _LiuGuangTime;
  113. float _Fogstrength;
  114. float4 _FogColor;
  115. float _Freeze;
  116. sampler2D _freezeNoises;
  117. // float4 _freezeNoises_TexelSize;
  118. // float4 _freezeNoises_ST;
  119. sampler2D _freezeSurface;
  120. sampler2D _freezeTransition;
  121. float4 _freezeAddColor;
  122. float _freezeAddStrength;
  123. float _freezePow;
  124. float _dis;
  125. float _freezeWorldX;
  126. #if USE_SHAPE_LIGHT_TYPE_0
  127. SHAPE_LIGHT(
  128. 0
  129. )
  130. #endif
  131. #if USE_SHAPE_LIGHT_TYPE_1
  132. SHAPE_LIGHT(
  133. 1
  134. )
  135. #endif
  136. #if USE_SHAPE_LIGHT_TYPE_2
  137. SHAPE_LIGHT(
  138. 2
  139. )
  140. #endif
  141. #if USE_SHAPE_LIGHT_TYPE_3
  142. SHAPE_LIGHT(
  143. 3
  144. )
  145. #endif
  146. Varyings CombinedShapeLightVertex(Attributes v)
  147. {
  148. Varyings o = (Varyings)0;
  149. o.objectPos = v.positionOS;
  150. o.positionCS = TransformObjectToHClip(v.positionOS);
  151. o.uv = v.uv;
  152. float4 clipVertex = o.positionCS / o.positionCS.w;
  153. o.scenUV = mul(unity_ObjectToWorld, v.positionOS);
  154. o.lightingUV = ComputeScreenPos(clipVertex).xy;
  155. o.color = PMAGammaToTargetSpace(v.color);
  156. return o;
  157. }
  158. #include "Packages/com.unity.render-pipelines.universal/Shaders/2D/Include/CombinedShapeLightShared.hlsl"
  159. float GetGaoPing(float2 uv, half4 mainUV0Color)
  160. {
  161. float2 res = _MainTex_TexelSize.xy;
  162. half4 nostionColor = mainUV0Color;
  163. half4 nostionColor1 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv + float2(1, 0) * res);
  164. half4 nostionColor2 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv + float2(-1, 0) * res);
  165. half4 nostionColor3 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv + float2(0, 1) * res);
  166. half4 nostionColor4 = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, uv + float2(0, -1) * res);
  167. half4 c = (nostionColor1 + nostionColor2 + nostionColor3 + nostionColor4) / 4;
  168. return distance(c, nostionColor);
  169. }
  170. half4 GetFreezeColor(half4 mainUV0Color, Varyings i)
  171. {
  172. // _freezePow = 8;
  173. float d = GetGaoPing(i.uv, mainUV0Color) * 10;
  174. half4 noisesColor = tex2D(_freezeNoises, i.objectPos.xy) * d;
  175. half4 surfaceColor = tex2D(_freezeSurface, i.objectPos.xy) * _freezeAddStrength * _freezeAddColor;
  176. half4 freezeColor = noisesColor + surfaceColor;
  177. half4 TransitionColor = tex2D(_freezeTransition, i.objectPos.xy);
  178. float worldX = i.objectPos.x + TransitionColor.x;
  179. float d1 = worldX - _freezeWorldX;
  180. d1 = max(d1, 0);
  181. float d1Pow = pow(d1, _freezePow);
  182. d1Pow = clamp(d1Pow, 0, 1);
  183. float d2 = worldX - _freezeWorldX - _dis;
  184. d2 = max(d2, 0);
  185. float d2Pow = pow(d2, _freezePow);
  186. d2Pow = clamp(d2Pow, 0, 1);
  187. float d1posSub = (d1Pow - d2Pow) * 10;
  188. float qianColor = pow(d1, _freezePow * -1);
  189. qianColor = clamp(qianColor, 0, 1);
  190. half4 c = freezeColor * qianColor;
  191. return c + d1posSub;
  192. }
  193. half4 CombinedShapeLightFragment(Varyings i) : SV_Target
  194. {
  195. half4 uv0Color = SAMPLE_TEXTURE2D(_MainTex, sampler_MainTex, i.uv);
  196. half4 tex = uv0Color * _MainColor;
  197. tex.rgb = lerp(tex.rgb, _FogColor.rgb, _Fogstrength);
  198. tex.rgb *= tex.a;
  199. #if defined(_STRAIGHT_ALPHA_INPUT)
  200. #endif
  201. half4 main = tex * i.color;
  202. #if !defined(_LIGHT_AFFECTS_ADDITIVE)
  203. if (i.color.a == 0)
  204. return main;
  205. #endif
  206. half4 mask = SAMPLE_TEXTURE2D(_MaskTex, sampler_MaskTex, i.uv);
  207. SurfaceData2D surfaceData;
  208. InputData2D inputData;
  209. surfaceData.albedo = main.rgb;
  210. surfaceData.alpha = 1;
  211. surfaceData.mask = mask;
  212. inputData.uv = i.uv;
  213. inputData.lightingUV = i.lightingUV;
  214. half4 color = half4(CombinedShapeLightShared(surfaceData, inputData).rgb, main.a);
  215. float gray = dot(color.rgb, float3(0.299, 0.587, 0.114));
  216. float3 grayColor = fixed3(gray, gray, gray);
  217. color.rgb = lerp(color.rgb, grayColor, _GrayFloat);
  218. float2 pointUV = _TextrueRect[0].xy;
  219. float2 maxUV = _TextrueRect[0].zw;
  220. if (i.uv.x > pointUV.x && i.uv.x < maxUV.x && i.uv.y > pointUV.y && i.uv.y < maxUV.y)
  221. {
  222. float2 blUV = (i.scenUV - _vertextPos.xy) / (_vertextPos.zw - _vertextPos.xy);
  223. float2 liuGuangUV = blUV * _LiuGuang_ST.xy + _LiuGuang_ST.zw - _LiuGuangTime;
  224. liuGuangUV = float2(liuGuangUV.x, liuGuangUV.y);
  225. color.rgb += tex2D(_LiuGuang, liuGuangUV).rgb * color.a * _LiuGuangColor;
  226. }
  227. pointUV = _TextrueRect[1].xy;
  228. maxUV = _TextrueRect[1].zw;
  229. if (i.uv.x > pointUV.x && i.uv.x < maxUV.x && i.uv.y > pointUV.y && i.uv.y < maxUV.y)
  230. {
  231. float2 blUV = (i.scenUV - _vertextPos.xy) / (_vertextPos.zw - _vertextPos.xy);
  232. float2 liuGuangUV = blUV * _LiuGuang_ST.xy + _LiuGuang_ST.zw - _LiuGuangTime;
  233. liuGuangUV = float2(liuGuangUV.x, liuGuangUV.y);
  234. color.rgb += tex2D(_LiuGuang, liuGuangUV).rgb * color.a * _LiuGuangColor;
  235. }
  236. if (_Freeze > 1)
  237. {
  238. half4 freezeColor = GetFreezeColor(uv0Color, i) * color.a;
  239. color.rgb += freezeColor.rgb;
  240. }
  241. return color;
  242. }
  243. ENDHLSL
  244. }
  245. }
  246. FallBack "Universal Render Pipeline/2D/Sprite-Lit-Default"
  247. }