     // attenuation
     float fDivisor = 1.0 +     fDistance * 0.05 +
                      pow(fDistance, 2.0) * 0.03 +
-                     pow(fDistance, 3.0) * 0.01 +
-                     pow(fDistance, 4.0) * 0.00;
+                     pow(fDistance, 3.0) * 0.01;
     float fAttenuation = 1.0 / fDivisor;
 
     // ambient

    return vNormal;
}

vec3 diffuse_lighting()
{
    return vec3(0);
}

#version 150
precision highp float;

const int NUM_LIGHT_TYPES = 16;
const int NUM_LIGHTS = 16;
const int NUM_MATERIALS = 64;

struct LightType
{
    vec3 vAmbient;
    vec3 vDiffuse;
    vec3 vSpecular;
    float fAttenuationConst;
    float fAttenuationLinear;
    float fAttenuationQuadratic;
    float fAttenuationCubic;
};
uniform LightType u_LightTypes[NUM_LIGHT_TYPES];

struct Light
{
    int bActive;
    int nType;
    vec4 vPosition;     // w = 0 means directional light
};
uniform Light u_Lights[NUM_LIGHTS];

struct Material
{
    vec3 vAmbient;
    vec3 vDiffuse;
    vec3 vSpecular;
    float fShininess;   // specular exponent
    float fGlow;        // luminescence
};
uniform Material u_Materials[NUM_MATERIALS];

uniform sampler2D u_sDiffuse;
uniform sampler2D u_sNormalHeight;
uniform sampler2D u_sSpecular;

smooth in vec3 v_vNormal;
smooth in vec2 v_vTexCoord;
