bgfx/examples/31-rsm/fs_rsm_lbuffer.sc
Branimir Karadžić 5bfcf44d83 Cleanup.
2017-02-02 18:09:52 -08:00

68 lines
1.9 KiB
Scala

$input v_lightCenterScale, v_color0
/*
* Copyright 2016 Joseph Cherlin. All rights reserved.
* License: https://github.com/bkaradzic/bgfx#license-bsd-2-clause
*/
#include "../common/common.sh"
SAMPLER2D(s_normal, 0); // Normal output from gbuffer
SAMPLER2D(s_depth, 1); // Depth output from gbuffer
uniform mat4 u_invMvp;
float toClipSpaceDepth(float _depthTextureZ)
{
#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
return _depthTextureZ;
#else
return _depthTextureZ * 2.0 - 1.0;
#endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
}
vec3 clipToWorld(mat4 _invViewProj, vec3 _clipPos)
{
vec4 wpos = mul(_invViewProj, vec4(_clipPos, 1.0) );
return wpos.xyz / wpos.w;
}
void main()
{
#if BGFX_SHADER_LANGUAGE_HLSL && (BGFX_SHADER_LANGUAGE_HLSL < 4)
vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy + u_viewTexel.xy * vec2_splat(0.5);
#else
vec2 texCoord = gl_FragCoord.xy * u_viewTexel.xy;
#endif
// Get world position
float deviceDepth = texture2D(s_depth, texCoord).x;
float depth = toClipSpaceDepth(deviceDepth);
vec3 clip = vec3(texCoord * 2.0 - 1.0, depth);
#if BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
clip.y = -clip.y;
#endif // BGFX_SHADER_LANGUAGE_HLSL || BGFX_SHADER_LANGUAGE_PSSL || BGFX_SHADER_LANGUAGE_METAL
vec3 wpos = clipToWorld(u_invMvp, clip);
// Get normal from its map, and decompress
vec3 n = texture2D(s_normal, texCoord).xyz*2.0-1.0;
// Do lighting
vec3 pointToLight = v_lightCenterScale.xyz-wpos;
float lightLen = sqrt(dot(pointToLight, pointToLight));
float lightFalloff;
if (lightLen > v_lightCenterScale.w)
lightFalloff = 0.0;
else
lightFalloff = 1.0-(lightLen/v_lightCenterScale.w); // Linear falloff for light (could use dist sq if you want)
vec3 l = normalize(pointToLight)*lightFalloff;
gl_FragColor.xyz = v_color0.xyz * max(0.0, dot(n,l));
gl_FragColor.w = 1.0;
}