12345678910111213141516171819202122232425262728293031323334 |
- 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;
- }
|