X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fcommon_world.glsl;fp=shaders%2Fcommon_world.glsl;h=da87204bbebe620f803961ae4755b45cf5d0870d;hb=23ef4d7f6bfe6a5a91c78822b081a9ea63cb74a6;hp=a394acb75b73724666528c640a0698b5ac66b882;hpb=9edcce70acf6cf8fbb2449bf54d797e212ebb2c2;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/common_world.glsl b/shaders/common_world.glsl index a394acb..da87204 100644 --- a/shaders/common_world.glsl +++ b/shaders/common_world.glsl @@ -74,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 ) @@ -94,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 ); }