// Made with Amplify Shader Editor // Available at the Unity Asset Store - http://u3d.as/y3X Shader "BF/Models/StaticLightmap" { Properties { [Gamma]_albedo("albedo", 2D) = "white" {} _main_color("main_color", Color) = (1,1,1,1) _lightmap("lightmap", 2D) = "black" {} _light("light", Range( 1 , 5)) = 1 _dark("dark", Range( 0 , 1)) = 0 _gray("gray", Range( 0 , 2)) = 1 _fog_color("fog_color", Color) = (0,0,0,0) _fog_range("fog_range", Float) = 1 _fog_density("fog_density", Float) = 100 [HideInInspector] _texcoord2( "", 2D ) = "white" {} [HideInInspector] _texcoord( "", 2D ) = "white" {} } SubShader { Tags { "RenderType"="Opaque" } LOD 100 CGINCLUDE #pragma target 3.0 ENDCG Blend Off Cull Back ColorMask RGBA ZWrite On ZTest LEqual Offset 0 , 0 Pass { Name "Unlit" Tags { "LightMode"="ForwardBase" } CGPROGRAM #ifndef UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX //only defining to not throw compilation error over Unity 5.5 #define UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(input) #endif #pragma vertex vert #pragma fragment frag #pragma multi_compile_instancing #include "UnityCG.cginc" struct appdata { float4 vertex : POSITION; float4 color : COLOR; UNITY_VERTEX_INPUT_INSTANCE_ID float4 texcoord1 : TEXCOORD1; float4 texcoord : TEXCOORD0; }; struct v2f { float4 vertex : SV_POSITION; UNITY_VERTEX_INPUT_INSTANCE_ID UNITY_VERTEX_OUTPUT_STEREO float4 texcoord : TEXCOORD0; float4 texcoord1 : TEXCOORD1; }; uniform sampler2D _lightmap; uniform float4 _lightmap_ST; uniform float _gray; uniform float _light; uniform float _dark; uniform float4 _main_color; uniform sampler2D _albedo; uniform float4 _albedo_ST; uniform float4 _fog_color; uniform float _fog_range; uniform float _fog_density; v2f vert ( appdata v ) { v2f o; UNITY_SETUP_INSTANCE_ID(v); UNITY_INITIALIZE_VERTEX_OUTPUT_STEREO(o); UNITY_TRANSFER_INSTANCE_ID(v, o); float3 worldPos = mul(unity_ObjectToWorld, v.vertex).xyz; o.texcoord1.xyz = worldPos; o.texcoord.xy = v.texcoord1.xy; o.texcoord.zw = v.texcoord.xy; //setting value to unused interpolator channels and avoid initialization warnings o.texcoord1.w = 0; o.vertex = UnityObjectToClipPos(v.vertex); return o; } fixed4 frag (v2f i ) : SV_Target { UNITY_SETUP_INSTANCE_ID(i); UNITY_SETUP_STEREO_EYE_INDEX_POST_VERTEX(i); float2 uv_lightmap = i.texcoord.xy * _lightmap_ST.xy + _lightmap_ST.zw; float4 ligthMapColor = tex2D(_lightmap, uv_lightmap); float4 temp_cast = (-1.0).xxxx; float4 lerpLightColor = lerp((ligthMapColor * (ligthMapColor * _gray) * _light) , temp_cast , _dark); float2 uv_albedo = i.texcoord.zw * _albedo_ST.xy + _albedo_ST.zw; float3 worldPos = i.texcoord1.xyz; float clampFog = clamp(((worldPos.z - _fog_range) / (_fog_density - _fog_range)), 0, 1); float4 result = lerp((lerpLightColor * (_main_color * tex2D(_albedo, uv_albedo))), _fog_color, clampFog); return result; } ENDCG } } }