Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- // Additive particle.
- // Does not receive shadows.
- Shader "Particles/Lit Particle Additive" {
- Properties {
- _Color ("Main Color", Color) = (1.0, 1.0, 1.0, 1.0)
- _MainTex ("Color (RGBA)", 2D) = "white" {}
- _InvFade ("Soft Particles Factor", Range(0.01,3.0)) = 1.0
- }
- SubShader {
- Pass {
- Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "LightMode" = "ForwardBase"}
- //Blend One One
- Blend OneMinusDstColor One
- ZWrite Off
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma multi_compile_fwdbase
- #include "UnityCG.cginc"
- #include "AutoLight.cginc"
- #include "AutoLightParticle.cginc"
- #pragma target 3.0
- struct appdata {
- float4 vertex : POSITION;
- float3 normal : NORMAL;
- float3 texcoord : TEXCOORD0;
- float4 vcol : COLOR0;
- };
- struct v2f {
- float4 pos : SV_POSITION;
- float2 uv : TEXCOORD0;
- float3 normal : TEXCOORD1;
- float3 lightDir : TEXCOORD2;
- float4 vcol : COLOR0;
- LIGHTING_COORDS(3,4)
- #ifdef SOFTPARTICLES_ON
- float4 projPos : TEXCOORD3;
- #endif
- };
- float4x4 _Camera2World;
- uniform float4 _MainTex_ST;
- v2f vert (appdata v) {
- v2f o;
- o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
- o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
- o.normal = v.normal;
- float4 posW = mul (_Camera2World, v.vertex);
- o.lightDir = WorldSpaceLightDirFromWorldPos(posW.xyz);
- TRANSFER_VERTEX_TO_FRAGMENT_PARTICLE(o);
- o.vcol = v.vcol;
- #ifdef SOFTPARTICLES_ON
- o.projPos = ComputeScreenPos (o.pos);
- COMPUTE_EYEDEPTH(o.projPos.z);
- #endif
- return o;
- }
- float4 _LightColor0;
- fixed4 _Color;
- sampler2D _MainTex;
- sampler2D _CameraDepthTexture;
- float _InvFade;
- fixed4 frag(v2f i) : COLOR {
- fixed4 c = tex2D( _MainTex, i.uv ) * _Color;
- c.rgb *= i.vcol.a * c.a;
- fixed atten = LIGHT_ATTENUATION(i);
- fixed NdotL = dot(i.normal, i.lightDir) * 0.5 + 0.5;
- c.rgb *= UNITY_LIGHTMODEL_AMBIENT * 2;
- c.rgb += c.rgb * _LightColor0.rgb * NdotL * atten * 2 * i.vcol.a;
- #ifdef SOFTPARTICLES_ON
- float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
- float partZ = i.projPos.z;
- float fade = saturate (_InvFade * (sceneZ-partZ));
- c.a *= fade;
- #endif
- return c;
- }
- ENDCG
- }
- Pass {
- Tags {"Queue" = "Transparent" "RenderType" = "Transparent" "LightMode" = "ForwardAdd"}
- //Blend One One
- Blend OneMinusDstColor One
- ZWrite Off
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
- #pragma multi_compile_fwdadd
- #include "UnityCG.cginc"
- #include "AutoLight.cginc"
- #include "AutoLightParticle.cginc"
- #pragma target 3.0
- struct appdata {
- float4 vertex : POSITION;
- float3 normal : NORMAL;
- float3 texcoord : TEXCOORD0;
- float4 vcol : COLOR0;
- };
- struct v2f {
- float4 pos : SV_POSITION;
- float2 uv : TEXCOORD0;
- float3 normal : TEXCOORD1;
- float3 lightDir : TEXCOORD2;
- float4 vcol : COLOR0;
- LIGHTING_COORDS(3,4)
- #ifdef SOFTPARTICLES_ON
- float4 projPos : TEXCOORD3;
- #endif
- };
- float4x4 _Camera2World;
- uniform float4 _MainTex_ST;
- v2f vert (appdata v) {
- v2f o;
- o.pos = mul (UNITY_MATRIX_MVP, v.vertex);
- o.uv = TRANSFORM_TEX(v.texcoord, _MainTex);
- o.normal = v.normal;
- float4 posW = mul (_Camera2World, v.vertex);
- o.lightDir = WorldSpaceLightDirFromWorldPos(posW.xyz);
- TRANSFER_VERTEX_TO_FRAGMENT_PARTICLE(o);
- o.vcol = v.vcol;
- #ifdef SOFTPARTICLES_ON
- o.projPos = ComputeScreenPos (o.pos);
- COMPUTE_EYEDEPTH(o.projPos.z);
- #endif
- return o;
- }
- float4 _LightColor0;
- fixed4 _Color;
- sampler2D _MainTex;
- sampler2D _CameraDepthTexture;
- float _InvFade;
- fixed4 frag(v2f i) : COLOR {
- fixed4 c = tex2D( _MainTex, i.uv ) * _Color;
- c.rgb *= _Color.a * i.vcol.a;
- fixed atten = LIGHT_ATTENUATION(i);
- fixed NdotL = dot(i.normal, i.lightDir) * 0.5 + 0.5;
- c.rgb *= _LightColor0.rgb * NdotL * atten;// * 2;
- #ifdef SOFTPARTICLES_ON
- float sceneZ = LinearEyeDepth (UNITY_SAMPLE_DEPTH(tex2Dproj(_CameraDepthTexture, UNITY_PROJ_COORD(i.projPos))));
- float partZ = i.projPos.z;
- float fade = saturate (_InvFade * (sceneZ-partZ));
- c.a *= fade;
- #endif
- return c;
- }
- ENDCG
- }
- }
- FallBack Off
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement