
// source: https://graphics.stanford.edu/papers/envmap/envmap.pdf
//language=GLSL
export const chunk_lpv_get_irradiance_at = `
vec3 lpv_get_irradiance_at(in vec3 normal, in vec3 shCoefficients[9]) {
    // normal is assumed to have unit length
    float x = normal.x, y = normal.y, z = normal.z;

    // band 0
    vec3 result = shCoefficients[0] * 0.8862269254527579;

    // band 1
    result += shCoefficients[1] * 1.0233267079464885 * y;
    result += shCoefficients[2] * 1.0233267079464885 * z;
    result += shCoefficients[3] * 1.0233267079464885 * x;

    // band 2
    result += shCoefficients[4] * 0.8580855308097834 * x * y;
    result += shCoefficients[5] * 0.8580855308097834 * y * z;
    result += shCoefficients[6] * (0.7431238683011272 * z * z - 0.24770795610037571);
    result += shCoefficients[7] * 0.8580855308097834 * x * z;
    result += shCoefficients[8] * 0.4290427654048917 * (x * x - y * y);

    return result;
}
`