NebulaStaticBoard.shader 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
  2. // Upgrade NOTE: replaced '_World2Object' with 'unity_WorldToObject'
  3. Shader "FORGE3D/Billboard Nebula"
  4. {
  5. Properties
  6. {
  7. _CoronaNoise("Texture", 2D) = "black" {}
  8. _CoronaColor("Color", Color) = (0.5,0.5,0.5,0.5)
  9. _EdgeMaskFalloff("Edge Mask Falloff", float) = 0
  10. _EdgeMaskPower("Edge Mask Power", float) = 0
  11. _MinFadeStart("Min Fade Start", float) = 0
  12. _MinFadeEnd("Min Fade End", float) = 0
  13. _MaxFadeStart("Max Fade Start", float) = 0
  14. _MaxFadeEnd("Max Fade End", float) = 0
  15. }
  16. Category
  17. {
  18. Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
  19. Blend One One
  20. AlphaTest Greater .01
  21. ColorMask RGB
  22. Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
  23. // Tags { "RenderType"="Opaque" }
  24. SubShader {
  25. // Disable Dynamic Batching
  26. Pass{}
  27. Pass {
  28. CGPROGRAM
  29. #pragma vertex vert
  30. #pragma fragment frag
  31. #pragma only_renderers opengl d3d9 d3d11
  32. #pragma glsl
  33. #pragma target 3.0
  34. #pragma multi_compile_particles
  35. #include "UnityCG.cginc"
  36. float4 _CoronaColor;
  37. float _EdgeMaskFalloff, _EdgeMaskPower;
  38. float _MinFadeStart, _MinFadeEnd;
  39. float _MaxFadeStart, _MaxFadeEnd;
  40. sampler2D _CoronaNoise;
  41. struct VertexInput
  42. {
  43. float4 vertex : POSITION;
  44. float3 normal : NORMAL;
  45. float2 texcoord0 : TEXCOORD0;
  46. };
  47. struct VertexOutput
  48. {
  49. float4 pos : POSITION;
  50. float4 posWorld : TEXCOORD0;
  51. float3 normalDir : TEXCOORD1;
  52. float2 uv : TEXCOORD2;
  53. };
  54. VertexOutput vert (VertexInput v)
  55. {
  56. VertexOutput o;
  57. o.normalDir = mul(float4(v.normal,0), unity_WorldToObject).xyz;
  58. o.posWorld = mul(unity_ObjectToWorld, v.vertex);
  59. o.pos = mul(UNITY_MATRIX_MVP, v.vertex);
  60. o.uv = v.texcoord0;
  61. return o;
  62. }
  63. float4 frag(VertexOutput i) : COLOR
  64. {
  65. float3 finalColor = tex2D(_CoronaNoise, i.uv.xy);
  66. float3 viewDirection = normalize(_WorldSpaceCameraPos.xyz - i.posWorld.xyz);
  67. float viewDot = abs(dot(viewDirection, normalize(i.normalDir)));
  68. viewDot = pow(viewDot, _EdgeMaskFalloff) * _EdgeMaskPower;
  69. viewDot = clamp(viewDot, 0 ,1);
  70. float dist = distance(_WorldSpaceCameraPos.xyz, i.posWorld.xyz);
  71. float MinFade = saturate((_MinFadeEnd - dist) / (_MinFadeStart -_MinFadeEnd));
  72. float MaxFade = saturate((_MaxFadeEnd - dist) / (_MaxFadeEnd - _MaxFadeStart));
  73. return float4(saturate(pow(finalColor * viewDot *_CoronaColor, 1.3) * 1.5 * MaxFade * MinFade), 1);
  74. }
  75. ENDCG
  76. }
  77. }
  78. }
  79. }