__shdBulbTonemapReinhardExtended.fsh 944 B

1234567891011121314151617181920212223242526272829303132333435
  1. varying vec2 v_vTexcoord;
  2. varying vec4 v_vColour;
  3. uniform float u_fExposure;
  4. uniform sampler2D u_sLightMap;
  5. const float gamma = 2.2;
  6. float Luminance(vec3 color)
  7. {
  8. return dot(color, vec3(0.2126, 0.7152, 0.0722));
  9. }
  10. vec3 ChangeLuminance(vec3 color, float targetLuminance)
  11. {
  12. return color * (targetLuminance / Luminance(color));
  13. }
  14. vec3 ReinhardExtended(vec3 color, float whitepoint)
  15. {
  16. float luminance = Luminance(color);
  17. float numerator = luminance * (1.0 + (luminance / (whitepoint * whitepoint)));
  18. float luminanceNew = numerator / (1.0 + luminance);
  19. return ChangeLuminance(color, luminanceNew);
  20. }
  21. void main()
  22. {
  23. gl_FragColor = v_vColour*texture2D(gm_BaseTexture, v_vTexcoord);
  24. gl_FragColor.rgb = pow(gl_FragColor.rgb, vec3(gamma));
  25. vec4 light = texture2D(u_sLightMap, v_vTexcoord);
  26. gl_FragColor.rgb = pow(ReinhardExtended(u_fExposure*gl_FragColor.rgb*light.rgb, 4.0), vec3(1.0/gamma));
  27. }