147 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
			
		
		
	
	
			147 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			Plaintext
		
	
	
	
	
	
| Shader "KriptoFX/FPS_Pack/Rocks" {
 | |
| 	Properties{
 | |
| 		[HDR]_TintColor("Tint Color", Color) = (0.5,0.5,0.5,0.5)
 | |
| 		_MainTex("Particle Texture", 2D) = "white" {}
 | |
| 		_InvFade("Soft Particles Factor", Range(0.01,5)) = 1.0
 | |
| 	}
 | |
| 
 | |
| 	
 | |
| 		
 | |
| 
 | |
| 		SubShader{
 | |
| 
 | |
| 			Cull Off
 | |
| 			ZWrite On
 | |
| 		Pass{
 | |
| 
 | |
| 		CGPROGRAM
 | |
| #pragma vertex vert
 | |
| #pragma fragment frag
 | |
| 
 | |
| #pragma multi_compile_fog
 | |
| 
 | |
| #include "UnityCG.cginc"
 | |
| 
 | |
| 
 | |
| 		sampler2D RFX4_PointLightAttenuation;
 | |
| 		half4 RFX4_AmbientColor;
 | |
| 		float4 RFX4_LightPositions[40];
 | |
| 		float4 RFX4_LightColors[40];
 | |
| 		int RFX4_LightCount;
 | |
| 
 | |
| 
 | |
| 		sampler2D _MainTex;
 | |
| 	fixed4 _TintColor;
 | |
| 
 | |
| 	struct appdata_t {
 | |
| 		float4 vertex : POSITION;
 | |
| 		fixed4 color : COLOR;
 | |
| 		float2 texcoord : TEXCOORD0;
 | |
| 		half3 normal:NORMAL;
 | |
| 		UNITY_VERTEX_INPUT_INSTANCE_ID
 | |
| 	};
 | |
| 
 | |
| 	struct v2f {
 | |
| 		float4 vertex : SV_POSITION;
 | |
| 		fixed4 color : COLOR;
 | |
| 		float2 texcoord : TEXCOORD0;
 | |
| 
 | |
| 		UNITY_FOG_COORDS(3)
 | |
| 
 | |
| 		UNITY_VERTEX_OUTPUT_STEREO
 | |
| 	};
 | |
| 
 | |
| 	float4 _MainTex_ST;
 | |
| 
 | |
| 
 | |
| 	half3 ShadeCustomLights(float4 vertex, half3 normal, int lightCount)
 | |
| 	{
 | |
| 		float3 worldPos = mul(unity_ObjectToWorld, vertex);
 | |
| 		float3 worldNormal = UnityObjectToWorldNormal(normal);
 | |
| 
 | |
| 		float3 lightColor = RFX4_AmbientColor.xyz;
 | |
| 		for (int i = 0; i < lightCount; i++) {
 | |
| 			float3 lightDir = RFX4_LightPositions[i].xyz - worldPos.xyz * RFX4_LightColors[i].w;
 | |
| 			half normalizedDist = length(lightDir) / RFX4_LightPositions[i].w;
 | |
| 			fixed attenuation = tex2Dlod(RFX4_PointLightAttenuation, half4(normalizedDist.xx, 0, 0));
 | |
| 			attenuation = lerp(1, attenuation, RFX4_LightColors[i].w);
 | |
| 			float diff = max(0, dot(normalize(worldNormal), normalize(lightDir)));
 | |
| 			lightColor += RFX4_LightColors[i].rgb * (diff * attenuation);
 | |
| 		}
 | |
| 		return (lightColor);
 | |
| 	}
 | |
| 
 | |
| 	v2f vert(appdata_t v)
 | |
| 	{
 | |
| 		v2f o;
 | |
| 		UNITY_SETUP_INSTANCE_ID(v);
 | |
| 		UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o);
 | |
| 		o.vertex = UnityObjectToClipPos(v.vertex);
 | |
| 
 | |
| 		o.color = v.color * _TintColor;
 | |
| 		o.color.rgb *= ShadeCustomLights(v.vertex, v.normal, RFX4_LightCount) ;
 | |
| 
 | |
| 		o.texcoord = TRANSFORM_TEX(v.texcoord,_MainTex);
 | |
| 	
 | |
| 		UNITY_TRANSFER_FOG(o,o.vertex);
 | |
| 		return o;
 | |
| 	}
 | |
| 
 | |
| 	sampler2D_float _CameraDepthTexture;
 | |
| 	float _InvFade;
 | |
| 
 | |
| 	fixed4 frag(v2f i) : SV_Target
 | |
| 	{
 | |
| 		fixed4 col = 2.0f * i.color * tex2D(_MainTex, i.texcoord);
 | |
| 		UNITY_APPLY_FOG(i.fogCoord, col);
 | |
| 		col.a = saturate(col.a);
 | |
| 		return col;
 | |
| 	}
 | |
| 		ENDCG
 | |
| 	}
 | |
| 
 | |
| 			Pass
 | |
| 	{
 | |
| 		Tags{ "Queue" = "Transparent" "LightMode" = "ShadowCaster" }
 | |
| 
 | |
| 		CGPROGRAM
 | |
| 
 | |
| #pragma vertex vert
 | |
| #pragma fragment frag
 | |
| #pragma multi_compile_shadowcaster
 | |
| #pragma fragmentoption ARB_precision_hint_fastest
 | |
| 
 | |
| #include "UnityCG.cginc"
 | |
| 
 | |
| 	struct appdata
 | |
| 	{
 | |
| 		float4 vertex : POSITION;
 | |
| 		half3 normal : NORMAL;
 | |
| 	};
 | |
| 
 | |
| 
 | |
| 	struct v2f
 | |
| 	{
 | |
| 		V2F_SHADOW_CASTER;
 | |
| 	};
 | |
| 
 | |
| 	v2f vert(appdata v)
 | |
| 	{
 | |
| 		v2f o;
 | |
| 		TRANSFER_SHADOW_CASTER_NORMALOFFSET(o)
 | |
| 		return o;
 | |
| 	}
 | |
| 
 | |
| 	float4 frag(v2f i) : COLOR
 | |
| 	{
 | |
| 		SHADOW_CASTER_FRAGMENT(i)
 | |
| 	}
 | |
| 
 | |
| 		ENDCG
 | |
| 	}
 | |
| 
 | |
| 
 | |
| 	}
 | |
| 		
 | |
| }
 |