X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fcommon_world.glsl;h=da87204bbebe620f803961ae4755b45cf5d0870d;hb=76042e561d89b232f04cac8a431b5cd7b30a6b9d;hp=d7b3ccfefc0741947a9bcd380b64e44e24d4a23a;hpb=a3c10b9dec1ed7136721695033ebeef30717f249;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/common_world.glsl b/shaders/common_world.glsl index d7b3ccf..da87204 100644 --- a/shaders/common_world.glsl +++ b/shaders/common_world.glsl @@ -1,3 +1,5 @@ +layout (location = 0) out vec4 oColour; + layout (std140) uniform ub_world_lighting { vec4 g_light_colours[3]; @@ -72,6 +74,16 @@ vec3 do_light_shadowing_old( vec3 vfrag ) return mix( vfrag, g_ambient_colour.rgb, faccum ); } +// FIXME +float sdLine( vec3 p, vec3 a, vec3 b ) +{ + vec3 pa = p - a; + vec3 ba = b - a; + + float h = clamp( dot(pa,ba)/dot(ba,ba), 0.0, 1.0 ); + return length( pa - ba*h ); +} + vec3 do_light_shadowing( vec3 vfrag ) { if( g_shadow_samples == 0 ) @@ -92,6 +104,13 @@ vec3 do_light_shadowing( vec3 vfrag ) famt+=shadow_sample((vdir+vec3( 0.807,-0.690, 0.472)*fspread)*flength*0.6); famt+=shadow_sample((vdir+vec3( 0.522,-0.379, 0.350)*fspread)*flength*0.7); famt+=shadow_sample((vdir+vec3( 0.483, 0.201, 0.306)*fspread)*flength*0.8); + + // player shadow + float dist_to_player = max( 0.0, sdLine( aWorldCo, uBoard0, uBoard1 )-0.03 ); + float player_shadow = max( 1.0-dist_to_player*1.7, 0.0 ); + player_shadow *= player_shadow*player_shadow*player_shadow; + + famt = max( player_shadow*0.6, famt ); return mix( vfrag, g_ambient_colour.rgb, famt ); }