diff options
Diffstat (limited to 'shaders/skybox.frag')
| -rw-r--r-- | shaders/skybox.frag | 39 |
1 files changed, 39 insertions, 0 deletions
diff --git a/shaders/skybox.frag b/shaders/skybox.frag new file mode 100644 index 0000000..336e7e5 --- /dev/null +++ b/shaders/skybox.frag @@ -0,0 +1,39 @@ +#version 450 + +layout (binding = 3) uniform samplerCube samplerEnv; + +layout (set = 0, location = 0) in vec3 inUVW; + +layout (set = 0, location = 0) out vec4 outColor; + +layout (set = 0, binding = 1) uniform UBOParams { + vec4 _pad0; + float exposure; + float gamma; +} uboParams; + +// From http://filmicworlds.com/blog/filmic-tonemapping-operators/ +vec3 Uncharted2Tonemap(vec3 color) +{ + float A = 0.15; + float B = 0.50; + float C = 0.10; + float D = 0.20; + float E = 0.02; + float F = 0.30; + float W = 11.2; + return ((color*(A*color+C*B)+D*E)/(color*(A*color+B)+D*F))-E/F; +} + +void main() +{ + vec3 color = textureLod(samplerEnv, inUVW, 0.5).rgb; + + // Tone mapping + color = Uncharted2Tonemap(color * uboParams.exposure); + color = color * (1.0f / Uncharted2Tonemap(vec3(11.2f))); + // Gamma correction + color = pow(color, vec3(1.0f / uboParams.gamma)); + + outColor = vec4(color, 1.0); +} |