cleanup & fix entities sky light brightness

This commit is contained in:
MihailRis 2025-07-12 22:38:13 +03:00
parent bcdb891321
commit 668d1d522f
4 changed files with 18 additions and 98 deletions

View File

@ -31,6 +31,8 @@ uniform float u_torchlightDistance;
#include <lighting> #include <lighting>
#include <fog> #include <fog>
#define SKY_LIGHT_BRIGHTNESS_COMPENSATION 0.1
void main() { void main() {
a_modelpos = u_model * vec4(v_position, 1.0); a_modelpos = u_model * vec4(v_position, 1.0);
vec3 pos3d = a_modelpos.xyz - u_cameraPos; vec3 pos3d = a_modelpos.xyz - u_cameraPos;
@ -46,7 +48,7 @@ void main() {
a_texCoord = v_texCoord; a_texCoord = v_texCoord;
a_dir = a_modelpos.xyz - u_cameraPos; a_dir = a_modelpos.xyz - u_cameraPos;
vec3 skyLightColor = pick_sky_color(u_skybox); 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.rgb = max(a_color.rgb, skyLightColor.rgb * v_light.a) * v_color;
a_color.a = u_opacity; a_color.a = u_opacity;

View File

@ -89,12 +89,7 @@ void PostProcessing::configureEffect(
PostEffect& effect, PostEffect& effect,
Shader& shader, Shader& shader,
float timer, float timer,
const Camera& camera, const Camera& camera
uint shadowMap,
uint shadowMap2,
const glm::mat4& shadowMatrix,
const glm::mat4& shadowMatrix2,
uint shadowMapResolution
) { ) {
const auto& viewport = context.getViewport(); const auto& viewport = context.getViewport();
shader.uniform1i("u_screen", TARGET_COLOR); 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_noise", TARGET_SSAO); // used in SSAO pass
shader.uniform1i("u_ssao", TARGET_SSAO); 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.uniform2i("u_screenSize", viewport);
shader.uniform3f("u_cameraPos", camera.position); shader.uniform3f("u_cameraPos", camera.position);
shader.uniform1f("u_timer", timer); shader.uniform1f("u_timer", timer);
shader.uniform1i("u_enableShadows", shadowMap != 0);
shader.uniformMatrix("u_projection", camera.getProjection()); shader.uniformMatrix("u_projection", camera.getProjection());
shader.uniformMatrix("u_view", camera.getView()); shader.uniformMatrix("u_view", camera.getView());
shader.uniformMatrix("u_inverseView", glm::inverse(camera.getView())); shader.uniformMatrix("u_inverseView", glm::inverse(camera.getView()));
@ -127,23 +113,11 @@ void PostProcessing::renderDeferredShading(
const DrawContext& context, const DrawContext& context,
const Assets& assets, const Assets& assets,
float timer, float timer,
const Camera& camera, const Camera& camera
uint shadowMap,
uint shadowMap2,
const glm::mat4& shadowMatrix,
const glm::mat4& shadowMatrix2,
uint shadowMapResolution
) { ) {
if (gbuffer == nullptr) { if (gbuffer == nullptr) {
throw std::runtime_error("gbuffer is not initialized"); 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 // Generating ssao
gbuffer->bindBuffers(); gbuffer->bindBuffers();
@ -159,12 +133,7 @@ void PostProcessing::renderDeferredShading(
ssaoEffect, ssaoEffect,
shader, shader,
timer, timer,
camera, camera
shadowMap,
shadowMap2,
shadowMatrix,
shadowMatrix2,
shadowMapResolution
); );
gbuffer->bindSSAO(); gbuffer->bindSSAO();
quadMesh->draw(); quadMesh->draw();
@ -184,7 +153,6 @@ void PostProcessing::renderDeferredShading(
gbuffer->bindBuffers(); gbuffer->bindBuffers();
// TODO: move upper & move skybox->draw(...) here
auto& effect = assets.require<PostEffect>("deferred_lighting"); auto& effect = assets.require<PostEffect>("deferred_lighting");
auto& shader = effect.use(); auto& shader = effect.use();
configureEffect( configureEffect(
@ -192,12 +160,7 @@ void PostProcessing::renderDeferredShading(
effect, effect,
shader, shader,
timer, timer,
camera, camera
shadowMap,
shadowMap2,
shadowMatrix,
shadowMatrix2,
shadowMapResolution
); );
quadMesh->draw(); quadMesh->draw();
} }
@ -207,12 +170,7 @@ void PostProcessing::render(
const DrawContext& context, const DrawContext& context,
const Assets& assets, const Assets& assets,
float timer, float timer,
const Camera& camera, const Camera& camera
uint shadowMap,
uint shadowMap2,
const glm::mat4& shadowMatrix,
const glm::mat4& shadowMatrix2,
uint shadowMapResolution
) { ) {
if (fbo == nullptr) { if (fbo == nullptr) {
throw std::runtime_error("'use(...)' was never called"); throw std::runtime_error("'use(...)' was never called");
@ -231,11 +189,11 @@ void PostProcessing::render(
fbo->getTexture()->bind(); fbo->getTexture()->bind();
if (totalPasses == 0) { if (totalPasses == 0) {
// TODO: move upper & move skybox->draw(...) here // replace 'default' blit shader with glBlitFramebuffer?
auto& effect = assets.require<PostEffect>("default"); auto& effect = assets.require<PostEffect>("default");
auto& shader = effect.use(); auto& shader = effect.use();
configureEffect( configureEffect(
context, effect, shader, timer, camera, 0, 0, {}, {}, 0 context, effect, shader, timer, camera
); );
quadMesh->draw(); quadMesh->draw();
return; return;
@ -255,12 +213,7 @@ void PostProcessing::render(
*effect, *effect,
shader, shader,
timer, timer,
camera, camera
shadowMap,
shadowMap2,
shadowMatrix,
shadowMatrix2,
shadowMapResolution
); );
if (currentPass > 1) { if (currentPass > 1) {

View File

@ -39,12 +39,7 @@ public:
const DrawContext& context, const DrawContext& context,
const Assets& assets, const Assets& assets,
float timer, float timer,
const Camera& camera, const Camera& camera
uint shadowMap,
uint shadowMap2,
const glm::mat4& shadowMatrix,
const glm::mat4& shadowMatrix2,
uint shadowMapResolution
); );
/// @brief Render fullscreen quad using the passed shader /// @brief Render fullscreen quad using the passed shader
@ -55,12 +50,7 @@ public:
const DrawContext& context, const DrawContext& context,
const Assets& assets, const Assets& assets,
float timer, float timer,
const Camera& camera, const Camera& camera
uint shadowMap,
uint shadowMap2,
const glm::mat4& shadowMatrix,
const glm::mat4& shadowMatrix2,
uint shadowMapResolution
); );
void setEffect(size_t slot, std::shared_ptr<PostEffect> effect); void setEffect(size_t slot, std::shared_ptr<PostEffect> effect);
@ -78,12 +68,7 @@ private:
PostEffect& effect, PostEffect& effect,
Shader& shader, Shader& shader,
float timer, float timer,
const Camera& camera, const Camera& camera
uint shadowMap,
uint shadowMap2,
const glm::mat4& shadowMatrix,
const glm::mat4& shadowMatrix2,
uint shadowMapResolution
); );
void refreshFbos(uint width, uint height); void refreshFbos(uint width, uint height);

View File

@ -517,17 +517,7 @@ void WorldRenderer::draw(
if (gbufferPipeline) { if (gbufferPipeline) {
deferredShader.use(); deferredShader.use();
setupWorldShader(deferredShader, camera, settings, fogFactor); setupWorldShader(deferredShader, camera, settings, fogFactor);
postProcessing.renderDeferredShading( postProcessing.renderDeferredShading(pctx, assets, timer, camera);
pctx,
assets,
timer,
camera,
shadows ? shadowMap->getDepthMap() : 0,
shadows ? wideShadowMap->getDepthMap() : 0,
shadowCamera.getProjView(),
wideShadowCamera.getProjView(),
shadows ? shadowMap->getResolution() : 0
);
} }
{ {
DrawContext ctx = pctx.sub(); DrawContext ctx = pctx.sub();
@ -558,17 +548,7 @@ void WorldRenderer::draw(
glBindFramebuffer(GL_FRAMEBUFFER, 0); glBindFramebuffer(GL_FRAMEBUFFER, 0);
} }
postProcessing.render( postProcessing.render(pctx, assets, timer, camera);
pctx,
assets,
timer,
camera,
shadows ? shadowMap->getDepthMap() : 0,
shadows ? wideShadowMap->getDepthMap() : 0,
shadowCamera.getProjView(),
wideShadowCamera.getProjView(),
shadows ? shadowMap->getResolution() : 0
);
skybox->unbind(); skybox->unbind();
if (player.currentCamera == player.fpCamera) { if (player.currentCamera == player.fpCamera) {