From 13a2f9f5971cd97714b5ba8c868183b9c00a2601 Mon Sep 17 00:00:00 2001 From: Vincent Lejeune Date: Sun, 22 Feb 2015 20:31:14 +0100 Subject: [PATCH] First part of #1988 fix --- data/shaders/degraded_ibl.frag | 18 ++++++++++++++++++ src/config/user_config.hpp | 4 ++++ src/graphics/post_processing.cpp | 19 +++++++++++++++---- src/graphics/shaders.cpp | 13 +++++++++++++ src/graphics/shaders.hpp | 6 ++++++ 5 files changed, 56 insertions(+), 4 deletions(-) create mode 100644 data/shaders/degraded_ibl.frag diff --git a/data/shaders/degraded_ibl.frag b/data/shaders/degraded_ibl.frag new file mode 100644 index 000000000..06722b5c4 --- /dev/null +++ b/data/shaders/degraded_ibl.frag @@ -0,0 +1,18 @@ +uniform sampler2D ntex; + +out vec4 Diff; +out vec4 Spec; + +vec3 DecodeNormal(vec2 n); +vec4 getPosFromUVDepth(vec3 uvDepth, mat4 InverseProjectionMatrix); +vec3 DiffuseIBL(vec3 normal); +vec3 SpecularIBL(vec3 normal, vec3 V, float roughness); + +void main(void) +{ + vec2 uv = gl_FragCoord.xy / screen; + vec3 normal = normalize(DecodeNormal(2. * texture(ntex, uv).xy - 1.)); + + Diff = vec4(0.25 * DiffuseIBL(normal), 1.); + Spec = vec4(0., 0., 0., 1.); +} diff --git a/src/config/user_config.hpp b/src/config/user_config.hpp index 0891e60a2..9ef1df30f 100644 --- a/src/config/user_config.hpp +++ b/src/config/user_config.hpp @@ -654,6 +654,10 @@ namespace UserConfigParams PARAM_DEFAULT( IntUserConfigParam(0, "shadows_resoltion", &m_graphics_quality, "Shadow resolution (0 = disabled") ); + PARAM_PREFIX BoolUserConfigParam m_degraded_IBL + PARAM_DEFAULT(BoolUserConfigParam(false, + "Degraded_IBL", &m_graphics_quality, + "Disable specular IBL")); // ---- Misc PARAM_PREFIX BoolUserConfigParam m_cache_overworld diff --git a/src/graphics/post_processing.cpp b/src/graphics/post_processing.cpp index 483f4ac0b..f860df6bb 100644 --- a/src/graphics/post_processing.cpp +++ b/src/graphics/post_processing.cpp @@ -220,11 +220,22 @@ void PostProcessing::renderEnvMap(const float *bSHCoeff, const float *gSHCoeff, glBlendEquation(GL_FUNC_ADD); glBlendFunc(GL_ONE, GL_ONE); - glUseProgram(FullScreenShader::IBLShader::getInstance()->Program); - glBindVertexArray(SharedObject::FullScreenQuadVAO); + if (UserConfigParams::m_degraded_IBL) + { + glUseProgram(FullScreenShader::DegradedIBLShader::getInstance()->Program); + glBindVertexArray(SharedObject::FullScreenQuadVAO); - FullScreenShader::IBLShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), skybox); - FullScreenShader::IBLShader::getInstance()->setUniforms(); + FullScreenShader::DegradedIBLShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH)); + FullScreenShader::DegradedIBLShader::getInstance()->setUniforms(); + } + else + { + glUseProgram(FullScreenShader::IBLShader::getInstance()->Program); + glBindVertexArray(SharedObject::FullScreenQuadVAO); + + FullScreenShader::IBLShader::getInstance()->SetTextureUnits(irr_driver->getRenderTargetTexture(RTT_NORMAL_AND_DEPTH), irr_driver->getDepthStencilTexture(), skybox); + FullScreenShader::IBLShader::getInstance()->setUniforms(); + } glDrawArrays(GL_TRIANGLES, 0, 3); glBindVertexArray(0); diff --git a/src/graphics/shaders.cpp b/src/graphics/shaders.cpp index 6cec2fb5b..f4a5168d3 100644 --- a/src/graphics/shaders.cpp +++ b/src/graphics/shaders.cpp @@ -1641,6 +1641,19 @@ namespace FullScreenShader AssignSamplerNames(Program, 0, "ntex", 1, "dtex", 2, "probe"); } + DegradedIBLShader::DegradedIBLShader() + { + Program = LoadProgram(OBJECT, + GL_VERTEX_SHADER, file_manager->getAsset("shaders/screenquad.vert").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/decodeNormal.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/getPosFromUVDepth.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/DiffuseIBL.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/utils/SpecularIBL.frag").c_str(), + GL_FRAGMENT_SHADER, file_manager->getAsset("shaders/degraded_ibl.frag").c_str()); + AssignUniforms(); + AssignSamplerNames(Program, 0, "ntex"); + } + ShadowedSunLightShaderPCF::ShadowedSunLightShaderPCF() { Program = LoadProgram(OBJECT, diff --git a/src/graphics/shaders.hpp b/src/graphics/shaders.hpp index cda475f79..44005f700 100644 --- a/src/graphics/shaders.hpp +++ b/src/graphics/shaders.hpp @@ -426,6 +426,12 @@ public: IBLShader(); }; +class DegradedIBLShader : public ShaderHelperSingleton, public TextureRead +{ +public: + DegradedIBLShader(); +}; + class ShadowedSunLightShaderPCF : public ShaderHelperSingleton, public TextureRead { public: