RO_Effect_Bing_01.shader 4.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. Shader "RO/RO_Effect_Bing_01"
  2. {
  3. Properties
  4. {
  5. _Color0("Color 0", Color) = (1,1,1,0)
  6. _Color1("Color 1", Color) = (0,0,0,0)
  7. _Float2("Float 2", Range( 0 , 1)) = 0.9
  8. _Vector0("Vector 0", Vector) = (0,0,0,0)
  9. [HideInInspector] _texcoord( "", 2D ) = "white" {}
  10. [HideInInspector] __dirty( "", Int ) = 1
  11. }
  12. SubShader
  13. {
  14. Tags{ "RenderType" = "Custom" "Queue" = "Transparent+0" "IsEmissive" = "true" }
  15. Cull Back
  16. ZWrite On
  17. Blend SrcAlpha OneMinusSrcAlpha
  18. CGINCLUDE
  19. #include "UnityPBSLighting.cginc"
  20. #include "Lighting.cginc"
  21. #pragma target 3.0
  22. struct Input
  23. {
  24. float4 vertexColor : COLOR;
  25. float3 worldPos;
  26. float3 worldNormal;
  27. float2 uv_texcoord;
  28. };
  29. uniform float4 _Color0;
  30. uniform float4 _Color1;
  31. uniform float4 _Vector0;
  32. uniform float _Float2;
  33. inline half4 LightingUnlit( SurfaceOutput s, half3 lightDir, half atten )
  34. {
  35. return half4 ( 0, 0, 0, s.Alpha );
  36. }
  37. void surf( Input i , inout SurfaceOutput o )
  38. {
  39. float3 ase_worldPos = i.worldPos;
  40. float3 ase_worldViewDir = normalize( UnityWorldSpaceViewDir( ase_worldPos ) );
  41. float3 ase_worldNormal = i.worldNormal;
  42. float fresnelNdotV16 = dot( ase_worldNormal, ase_worldViewDir );
  43. float fresnelNode16 = ( 0.0 + 1.0 * pow( 1.0 - fresnelNdotV16, _Vector0.x ) );
  44. float temp_output_76_0 = ( max( ( fresnelNode16 * _Vector0.y ) , saturate( ( ( 1.0 - ( i.uv_texcoord.x + 0.0 ) ) * _Vector0.z ) ) ) + 0.0 );
  45. float4 lerpResult20 = lerp( _Color0 , _Color1 , temp_output_76_0);
  46. o.Emission = ( i.vertexColor * saturate( lerpResult20 ) ).rgb;
  47. o.Alpha = ( i.vertexColor.a * (_Float2 + (saturate( temp_output_76_0 ) - 0.0) * (1.0 - _Float2) / (1.0 - 0.0)) );
  48. }
  49. ENDCG
  50. CGPROGRAM
  51. #pragma surface surf Unlit keepalpha fullforwardshadows
  52. ENDCG
  53. Pass
  54. {
  55. Name "ShadowCaster"
  56. Tags{ "LightMode" = "ShadowCaster" }
  57. ZWrite On
  58. CGPROGRAM
  59. #pragma vertex vert
  60. #pragma fragment frag
  61. #pragma target 3.0
  62. #pragma multi_compile_shadowcaster
  63. #pragma multi_compile UNITY_PASS_SHADOWCASTER
  64. #pragma skip_variants FOG_LINEAR FOG_EXP FOG_EXP2
  65. #include "HLSLSupport.cginc"
  66. #if ( SHADER_API_D3D11 || SHADER_API_GLCORE || SHADER_API_GLES || SHADER_API_GLES3 || SHADER_API_METAL || SHADER_API_VULKAN )
  67. #define CAN_SKIP_VPOS
  68. #endif
  69. #include "UnityCG.cginc"
  70. #include "Lighting.cginc"
  71. #include "UnityPBSLighting.cginc"
  72. sampler3D _DitherMaskLOD;
  73. struct v2f
  74. {
  75. V2F_SHADOW_CASTER;
  76. float2 customPack1 : TEXCOORD1;
  77. float3 worldPos : TEXCOORD2;
  78. float3 worldNormal : TEXCOORD3;
  79. half4 color : COLOR0;
  80. UNITY_VERTEX_INPUT_INSTANCE_ID
  81. UNITY_VERTEX_OUTPUT_STEREO
  82. };
  83. v2f vert( appdata_full v )
  84. {
  85. v2f o;
  86. UNITY_SETUP_INSTANCE_ID( v );
  87. UNITY_INITIALIZE_OUTPUT( v2f, o );
  88. UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO( o );
  89. UNITY_TRANSFER_INSTANCE_ID( v, o );
  90. Input customInputData;
  91. float3 worldPos = mul( unity_ObjectToWorld, v.vertex ).xyz;
  92. half3 worldNormal = UnityObjectToWorldNormal( v.normal );
  93. o.worldNormal = worldNormal;
  94. o.customPack1.xy = customInputData.uv_texcoord;
  95. o.customPack1.xy = v.texcoord;
  96. o.worldPos = worldPos;
  97. TRANSFER_SHADOW_CASTER_NORMALOFFSET( o )
  98. o.color = v.color;
  99. return o;
  100. }
  101. half4 frag( v2f IN
  102. #if !defined( CAN_SKIP_VPOS )
  103. , UNITY_VPOS_TYPE vpos : VPOS
  104. #endif
  105. ) : SV_Target
  106. {
  107. UNITY_SETUP_INSTANCE_ID( IN );
  108. Input surfIN;
  109. UNITY_INITIALIZE_OUTPUT( Input, surfIN );
  110. surfIN.uv_texcoord = IN.customPack1.xy;
  111. float3 worldPos = IN.worldPos;
  112. half3 worldViewDir = normalize( UnityWorldSpaceViewDir( worldPos ) );
  113. surfIN.worldPos = worldPos;
  114. surfIN.worldNormal = IN.worldNormal;
  115. surfIN.vertexColor = IN.color;
  116. SurfaceOutput o;
  117. UNITY_INITIALIZE_OUTPUT( SurfaceOutput, o )
  118. surf( surfIN, o );
  119. #if defined( CAN_SKIP_VPOS )
  120. float2 vpos = IN.pos;
  121. #endif
  122. half alphaRef = tex3D( _DitherMaskLOD, float3( vpos.xy * 0.25, o.Alpha * 0.9375 ) ).a;
  123. clip( alphaRef - 0.01 );
  124. SHADOW_CASTER_FRAGMENT( IN )
  125. }
  126. ENDCG
  127. }
  128. }
  129. //FallBack "Diffuse"
  130. }