cleanup & fix entities sky light brightness
This commit is contained in:
parent
bcdb891321
commit
668d1d522f
@ -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;
|
||||||
|
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
@ -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);
|
||||||
|
|||||||
@ -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) {
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user