From 16afca0e095769b676c7de1b65189bbca2b6f4cc Mon Sep 17 00:00:00 2001 From: Alexander Gauggel <agauggel@uni-koblenz.de> Date: Tue, 22 Jun 2021 15:15:22 +0200 Subject: [PATCH] [#82] Enable depth clamp to avoid cutting off shadows --- include/vkcv/PipelineConfig.hpp | 1 + projects/voxelization/src/ShadowMapping.cpp | 6 ++++-- projects/voxelization/src/ShadowMapping.hpp | 4 +++- projects/voxelization/src/main.cpp | 3 ++- src/vkcv/Context.cpp | 1 + src/vkcv/PipelineManager.cpp | 2 +- 6 files changed, 12 insertions(+), 5 deletions(-) diff --git a/include/vkcv/PipelineConfig.hpp b/include/vkcv/PipelineConfig.hpp index 1e00c520..db9a5923 100644 --- a/include/vkcv/PipelineConfig.hpp +++ b/include/vkcv/PipelineConfig.hpp @@ -25,6 +25,7 @@ namespace vkcv { bool m_UseDynamicViewport; bool m_UseConservativeRasterization = false; PrimitiveTopology m_PrimitiveTopology = PrimitiveTopology::TriangleList; + bool m_EnableDepthClamping = false; }; } \ No newline at end of file diff --git a/projects/voxelization/src/ShadowMapping.cpp b/projects/voxelization/src/ShadowMapping.cpp index 25d760b4..5e4901e5 100644 --- a/projects/voxelization/src/ShadowMapping.cpp +++ b/projects/voxelization/src/ShadowMapping.cpp @@ -30,7 +30,7 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert }; const vkcv::PassConfig shadowPassConfig(shadowAttachments); m_shadowMapPass = corePtr->createPass(shadowPassConfig); - const vkcv::PipelineConfig shadowPipeConfig{ + vkcv::PipelineConfig shadowPipeConfig{ shadowShader, shadowMapResolution, shadowMapResolution, @@ -39,6 +39,7 @@ ShadowMapping::ShadowMapping(vkcv::Core* corePtr, const vkcv::VertexLayout& vert {}, false }; + shadowPipeConfig.m_EnableDepthClamping = true; m_shadowMapPipe = corePtr->createGraphicsPipeline(shadowPipeConfig); // shadow map @@ -56,7 +57,8 @@ void ShadowMapping::recordShadowMapRendering( const glm::vec3& lightColor, const float lightStrength, const std::vector<vkcv::Mesh>& meshes, - const std::vector<glm::mat4>& modelMatrices) { + const std::vector<glm::mat4>& modelMatrices, + const vkcv::camera::Camera& camera) { LightInfo lightInfo; lightInfo.sunColor = lightColor; diff --git a/projects/voxelization/src/ShadowMapping.hpp b/projects/voxelization/src/ShadowMapping.hpp index 0b7a12cd..295dbae3 100644 --- a/projects/voxelization/src/ShadowMapping.hpp +++ b/projects/voxelization/src/ShadowMapping.hpp @@ -1,5 +1,6 @@ #pragma once #include <vkcv/core.hpp> +#include <vkcv/camera/Camera.hpp> #define GLM_DEPTH_ZERO_TO_ONE #define GLM_FORCE_LEFT_HANDED @@ -24,7 +25,8 @@ public: const glm::vec3& lightColor, const float lightStrength, const std::vector<vkcv::Mesh>& meshes, - const std::vector<glm::mat4>& modelMatrices); + const std::vector<glm::mat4>& modelMatrices, + const vkcv::camera::Camera& camera); vkcv::ImageHandle getShadowMap(); vkcv::SamplerHandle getShadowSampler(); diff --git a/projects/voxelization/src/main.cpp b/projects/voxelization/src/main.cpp index 62a1bc6f..d86b8297 100644 --- a/projects/voxelization/src/main.cpp +++ b/projects/voxelization/src/main.cpp @@ -374,7 +374,8 @@ int main(int argc, const char** argv) { lightColor, lightStrength, meshes, - modelMatrices); + modelMatrices, + cameraManager.getActiveCamera()); // voxelization voxelization.setVoxelExtent(voxelizationExtent); diff --git a/src/vkcv/Context.cpp b/src/vkcv/Context.cpp index ac133d1a..e23213b4 100644 --- a/src/vkcv/Context.cpp +++ b/src/vkcv/Context.cpp @@ -280,6 +280,7 @@ namespace vkcv vk::PhysicalDeviceFeatures deviceFeatures; deviceFeatures.fragmentStoresAndAtomics = true; deviceFeatures.geometryShader = true; + deviceFeatures.depthClamp = true; deviceCreateInfo.pEnabledFeatures = &deviceFeatures; // Ablauf diff --git a/src/vkcv/PipelineManager.cpp b/src/vkcv/PipelineManager.cpp index df36442e..5ac2d978 100644 --- a/src/vkcv/PipelineManager.cpp +++ b/src/vkcv/PipelineManager.cpp @@ -146,7 +146,7 @@ namespace vkcv // rasterization state vk::PipelineRasterizationStateCreateInfo pipelineRasterizationStateCreateInfo( {}, - false, + config.m_EnableDepthClamping, false, vk::PolygonMode::eFill, vk::CullModeFlagBits::eNone, -- GitLab