// Upgrade NOTE: replaced '_Object2World' with 'unity_ObjectToWorld'
// Upgrade NOTE: replaced 'mul(UNITY_MATRIX_MVP,*)' with 'UnityObjectToClipPos(*)'
Shader "Lit/Diffuse With Shadows"
{
Properties
{
[NoScaleOffset] _MainTex("Texture", 2D) = "white" {}
_Color("Color", Color) = (1,1,1,1)
}
SubShader
{
Pass
{
Tags {"LightMode" = "ForwardBase"}
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
#include "UnityCG.cginc"
#include "Lighting.cginc"
// compile shader into multiple variants, with and without shadows
// (we don't care about any lightmaps yet, so skip these variants)
#pragma multi_compile_fwdbase nolightmap nodirlightmap nodynlightmap novertexlight
// shadow helper functions and macros
#include "AutoLight.cginc"
float4 _Color;
struct v2f
{
float2 uv : TEXCOORD0;
SHADOW_COORDS(1) // put shadows data into TEXCOORD1
fixed3 diff : COLOR0;
fixed3 ambient : COLOR1;
float4 pos : SV_POSITION;
};
v2f vert(appdata_base v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.uv = v.texcoord;
half3 worldNormal = UnityObjectToWorldNormal(v.normal);
half nl = max(0, dot(worldNormal, _WorldSpaceLightPos0.xyz));
o.diff = nl * _LightColor0.rgb;
o.ambient = ShadeSH9(half4(worldNormal,1));
// compute shadows data
TRANSFER_SHADOW(o)
return o;
}
sampler2D _MainTex;
fixed4 frag(v2f i) : SV_Target
{
fixed4 col = tex2D(_MainTex, i.uv) * _Color;
// compute shadow attenuation (1.0 = fully lit, 0.0 = fully shadowed)
//fixed shadow = SHADOW_ATTENUATION(i);
//// darken light's illumination with shadow, keep ambient intact
//fixed3 lighting = i.diff * shadow + i.ambient;
//col.rgb *= lighting;
return col;
}
ENDCG
}
// Forward additive pass (only needed if you care about more lights than 1 directional).
// Can remove if no point/spot light support needed.
Pass
{
Name "FORWARD"
Tags { "LightMode" = "ForwardAdd" }
ZWrite Off Blend One Zero
CGPROGRAM
#pragma vertex vert
#pragma fragment frag
// Include shadowing support for point/spot
#pragma multi_compile_fwdadd_fullshadows
#include "UnityCG.cginc"
#include "Lighting.cginc"
#include "AutoLight.cginc"
struct v2f
{
float4 pos : SV_POSITION;
float3 worldPos : TEXCOORD0;
SHADOW_COORDS(1)
};
v2f vert(appdata_full v)
{
v2f o;
o.pos = UnityObjectToClipPos(v.vertex);
o.worldPos = mul(unity_ObjectToWorld, v.vertex).xyz;
TRANSFER_SHADOW(o); // pass shadow coordinates to pixel shader
return o;
}
uniform float4 _Color;
fixed4 frag(v2f IN) : SV_Target
{
fixed4 atten = SHADOW_ATTENUATION(IN); // atten, IN, IN.worldPos)
fixed4 c = atten;
// might want to take light color into account?
c.rgb *= /*_LightColor0.rgb **/ _Color.rgb;
return c;
}
ENDCG
}
// shadow casting support
UsePass "Legacy Shaders/VertexLit/SHADOWCASTER"
}
}