diff --git a/res/shaders/entity.glslv b/res/shaders/entity.glslv index 24a8a714..3afed236 100644 --- a/res/shaders/entity.glslv +++ b/res/shaders/entity.glslv @@ -31,6 +31,8 @@ uniform float u_torchlightDistance; #include #include +#define SKY_LIGHT_BRIGHTNESS_COMPENSATION 0.1 + void main() { a_modelpos = u_model * vec4(v_position, 1.0); vec3 pos3d = a_modelpos.xyz - u_cameraPos; @@ -42,12 +44,12 @@ void main() { vec3 light = v_light.rgb; float torchlight = calc_torch_light(a_realnormal, a_modelpos.xyz); light += torchlight * u_torchlightColor; - a_color = vec4(pow(light, vec3(u_gamma)),1.0f); + a_color = vec4(pow(light, vec3(u_gamma)), 1.0f); a_texCoord = v_texCoord; a_dir = a_modelpos.xyz - u_cameraPos; - vec3 skyLightColor = pick_sky_color(u_skybox); - a_color.rgb = max(a_color.rgb, skyLightColor.rgb*v_light.a) * v_color; + vec3 skyLightColor = pick_sky_color(u_skybox) + SKY_LIGHT_BRIGHTNESS_COMPENSATION; + a_color.rgb = max(a_color.rgb, skyLightColor.rgb * v_light.a) * v_color; a_color.a = u_opacity; mat4 viewmodel = u_view * u_model; diff --git a/src/graphics/core/PostProcessing.cpp b/src/graphics/core/PostProcessing.cpp index 85b56067..ec491c52 100644 --- a/src/graphics/core/PostProcessing.cpp +++ b/src/graphics/core/PostProcessing.cpp @@ -89,12 +89,7 @@ void PostProcessing::configureEffect( PostEffect& effect, Shader& shader, float timer, - const Camera& camera, - uint shadowMap, - uint shadowMap2, - const glm::mat4& shadowMatrix, - const glm::mat4& shadowMatrix2, - uint shadowMapResolution + const Camera& camera ) { const auto& viewport = context.getViewport(); shader.uniform1i("u_screen", TARGET_COLOR); @@ -106,18 +101,9 @@ void PostProcessing::configureEffect( } shader.uniform1i("u_noise", TARGET_SSAO); // used in SSAO pass shader.uniform1i("u_ssao", TARGET_SSAO); - - shader.uniform1i("u_shadows[0]", TARGET_SHADOWS0); - shader.uniform1i("u_shadows[1]", TARGET_SHADOWS1); - shader.uniformMatrix("u_shadowsMatrix[0]", shadowMatrix); - shader.uniformMatrix("u_shadowsMatrix[1]", shadowMatrix2); - shader.uniform1f("u_shadowsOpacity", 1.0f); - shader.uniform1f("u_shadowsSoftness", 1.0f); - shader.uniform1i("u_shadowsRes", shadowMapResolution); shader.uniform2i("u_screenSize", viewport); shader.uniform3f("u_cameraPos", camera.position); shader.uniform1f("u_timer", timer); - shader.uniform1i("u_enableShadows", shadowMap != 0); shader.uniformMatrix("u_projection", camera.getProjection()); shader.uniformMatrix("u_view", camera.getView()); shader.uniformMatrix("u_inverseView", glm::inverse(camera.getView())); @@ -127,23 +113,11 @@ void PostProcessing::renderDeferredShading( const DrawContext& context, const Assets& assets, float timer, - const Camera& camera, - uint shadowMap, - uint shadowMap2, - const glm::mat4& shadowMatrix, - const glm::mat4& shadowMatrix2, - uint shadowMapResolution + const Camera& camera ) { if (gbuffer == nullptr) { throw std::runtime_error("gbuffer is not initialized"); } - - glActiveTexture(GL_TEXTURE0 + TARGET_SHADOWS0); - glBindTexture(GL_TEXTURE_2D, shadowMap); - - glActiveTexture(GL_TEXTURE0 + TARGET_SHADOWS1); - glBindTexture(GL_TEXTURE_2D, shadowMap2); - // Generating ssao gbuffer->bindBuffers(); @@ -159,12 +133,7 @@ void PostProcessing::renderDeferredShading( ssaoEffect, shader, timer, - camera, - shadowMap, - shadowMap2, - shadowMatrix, - shadowMatrix2, - shadowMapResolution + camera ); gbuffer->bindSSAO(); quadMesh->draw(); @@ -184,7 +153,6 @@ void PostProcessing::renderDeferredShading( gbuffer->bindBuffers(); - // TODO: move upper & move skybox->draw(...) here auto& effect = assets.require("deferred_lighting"); auto& shader = effect.use(); configureEffect( @@ -192,12 +160,7 @@ void PostProcessing::renderDeferredShading( effect, shader, timer, - camera, - shadowMap, - shadowMap2, - shadowMatrix, - shadowMatrix2, - shadowMapResolution + camera ); quadMesh->draw(); } @@ -207,12 +170,7 @@ void PostProcessing::render( const DrawContext& context, const Assets& assets, float timer, - const Camera& camera, - uint shadowMap, - uint shadowMap2, - const glm::mat4& shadowMatrix, - const glm::mat4& shadowMatrix2, - uint shadowMapResolution + const Camera& camera ) { if (fbo == nullptr) { throw std::runtime_error("'use(...)' was never called"); @@ -231,11 +189,11 @@ void PostProcessing::render( fbo->getTexture()->bind(); if (totalPasses == 0) { - // TODO: move upper & move skybox->draw(...) here + // replace 'default' blit shader with glBlitFramebuffer? auto& effect = assets.require("default"); auto& shader = effect.use(); configureEffect( - context, effect, shader, timer, camera, 0, 0, {}, {}, 0 + context, effect, shader, timer, camera ); quadMesh->draw(); return; @@ -255,12 +213,7 @@ void PostProcessing::render( *effect, shader, timer, - camera, - shadowMap, - shadowMap2, - shadowMatrix, - shadowMatrix2, - shadowMapResolution + camera ); if (currentPass > 1) { diff --git a/src/graphics/core/PostProcessing.hpp b/src/graphics/core/PostProcessing.hpp index 556699db..f9d50b75 100644 --- a/src/graphics/core/PostProcessing.hpp +++ b/src/graphics/core/PostProcessing.hpp @@ -39,12 +39,7 @@ public: const DrawContext& context, const Assets& assets, float timer, - const Camera& camera, - uint shadowMap, - uint shadowMap2, - const glm::mat4& shadowMatrix, - const glm::mat4& shadowMatrix2, - uint shadowMapResolution + const Camera& camera ); /// @brief Render fullscreen quad using the passed shader @@ -55,12 +50,7 @@ public: const DrawContext& context, const Assets& assets, float timer, - const Camera& camera, - uint shadowMap, - uint shadowMap2, - const glm::mat4& shadowMatrix, - const glm::mat4& shadowMatrix2, - uint shadowMapResolution + const Camera& camera ); void setEffect(size_t slot, std::shared_ptr effect); @@ -78,12 +68,7 @@ private: PostEffect& effect, Shader& shader, float timer, - const Camera& camera, - uint shadowMap, - uint shadowMap2, - const glm::mat4& shadowMatrix, - const glm::mat4& shadowMatrix2, - uint shadowMapResolution + const Camera& camera ); void refreshFbos(uint width, uint height); diff --git a/src/graphics/render/WorldRenderer.cpp b/src/graphics/render/WorldRenderer.cpp index 9a8d1aea..f6ed57e9 100644 --- a/src/graphics/render/WorldRenderer.cpp +++ b/src/graphics/render/WorldRenderer.cpp @@ -517,17 +517,7 @@ void WorldRenderer::draw( if (gbufferPipeline) { deferredShader.use(); setupWorldShader(deferredShader, camera, settings, fogFactor); - postProcessing.renderDeferredShading( - pctx, - assets, - timer, - camera, - shadows ? shadowMap->getDepthMap() : 0, - shadows ? wideShadowMap->getDepthMap() : 0, - shadowCamera.getProjView(), - wideShadowCamera.getProjView(), - shadows ? shadowMap->getResolution() : 0 - ); + postProcessing.renderDeferredShading(pctx, assets, timer, camera); } { DrawContext ctx = pctx.sub(); @@ -558,17 +548,7 @@ void WorldRenderer::draw( glBindFramebuffer(GL_FRAMEBUFFER, 0); } - postProcessing.render( - pctx, - assets, - timer, - camera, - shadows ? shadowMap->getDepthMap() : 0, - shadows ? wideShadowMap->getDepthMap() : 0, - shadowCamera.getProjView(), - wideShadowCamera.getProjView(), - shadows ? shadowMap->getResolution() : 0 - ); + postProcessing.render(pctx, assets, timer, camera); skybox->unbind(); if (player.currentCamera == player.fpCamera) {