2
0

LightCube.frag 1.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546
  1. uniform samplerCube lightCube;
  2. varying vec4 vertexColor;
  3. varying vec3 normal;
  4. uniform vec4 ambient_color;
  5. varying vec3 worldNormal;
  6. uniform float lightFactor;
  7. vec3 hash3( float n )
  8. {
  9. return fract(sin(vec3(n,n+1.0,n+2.0))*vec3(43758.5453123,22578.1459123,19642.3490423));
  10. }
  11. void main()
  12. {
  13. vec3 col = vec3(0.0);
  14. for( int i=0; i<32; i++ )
  15. {
  16. vec3 rr = normalize(-1.0 + 2.0*hash3(float(i)*123.5463));
  17. rr = normalize( worldNormal + 7.0*rr );
  18. rr = rr * sign(dot(worldNormal,rr));
  19. col += pow( textureCube( lightCube, rr ).xyz, vec3(2.2) ) * dot(rr,worldNormal);
  20. }
  21. col = col * lightFactor;
  22. vec4 texColor = vec4(col, 1.0);
  23. vec4 color = vec4(1.0,1.0,1.0,1.0) + ambient_color;
  24. color = clamp((color*vertexColor*texColor), 0.0, 1.0);
  25. // fog
  26. const float LOG2 = 1.442695;
  27. float z = gl_FragCoord.z / gl_FragCoord.w;
  28. float fogFactor = exp2( -gl_Fog.density *
  29. gl_Fog.density *
  30. z *
  31. z *
  32. LOG2 );
  33. fogFactor = clamp(fogFactor, 0.0, 1.0);
  34. color = mix(gl_Fog.color, color, fogFactor );
  35. color.a = vertexColor.a * texColor.a;
  36. gl_FragColor = color;
  37. }