    vec3 cp = packCoord(texCoords);
    vec3 xpp = packCoord(texCoords + vec2(dx, 0.0));
    vec3 xnp = packCoord(texCoords - vec2(dx, 0.0));
    vec3 ypp = packCoord(texCoords + vec2(0.0, dy));
    vec3 ynp = packCoord(texCoords - vec2(0.0, dy));
    if (cp.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] = vec4(.5, .5, .5, 1.0);
    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);
        if (eye == -1) gl_FragData[0] = vec4(.5, .5, .5, od);
        else if (eye == 0) gl_FragData[0] = vec4(.5, 0.0, 0.0, od);
        else gl_FragData[0] = vec4(0.0, .5, .5, od);
    }