123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146 |
- // Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
- Shader "Unity5/Particle Softrim Dissolve/Alpha Blend"
- {
- Properties {
- _MainTex ("Particle Texture", 2D) = "white" {}
- _Opacity ("Opacity", Range (0,1)) = 1
- _SoftRim ("Rim", Range(0,1.5)) = 1
- _EdgeColor ("Edge Color", Color) = (1,0,0)
- _EdgeWidth ("Edge Width", Range(0,1)) = 0.1
- _EdgeRamp ("Edge Ramp", 2D) = "white" {}
- }
- Category {
- Tags { "Queue"="Transparent" "IgnoreProjector"="True" "RenderType"="Transparent" }
- //Blend One One
- //Blend SrcAlpha One
- Blend SrcAlpha OneMinusSrcAlpha
- Cull Off Lighting Off ZWrite Off
-
- SubShader {
- Pass {
-
- CGPROGRAM
- #pragma vertex vert
- #pragma fragment frag
-
- #pragma multi_compile SOFTDISSOLVE_ON SOFTDISSOLVE_OFF
- #pragma multi_compile OPACITYSLIDER_ON OPACITYSLIDER_OFF
- #pragma multi_compile STRETCH_ON STRETCH_OFF
- #pragma multi_compile SOFTRIM_ON SOFTRIM_OFF
- #pragma multi_compile EDGE_ON EDGE_OFF
- #include "UnityCG.cginc"
- sampler2D _MainTex;
- #if EDGE_ON
- sampler2D _EdgeRamp;
- #endif
-
- struct appdata_t {
- fixed4 vertex : POSITION;
- fixed4 color : COLOR;
- fixed2 texcoord : TEXCOORD0;
- #if SOFTRIM_ON
- fixed4 normal : NORMAL;
- #endif
- };
- struct v2f {
- fixed4 vertex : SV_POSITION;
- fixed4 color : COLOR;
- fixed2 texcoord : TEXCOORD0;
- };
-
- fixed4 _MainTex_ST;
- #if OPACITYSLIDER_ON
- fixed _Opacity;
- #endif
- #if SOFTRIM_ON
- fixed _SoftRim;
- #endif
- #if EDGE_ON
- fixed3 _EdgeColor;
- fixed _EdgeWidth;
- fixed4 _EdgeRamp_ST;
- #endif
- v2f vert (appdata_t v)
- {
- v2f o;
- o.vertex = UnityObjectToClipPos(v.vertex);
- #if SOFTRIM_ON
- fixed3 viewDir = normalize(ObjSpaceViewDir(v.vertex));
- #if STRETCH_ON
- //viewDir.x = -abs(viewDir.x);
- //viewDir.y = abs(viewDir.y);
- //viewDir.z = abs(viewDir.z);
- viewDir.x = 1;
- viewDir.y = 1;
- viewDir.z = 1;
-
- //v.normal.x = -abs(v.normal.x);
- //v.normal.y = -abs(v.normal.y);
- //v.normal.z = abs(v.normal.z);
- v.normal.x = 0;
- v.normal.y = -abs(v.normal.y);
- v.normal.z = 1;
- #endif
- fixed dotProduct = dot(v.normal, viewDir);
- o.color.rgb = v.color.rgb;
- o.color.a = smoothstep(1 - _SoftRim, 1.0, dotProduct)*v.color.a;
- #else
- o.color = v.color;
- #endif
- o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
- return o;
- }
-
- fixed4 frag (v2f i) : SV_Target
- {
- fixed4 tex = tex2D(_MainTex, i.texcoord);
-
- #if SOFTDISSOLVE_ON
- fixed sf = smoothstep(0,(1-tex.a),i.color.a);
- #else
- fixed sf = step(1-i.color.a,tex.a);
- #endif
-
- #if EDGE_ON
-
- #if SOFTDISSOLVE_ON
- if (sf < _EdgeWidth && sf > i.color.a)
- {
- //sf=1;
- //tex.rgb = _EdgeColor;
- fixed4 ramp = tex2D (_EdgeRamp, fixed2(sf,1));
- tex.rgb = ramp.rgb*_EdgeColor;
- }
- #else
- if (tex.a*i.color.a<_EdgeWidth && sf > i.color.a)
- {
- sf=tex.a;
- fixed4 ramp = tex2D (_EdgeRamp, fixed2(tex.a*i.color.a,1));
- //tex.rgb = _EdgeColor;
- tex.rgb = ramp.rgb*_EdgeColor;
- }
- #endif
- #endif
-
-
-
- #if OPACITYSLIDER_ON
- clip(sf*tex.a*_Opacity);
- return fixed4(tex.rgb*i.color.rgb,sf*tex.a*_Opacity);
- #else
- clip(sf*tex.a);
- return fixed4(tex.rgb*i.color.rgb,sf*tex.a);
- #endif
- }
- ENDCG
- }
- }CustomEditor "Shader_softrim_dissolve"
- }
- }
|