105 lines
2.0 KiB
Plaintext
105 lines
2.0 KiB
Plaintext
Shader "Hidden/Internal-PrePassLighting" {
|
|
Properties {
|
|
_LightTexture0 ("", any) = "" {}
|
|
_LightTextureB0 ("", 2D) = "" {}
|
|
_ShadowMapTexture ("", any) = "" {}
|
|
}
|
|
SubShader {
|
|
|
|
CGINCLUDE
|
|
#include "UnityCG.cginc"
|
|
#include "UnityDeferredLibrary.cginc"
|
|
|
|
sampler2D _CameraNormalsTexture;
|
|
float4 _CameraNormalsTexture_ST;
|
|
|
|
half4 CalculateLight (unity_v2f_deferred i)
|
|
{
|
|
float3 wpos;
|
|
float2 uv;
|
|
half3 lightDir;
|
|
float atten, fadeDist;
|
|
UnityDeferredCalculateLightParams (i, wpos, uv, lightDir, atten, fadeDist);
|
|
|
|
half4 nspec = tex2D (_CameraNormalsTexture, TRANSFORM_TEX(uv, _CameraNormalsTexture));
|
|
half3 normal = nspec.rgb * 2 - 1;
|
|
normal = normalize(normal);
|
|
|
|
half diff = max (0, dot (lightDir, normal));
|
|
half3 h = normalize (lightDir - normalize(wpos-_WorldSpaceCameraPos));
|
|
|
|
float spec = pow (max (0, dot(h,normal)), nspec.a*128.0);
|
|
spec *= saturate(atten);
|
|
|
|
half4 res;
|
|
res.xyz = _LightColor.rgb * (diff * atten);
|
|
res.w = spec * Luminance (_LightColor.rgb);
|
|
|
|
float fade = fadeDist * unity_LightmapFade.z + unity_LightmapFade.w;
|
|
res *= saturate(1.0-fade);
|
|
|
|
return res;
|
|
}
|
|
ENDCG
|
|
|
|
/*Pass 1: LDR Pass - Lighting encoded into a subtractive ARGB8 buffer*/
|
|
Pass {
|
|
ZWrite Off
|
|
Blend DstColor Zero
|
|
|
|
CGPROGRAM
|
|
#pragma target 3.0
|
|
#pragma vertex vert_deferred
|
|
#pragma fragment frag
|
|
#pragma multi_compile_lightpass
|
|
|
|
fixed4 frag (unity_v2f_deferred i) : SV_Target
|
|
{
|
|
return exp2(-CalculateLight(i));
|
|
}
|
|
|
|
ENDCG
|
|
}
|
|
|
|
/*Pass 2: HDR Pass - Lighting additively blended into floating point buffer*/
|
|
Pass {
|
|
ZWrite Off
|
|
Blend One One
|
|
|
|
CGPROGRAM
|
|
#pragma target 3.0
|
|
#pragma vertex vert_deferred
|
|
#pragma fragment frag
|
|
#pragma multi_compile_lightpass
|
|
|
|
fixed4 frag (unity_v2f_deferred i) : SV_Target
|
|
{
|
|
return CalculateLight(i);
|
|
}
|
|
|
|
ENDCG
|
|
}
|
|
|
|
/*Pass 3: Xenon HDR Specular Pass - 10-10-10-2 buffer means we need separate specular buffer*/
|
|
Pass {
|
|
ZWrite Off
|
|
Blend One One
|
|
|
|
CGPROGRAM
|
|
#pragma target 3.0
|
|
#pragma vertex vert_deferred
|
|
#pragma fragment frag
|
|
#pragma multi_compile_lightpass
|
|
|
|
fixed4 frag (unity_v2f_deferred i) : SV_Target
|
|
{
|
|
return CalculateLight(i).argb;
|
|
}
|
|
|
|
ENDCG
|
|
}
|
|
|
|
}
|
|
Fallback Off
|
|
}
|