Files
JJBB/Assets/BuiltinAssets/Shader/DefaultResourcesExtra/Internal-PrePassLighting.shader

105 lines
2.0 KiB
Plaintext
Raw Permalink Normal View History

2024-08-23 15:49:34 +08:00
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
}