Holographic.shader 3.6 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139
  1. // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
  2. Shader "FORGE3D/Holographic" {
  3. Properties {
  4. _MainTex ("Interlace Mask", 2D) = "white" {}
  5. _bLayerColorA ("Tint Color A", Color) = (0.5,0.5,0.5,0.5)
  6. _bLayerColorB ("Tint Color B", Color) = (0.5,0.5,0.5,0.5)
  7. _bLayerColorC ("Tint Color C", Color) = (0.5,0.5,0.5,0.5)
  8. _Inter("Interlace scale: Back, X, Y | UV Speed", Vector) = (0.1,200,100,50)
  9. _FresPow("Surface Factor", float) = 0
  10. _FresMult("Surface Mult", float) = 0
  11. _FresPowOut("Edge Factor", float) = 0
  12. _FresMultOut("Edge Mult", float) = 0
  13. _InvFade ("Soft Fade Factor", Range(0.01,3.0)) = 1.0
  14. _Fade ("Fade Factor", Range(0.0,1.0)) = 1.0
  15. }
  16. Category {
  17. Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
  18. Blend OneMinusDstColor One
  19. AlphaTest Greater .01
  20. ColorMask RGB
  21. Cull Back Lighting Off ZWrite Off
  22. SubShader {
  23. Pass {
  24. CGPROGRAM
  25. #pragma vertex vert
  26. #pragma fragment frag
  27. #pragma multi_compile_particles
  28. #include "UnityCG.cginc"
  29. struct appdata_t {
  30. float4 vertex : POSITION;
  31. fixed4 color : COLOR;
  32. float2 texcoord : TEXCOORD0;
  33. float4 normal: NORMAL;
  34. };
  35. struct v2f {
  36. float4 vertex : SV_POSITION;
  37. fixed4 color : COLOR;
  38. float2 texcoord : TEXCOORD0;
  39. #ifdef SOFTPARTICLES_ON
  40. float4 projPos : TEXCOORD1;
  41. #endif
  42. float3 normalDir : TEXCOORD2;
  43. float3 posWorld : TEXCOORD3;
  44. float4 screenPos : TEXCOORD4;
  45. };
  46. sampler2D _MainTex;
  47. fixed4 _bLayerColorA, _bLayerColorB, _bLayerColorC;
  48. float4 _MainTex_ST;
  49. float _FresPow, _FresMult;
  50. float _FresPowOut, _FresMultOut;
  51. float4 _Inter;
  52. sampler2D_float _CameraDepthTexture;
  53. float _InvFade;
  54. float _Fade;
  55. v2f vert (appdata_t v)
  56. {
  57. v2f o;
  58. o.vertex = mul(UNITY_MATRIX_MVP, v.vertex);
  59. #ifdef SOFTPARTICLES_ON
  60. o.projPos = ComputeScreenPos (o.vertex);
  61. COMPUTE_EYEDEPTH(o.projPos.z);
  62. #endif
  63. o.color = v.color;
  64. o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
  65. o.normalDir = normalize(mul(unity_ObjectToWorld, float4(v.normal.xyz,0)).xyz);
  66. o.posWorld = mul(unity_ObjectToWorld, v.vertex);
  67. o.screenPos = ComputeScreenPos(o.vertex);
  68. return o;
  69. }
  70. float4 frag (v2f i) : COLOR
  71. {
  72. #ifdef SOFTPARTICLES_ON
  73. float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)));
  74. float partZ = i.projPos.z;
  75. float fade = saturate (_InvFade * (sceneZ-partZ));
  76. i.color.a *= fade;
  77. #endif
  78. float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
  79. float4 objectOrigin = mul(unity_ObjectToWorld, float4(0.0,0.0,0.0,1.0) );
  80. float dist = distance(_WorldSpaceCameraPos.xyz, objectOrigin.xyz);
  81. float2 wcoord = i.screenPos.xy / i.screenPos.w;
  82. wcoord *= dist * _Inter.x;
  83. float3 nMask = tex2D(_MainTex, wcoord + float2(0, _Time.x * _Inter.w));
  84. wcoord.x *= _Inter.y;
  85. wcoord.y *= _Inter.z;
  86. float3 hMask = tex2D(_MainTex, wcoord + float2(0, _Time.x * _Inter.w));
  87. float fresnel = pow(abs(dot(viewDirection, i.normalDir)), _FresPow) * _FresMult;
  88. float3 bLayer = lerp(_bLayerColorA, _bLayerColorB, fresnel);
  89. float fresnelOut = pow(1 - abs(dot(viewDirection, i.normalDir)), _FresPowOut) * _FresMultOut;
  90. float3 bLayerC = _bLayerColorC * fresnelOut;
  91. float3 final = saturate(bLayer + bLayerC + hMask * (bLayer + bLayerC) + nMask * (bLayer + bLayerC)) * i.color.a;
  92. return float4(final * _Fade, 1);
  93. }
  94. ENDCG
  95. }
  96. }
  97. }
  98. }