X-Git-Url: https://harrygodden.com/git/?a=blobdiff_plain;f=shaders%2Fmodel_character_view.fs;fp=shaders%2Fmodel_character_view.fs;h=afeb78d40d9095964ec9848a64064a976dccd1a6;hb=be8ea6efdbfd9c0fdad97401ed7d92041d8c8778;hp=4e91e921516de0b4bfda63bc21f7b9354195f28a;hpb=f99902f513b0ad606437bf32de47405dd4ea5f98;p=carveJwlIkooP6JGAAIwe30JlM.git diff --git a/shaders/model_character_view.fs b/shaders/model_character_view.fs index 4e91e92..afeb78d 100644 --- a/shaders/model_character_view.fs +++ b/shaders/model_character_view.fs @@ -1,5 +1,8 @@ uniform sampler2D uTexMain; +uniform sampler2D uTexSceneDepth; uniform vec3 uCamera; +uniform vec3 uInverseRatioDepth; +uniform vec3 uInverseRatioMain; in vec4 aColour; in vec2 aUv; @@ -10,6 +13,12 @@ in vec3 aWorldCo; #include "common_world.glsl" #include "motion_vectors_fs.glsl" +float linear_depth( float depth, float near, float far ) +{ + float z = depth * 2.0 - 1.0; + return (2.0 * near * far) / (far + near - z * (far - near)); +} + void main() { compute_motion_vectors(); @@ -21,5 +30,19 @@ void main() float dist = distance( aWorldCo, uCamera ) - 0.08; float opacity = clamp( dist*dist, 0.0, 1.0 ); + vec2 back_coord = gl_FragCoord.xy*uInverseRatioMain.xy*uInverseRatioDepth.xy; + float back_depth = texture( uTexSceneDepth, back_coord ).r; + float front_depth = gl_FragCoord.z/gl_FragCoord.w; + + back_depth = linear_depth( back_depth, 0.1, 2100.0 ); + float diff = back_depth - front_depth; + + vec2 ssuv = gl_FragCoord.xy; + vec3 vDither = vec3( dot( vec2( 171.0, 231.0 ), ssuv) ); + float dither = fract( vDither.g / 71.0 ) - 0.5; + + if( step(0.0,diff)+dither<0.3 ) + discard; + oColour = vec4( composite, opacity ); }