From 5acca023630726877464c1eea36fc104b86e2fad Mon Sep 17 00:00:00 2001 From: Brandon Mak Date: Wed, 15 Feb 2023 21:34:22 +0800 Subject: [PATCH] Implemented different shadow mapping technique --- Assets/Scenes/MainGame.shade | 9 ++++- Assets/Shaders/DeferredComposite_CS.glsl | 21 ++++++++-- Assets/Shaders/DeferredComposite_CS.shshaderb | Bin 8333 -> 9621 bytes Assets/Shaders/ShadowMap_FS.glsl | 4 +- Assets/Shaders/ShadowMap_FS.shshaderb | Bin 365 -> 789 bytes .../MiddleEnd/Interface/SHGraphicsSystem.cpp | 36 ++++++++++-------- .../MiddleEnd/Lights/SHLightingSubSystem.cpp | 16 +++++--- 7 files changed, 58 insertions(+), 28 deletions(-) diff --git a/Assets/Scenes/MainGame.shade b/Assets/Scenes/MainGame.shade index 87343839..438b5a29 100644 --- a/Assets/Scenes/MainGame.shade +++ b/Assets/Scenes/MainGame.shade @@ -8440,6 +8440,11 @@ IsActive: true NumberOfChildren: 0 Components: + Transform Component: + Translate: {x: 0, y: 0, z: 0} + Rotate: {x: 0, y: 0, z: 0} + Scale: {x: 1, y: 1, z: 1} + IsActive: true Light Component: Position: {x: 0, y: 0, z: 0} Type: Directional @@ -8469,14 +8474,14 @@ NumberOfChildren: 0 Components: Transform Component: - Translate: {x: 2, y: 1.5, z: -5.5999999} + Translate: {x: 0.242245644, y: 1.56757355, z: -6.07086945} Rotate: {x: -0, y: 0, z: -0} Scale: {x: 1, y: 1, z: 1} IsActive: true Light Component: Position: {x: 2, y: 1.5, z: -5.5999999} Type: Directional - Direction: {x: -0.245000005, y: 0, z: 0} + Direction: {x: 0, y: 0, z: -1} Color: {x: 0, y: 0, z: 0, w: 1} Layer: 4294967295 Strength: 1 diff --git a/Assets/Shaders/DeferredComposite_CS.glsl b/Assets/Shaders/DeferredComposite_CS.glsl index 50a269ac..745b93e0 100644 --- a/Assets/Shaders/DeferredComposite_CS.glsl +++ b/Assets/Shaders/DeferredComposite_CS.glsl @@ -48,19 +48,34 @@ layout(std430, set = 1, binding = 4) buffer AmbientLightData AmbientLightStruct aLightData[]; } AmbLightData; +float LinStep (float val, float low, float high) +{ + return clamp ((val - low)/(high - low), 0.0f, 1.0f); +} + float CalcShadowValue (sampler2D shadowMap, vec4 worldSpaceFragPos, mat4 lightPV) { + // clip space for fragment from light view space vec4 fragPosLightPOV = lightPV * worldSpaceFragPos; + + // Perform perspective division and convert to 0 to 1 range vec3 converted = (fragPosLightPOV.xyz / fragPosLightPOV.w) * vec3(0.5f) + vec3(0.5f); - float sampledDepth = texture(shadowMap, converted.xy).r; + // float sampledDepth = texture(shadowMap, converted.xy).r; + // float sampledDepth = texture(shadowMap, converted.xy).z; + vec2 moments = texture(shadowMap, converted.xy).xy; if (converted.x < 0.0f || converted.x > 1.0f || converted.y < 0.0f || converted.y > 1.0f) return 1.0f; - if (fragPosLightPOV.z > sampledDepth && fragPosLightPOV.w > 0.0f) + if (fragPosLightPOV.z > moments.x && fragPosLightPOV.w > 0.0f) { - return 0.7f; + float p = step (fragPosLightPOV.z, moments.x); + float variance = max (moments.y - (moments.x * moments.x), 0.00002f); + + float d = fragPosLightPOV.z - moments.x; + float pMax = LinStep (variance / (variance + (d * d)), 0.9f, 1.0f); + return min (max (p, pMax), 1.0f); } else return 1.0f; diff --git a/Assets/Shaders/DeferredComposite_CS.shshaderb b/Assets/Shaders/DeferredComposite_CS.shshaderb index 7f06b4713f034c5c4945e920f736283fcf7fc0df..ff474e272b60daadce873126ae23984c156a834f 100644 GIT binary patch literal 9621 zcmZ{n2bi5z5r+RHTS5pBdJmg~NazFt0Rn_HmcWK21VSg=?B3m6xx07Wy-5H;f{3D0 z6(65R6eAX@f*r9z6hX03#9jh66uVR@zVCm}EI;>wBjbGY&77Gz=RfD{O~(~evwVyh zJ*7R%MrGr&&9c5x4Q|V9G)$JMr=vH`+H$+IYgyNR!}Xs1W*mHgk(*~@RJm^pVp_p1 zNPnp^Aio}&057*?j( zcpSJ|TMKSsy;-)Z(zgnQJucf3J+D;lUbd>#Q(L>dR9#)3HhkdpS!;S{%g>RVD9&V4P}4(KX%>PwbWr!Ct9ySEY1 zmD7vmTeE%PyK4h$%0u;XPnvrKy1&+69;go!F(z}v8#PHX_+@R|K5Go6`i?j z;lP?&cd1^f4J@3W``fac(1Vrp%GLRm-rm*2skfHwR`^nNWx1zjp0?}`<7&edC!gZp z<@4LKJDd4@PaAW-Qt&OWl-FXCt2O&tfp6@4Yj!W(Ky9eMRBc4M<_#m9``Ma3fSrGv zuG0DCp+=1dU&GBW)k}>U55fE0=GCe-LYdu`J%S!N3(4VkdJMjj$Fyd@Mdu%SUTwAC zv5h^HbEIQm8z@!t5PNUqfBLkN1|A`d3ysEF-yG<3{+Z z2QAh2zWf<(P9b(#eQ0$z2g+Rf94S{UH}6ZIeGS)#$^(7%RmRzuynR)M=cHTwDsNxi ztE*h|zD1?sbLpr(`wLvLeq)y#bM!e%`6^=n+p?$Nm{VZ=24k`|8fxtI*la8C{Kiu< zvZt@Etu6PPdt~3i_U}B`)!e_l>nir|9?83|p2iV>%^vA%!8f>OQK>#u$?sp(XoYW_ zmsr=>Y#ZX6doJ#Wen(GX<(|Fm8uJRQ`_Z252H%K1AwT_<3-ad#Ut2a+U!!NXrSS

W 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 literal 8333 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 Yy&SR*WqWXTp^KM$;@)StiN2Np1F+75%K!iX diff --git a/Assets/Shaders/ShadowMap_FS.glsl b/Assets/Shaders/ShadowMap_FS.glsl index f514c70b..b19a32a6 100644 --- a/Assets/Shaders/ShadowMap_FS.glsl +++ b/Assets/Shaders/ShadowMap_FS.glsl @@ -3,8 +3,10 @@ #extension GL_ARB_shading_language_420pack : enable #extension GL_EXT_nonuniform_qualifier : require +layout(location = 0) out vec4 shadowMap; void main() { - + // shadowMap = vec4 (0.0f, 0.0f, gl_FragCoord.z, 1.0f); + shadowMap = vec4 (gl_FragCoord.z, gl_FragCoord.z * gl_FragCoord.z, 0.0f, 1.0f); } \ No newline at end of file diff --git a/Assets/Shaders/ShadowMap_FS.shshaderb b/Assets/Shaders/ShadowMap_FS.shshaderb index 453048326bf7f7f05fe7de71024adf6f23d52649..709a2ecc8a2443df79dbbed62ab544a4ac5cc464 100644 GIT binary patch literal 789 zcmZuuO)mpc6unwQ6;|*$iJgr<=2zKBoHLyY ziJRQH@1A?^=TxVPl1Z_!J}xpMWto&?cp{1 zd#`~}fenrFY=Tbq*|1kuC+FF)6ZE~`1P6@Y`#IudJ96ge1meIp z@ntRU$^Ptdkk_l`_>eRE4`&V-@gb-74`&`2@%QWxa6b{|5x>9%c%x+~`!U8nIQt(); - if (lightComps.size() > 2) - { - lightComps[2].SetEnableShadow(true); - } - //for (auto& comp : lightComps) + //if (lightComps.size() > 2) //{ - // comp.SetEnableShadow(true); + // lightComps[2].SetEnableShadow(true); //} + for (auto& comp : lightComps) + { + comp.SetEnableShadow(true); + } } renderGraph->Begin(frameIndex); @@ -779,10 +780,11 @@ namespace SHADE // we need to wait for the device to finish using the graph first device->WaitIdle(); - auto const& EVENT_DATA = reinterpret_cast*>(eventPtr.get())->data; - auto* lightComp = SHComponentManager::GetComponent(EVENT_DATA->lightEntity); - std::string resourceName = "ShadowMap " + std::to_string(EVENT_DATA->lightEntity); - Handle companionSubpass = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data())->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_WRITE_SUBPASS); + auto const& EVENT_DATA = reinterpret_cast*>(eventPtr.get())->data; + auto* lightComp = SHComponentManager::GetComponent(EVENT_DATA->lightEntity); + std::string depthResourceName = "ShadowMap_Depth " + std::to_string(EVENT_DATA->lightEntity); + std::string shadowMapResourceName = "ShadowMap " + std::to_string(EVENT_DATA->lightEntity); + Handle companionSubpass = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data())->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_WRITE_SUBPASS); if (EVENT_DATA->generateRenderer) { @@ -795,14 +797,16 @@ namespace SHADE } // Add the shadow map resource to the graph - renderGraph->AddResource(resourceName, {SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT}, false, SHLightingSubSystem::SHADOW_MAP_WIDTH, SHLightingSubSystem::SHADOW_MAP_HEIGHT, vk::Format::eD32Sfloat); + renderGraph->AddResource(depthResourceName, {SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH}, false, SHLightingSubSystem::SHADOW_MAP_WIDTH, SHLightingSubSystem::SHADOW_MAP_HEIGHT, vk::Format::eD32Sfloat); + renderGraph->AddResource(shadowMapResourceName, { SH_RENDER_GRAPH_RESOURCE_FLAGS::COLOR, SH_RENDER_GRAPH_RESOURCE_FLAGS::INPUT }, false, SHLightingSubSystem::SHADOW_MAP_WIDTH, SHLightingSubSystem::SHADOW_MAP_HEIGHT, vk::Format::eR32G32B32A32Sfloat); // link resource to node. This means linking the resource and regenerating the node's renderpass and framebuffer. - auto shadowMapNode = renderGraph->AddNodeAfter(SHGraphicsConstants::RenderGraphEntityNames::SHADOW_MAP_PASS.data() + resourceName, {resourceName.c_str()}, SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data()); + auto shadowMapNode = renderGraph->AddNodeAfter(SHGraphicsConstants::RenderGraphEntityNames::SHADOW_MAP_PASS.data() + shadowMapResourceName, {depthResourceName.c_str(), shadowMapResourceName.c_str()}, SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data()); // Add a subpass to render to that shadow map - auto newSubpass = shadowMapNode->RuntimeAddSubpass(resourceName + " Subpass", shadowMapViewport, lightComp->GetRenderer()); - newSubpass->AddDepthOutput(resourceName, SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH); + auto newSubpass = shadowMapNode->RuntimeAddSubpass(shadowMapResourceName + " Subpass", shadowMapViewport, lightComp->GetRenderer()); + newSubpass->AddColorOutput(shadowMapResourceName); + newSubpass->AddDepthOutput(depthResourceName, SH_RENDER_GRAPH_RESOURCE_FLAGS::DEPTH); // regenerate the node shadowMapNode->RuntimeStandaloneRegenerate(); @@ -828,7 +832,7 @@ namespace SHADE newSubpass->SetCompanionSubpass(companionSubpass, shadowMapPipeline); // set companion subpass and pipeline // add the shadow map to the lighting system - uint32_t const NEW_SHADOW_MAP_INDEX = lightingSubSystem->AddShadowMap(renderGraph->GetRenderGraphResource(resourceName), EVENT_DATA->lightEntity); + uint32_t const NEW_SHADOW_MAP_INDEX = lightingSubSystem->AddShadowMap(renderGraph->GetRenderGraphResource(shadowMapResourceName), EVENT_DATA->lightEntity); auto nodeCompute = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data())->GetNodeCompute(SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_COMPUTE.data()); nodeCompute->ModifyWriteDescImageComputeResource(SHGraphicsConstants::DescriptorSetBindings::SHADOW_MAP_IMAGE_SAMPLER_DATA, lightingSubSystem->GetViewSamplerLayout(NEW_SHADOW_MAP_INDEX), NEW_SHADOW_MAP_INDEX); diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp index 9acdfed0..6f8a9030 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Lights/SHLightingSubSystem.cpp @@ -395,7 +395,11 @@ namespace SHADE switch (lightComp->GetLightData().type) { case SH_LIGHT_TYPE::DIRECTIONAL: - return SHMatrix::Transpose(SHMatrix::LookAtLH(lightComp->GetLightData().position, SHVec3::Normalise (lightComp->GetLightData().direction), SHVec3(0.0f, -1.0f, 0.0f))); + { + SHTransformComponent* transform = SHComponentManager::GetComponent(lightComp->GetEID()); + + return SHMatrix::Transpose(SHMatrix::LookAtLH(transform->GetWorldPosition(), SHVec3::Normalise(lightComp->GetLightData().direction), SHVec3(0.0f, -1.0f, 0.0f))); + } //return SHMatrix::Transpose(SHMatrix::LookAtLH(/*lightComp->GetLightData().position*/SHVec3(1.27862f, 4.78952f, 4.12811f), SHVec3(-0.280564f, -0.66262f, -0.69422f), SHVec3(0.0f, -1.0f, 0.0f))); case SH_LIGHT_TYPE::POINT: return {}; @@ -518,7 +522,7 @@ namespace SHADE if (auto renderer = light.GetRenderer()) { //SHMatrix orthoMatrix = SHMatrix::OrthographicRH() - renderer->UpdateDataManual(frameIndex, GetViewMatrix(&light), SHMatrix::OrthographicLH(10.0f, 10.0f, 1.0f, 50.0f)); + renderer->UpdateDataManual(frameIndex, GetViewMatrix(&light), SHMatrix::OrthographicLH(12.0f, 12.0f, 1.0f, 80.0f)); } auto enumValue = SHUtilities::ConvertEnum(light.GetLightData().type); @@ -627,16 +631,16 @@ namespace SHADE // add to barriers shadowMapMemoryBarriers.push_back (vk::ImageMemoryBarrier { - .srcAccessMask = vk::AccessFlagBits::eDepthStencilAttachmentWrite, + .srcAccessMask = vk::AccessFlagBits::eColorAttachmentWrite | vk::AccessFlagBits::eColorAttachmentRead, .dstAccessMask = vk::AccessFlagBits::eShaderRead, - .oldLayout = vk::ImageLayout::eDepthAttachmentOptimal, + .oldLayout = vk::ImageLayout::eColorAttachmentOptimal, .newLayout = vk::ImageLayout::eShaderReadOnlyOptimal, .srcQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .dstQueueFamilyIndex = VK_QUEUE_FAMILY_IGNORED, .image = newShadowMap->GetImage()->GetVkImage(), .subresourceRange = vk::ImageSubresourceRange { - .aspectMask = vk::ImageAspectFlagBits::eDepth, + .aspectMask = vk::ImageAspectFlagBits::eColor, .baseMipLevel = 0, .levelCount = 1, .baseArrayLayer = 0, @@ -651,7 +655,7 @@ namespace SHADE void SHLightingSubSystem::PrepareShadowMapsForRead(Handle cmdBuffer) noexcept { // Issue barrier to transition shadow maps for reading in compute shader - cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eEarlyFragmentTests | vk::PipelineStageFlagBits::eLateFragmentTests, vk::PipelineStageFlagBits::eComputeShader, {}, {}, {}, shadowMapMemoryBarriers); + cmdBuffer->PipelineBarrier(vk::PipelineStageFlagBits::eColorAttachmentOutput, vk::PipelineStageFlagBits::eComputeShader, {}, {}, {}, shadowMapMemoryBarriers); } //void SHLightingSubSystem::HandleResize(Handle compute) noexcept