mirror of
https://github.com/alicevision/Meshroom.git
synced 2025-05-09 07:06:54 +02:00
Add experimental render mode to display model normals or shading based on spherical harmonics coefficients
34 lines
948 B
GLSL
34 lines
948 B
GLSL
#version 330 core
|
|
|
|
in vec3 normal;
|
|
out vec4 fragColor;
|
|
|
|
uniform vec3 shCoeffs[9];
|
|
uniform bool displayNormals = false;
|
|
|
|
vec3 resolveSH_Opt(vec3 premulCoefficients[9], vec3 dir)
|
|
{
|
|
vec3 result = premulCoefficients[0] * dir.x;
|
|
result += premulCoefficients[1] * dir.y;
|
|
result += premulCoefficients[2] * dir.z;
|
|
result += premulCoefficients[3];
|
|
vec3 dirSq = dir * dir;
|
|
result += premulCoefficients[4] * (dir.x * dir.y);
|
|
result += premulCoefficients[5] * (dir.x * dir.z);
|
|
result += premulCoefficients[6] * (dir.y * dir.z);
|
|
result += premulCoefficients[7] * (dirSq.x - dirSq.y);
|
|
result += premulCoefficients[8] * (3 * dirSq.z - 1);
|
|
return result;
|
|
}
|
|
|
|
void main()
|
|
{
|
|
if(displayNormals) {
|
|
// Display normals mode
|
|
fragColor = vec4(normal, 1.0);
|
|
}
|
|
else {
|
|
// Calculate the color from spherical harmonics coeffs
|
|
fragColor = vec4(resolveSH_Opt(shCoeffs, normal), 1.0);
|
|
}
|
|
}
|