    vec3 cp = texture2D(tex1, texCoords).xyz;
    vec3 xpp = texture2D(tex1, texCoords + vec2(dx, 0.0)).xyz;
    vec3 xnp = texture2D(tex1, texCoords - vec2(dx, 0.0)).xyz;
    vec3 ypp = texture2D(tex1, texCoords + vec2(0.0, dy)).xyz;
    vec3 ynp = texture2D(tex1, texCoords - vec2(0.0, dy)).xyz;
    if (cp.z == 0.0 || cp.z > 0.0 || xpp.z > 0.0 || xnp.z > 0.0 || ypp.z > 0.0 || ynp.z > 0.0) discard;
    else if (xpp.z == 0.0 || xnp.z == 0.0 || ypp.z == 0.0 || ynp.z == 0.0) gl_FragData[0].rgb = vec3(0.5);
    else
    {
        xpp = normalize(xpp - cp);
        xnp = normalize(xnp - cp);
        ypp = normalize(ypp - cp);
        ynp = normalize(ynp - cp);
        float xd = 1.0 + dot(xpp, xnp);
        float yd = 1.0 + dot(ypp, ynp);
        float od = max(xd, yd);
        gl_FragData[0].rgb = mix(gl_FragData[0].rgb, vec3(0.5), od);
    }