116 lines
3.1 KiB
Plaintext
116 lines
3.1 KiB
Plaintext
// 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
|
|
}
|
|
}
|
|
} |