stk-code_catmod/data/shaders/importance_sampling_specular.frag
2014-12-08 19:16:26 +01:00

34 lines
956 B
GLSL

uniform samplerCube tex;
uniform samplerBuffer samples;
uniform float ViewportSize;
uniform mat4 PermutationMatrix;
out vec4 FragColor;
void main(void)
{
vec2 uv = gl_FragCoord.xy / ViewportSize;
vec3 RayDir = 2. * vec3(uv, 1.) - 1.;
RayDir = normalize((PermutationMatrix * vec4(RayDir, 0.)).xyz);
vec4 FinalColor = vec4(0.);
vec3 up = (RayDir.y < .99) ? vec3(0., 1., 0.) : vec3(0., 0., 1.);
vec3 Tangent = normalize(cross(up, RayDir));
vec3 Bitangent = cross(RayDir, Tangent);
float weight = 0.;
for (int i = 0; i < 1024; i++)
{
float Theta = texelFetch(samples, i).r;
float Phi = texelFetch(samples, i).g;
vec3 L = cos(Theta) * RayDir + sin(Theta) * cos(Phi) * Tangent + sin(Theta) * sin(Phi) * Bitangent;
float NdotL = clamp(dot(RayDir, L), 0., 1.);
FinalColor += textureLod(tex, L, 0.) * NdotL;
weight += NdotL;
}
FragColor = FinalColor / weight;
}