Billboard.shader 3.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. // Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
  2. Shader "FORGE3D/Billboard Additive" {
  3. Properties {
  4. _Color ("Tint Color", Color) = (0.5,0.5,0.5,0.5)
  5. _MainTex ("Particle Texture", 2D) = "white" {}
  6. _InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
  7. }
  8. Category {
  9. Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
  10. Blend SrcAlpha One
  11. AlphaTest Greater .01
  12. ColorMask RGB
  13. Cull Off Lighting Off ZWrite Off Fog { Color (0,0,0,0) }
  14. SubShader {
  15. Pass {
  16. CGPROGRAM
  17. #pragma vertex vert
  18. #pragma fragment frag
  19. #pragma multi_compile_particles
  20. #include "UnityCG.cginc"
  21. sampler2D _MainTex;
  22. fixed4 _Color;
  23. struct appdata_t {
  24. float4 vertex : POSITION;
  25. fixed4 color : COLOR;
  26. float2 texcoord : TEXCOORD0;
  27. };
  28. struct v2f {
  29. float4 vertex : SV_POSITION;
  30. fixed4 color : COLOR;
  31. float2 texcoord : TEXCOORD0;
  32. #ifdef SOFTPARTICLES_ON
  33. float4 projPos : TEXCOORD1;
  34. #endif
  35. };
  36. float4 _MainTex_ST;
  37. v2f vert (appdata_t v)
  38. {
  39. v2f o;
  40. float4 ori = mul(UNITY_MATRIX_MV,float4(0,0,0,1));
  41. float4 vt = v.vertex;
  42. float2 r1 = float2(unity_ObjectToWorld[0][0],unity_ObjectToWorld[0][2]);
  43. float2 r2 = float2(unity_ObjectToWorld[2][0],unity_ObjectToWorld[2][2]);
  44. float2 vt0 = vt.x*r1;
  45. vt0 += vt.z*r2;
  46. vt.xy = vt0;
  47. vt.z = 0;
  48. vt.xyz += ori.xyz;
  49. o.vertex = mul(UNITY_MATRIX_P,vt);
  50. o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
  51. o.color = v.color;
  52. #ifdef SOFTPARTICLES_ON
  53. o.projPos = ComputeScreenPos (o.vertex);
  54. COMPUTE_EYEDEPTH(o.projPos.z);
  55. #endif
  56. return o;
  57. }
  58. sampler2D_float _CameraDepthTexture;
  59. float _InvFade;
  60. fixed4 frag (v2f i) : SV_Target
  61. {
  62. #ifdef SOFTPARTICLES_ON
  63. float sceneZ = LinearEyeDepth (SAMPLE_DEPTH_TEXTURE_PROJ(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos)));
  64. float partZ = i.projPos.z;
  65. float fade = saturate (_InvFade * (sceneZ-partZ));
  66. i.color.a *= fade;
  67. #endif
  68. return i.color * _Color * tex2D(_MainTex, i.texcoord);
  69. }
  70. ENDCG
  71. }
  72. }
  73. }
  74. }
  75. /*
  76. Shader "Tut/Project/Billboard_2" {
  77. Properties {
  78. _MainTex ("Base (RGB)", 2D) = "white" {}
  79. }
  80. SubShader {
  81. Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
  82. pass{
  83. Cull Off
  84. ZTest Always
  85. Blend SrcAlpha OneMinusSrcAlpha
  86. CGPROGRAM
  87. #pragma vertex vert
  88. #pragma fragment frag
  89. #include "UnityCG.cginc"
  90. sampler2D _MainTex;
  91. struct v2f {
  92. float4 pos:SV_POSITION;
  93. float2 texc:TEXCOORD0;
  94. };
  95. v2f vert(appdata_base v)
  96. {
  97. v2f o;
  98. float4 ori=mul(UNITY_MATRIX_MV,float4(0,0,0,1));
  99. float4 vt=v.vertex;
  100. //vt.y=vt.z;
  101. float2 r1=float2(_Object2World[0][0],_Object2World[0][2]);
  102. float2 r2=float2(_Object2World[2][0],_Object2World[2][2]);
  103. float2 vt0=vt.x*r1;
  104. vt0+=vt.z*r2;
  105. vt.xy=vt0;
  106. vt.z=0;
  107. vt.xyz+=ori.xyz;//result is vt.z==ori.z ,so the distance to camera keeped ,and screen size keeped
  108. o.pos=mul(UNITY_MATRIX_P,vt);
  109. o.texc=v.texcoord;
  110. return o;
  111. }
  112. float4 frag(v2f i):COLOR
  113. {
  114. return tex2D(_MainTex,i.texc);
  115. }
  116. ENDCG
  117. }//endpass
  118. }
  119. }*/