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 <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;
|
||||
|
||||
@ -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) {
|
||||
|
||||
@ -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);
|
||||
|
||||
@ -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) {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user