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 <fog>
#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;

View File

@ -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<PostEffect>("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<PostEffect>("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) {

View File

@ -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<PostEffect> 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);

View File

@ -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) {