diff --git a/Assets/Shaders/Trajectory_FS.shshaderb b/Assets/Shaders/Trajectory_FS.shshaderb new file mode 100644 index 00000000..9e641866 Binary files /dev/null and b/Assets/Shaders/Trajectory_FS.shshaderb differ diff --git a/Assets/Shaders/Trajectory_FS.shshaderb.shmeta b/Assets/Shaders/Trajectory_FS.shshaderb.shmeta new file mode 100644 index 00000000..296c38c9 --- /dev/null +++ b/Assets/Shaders/Trajectory_FS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: Trajectory_FS +ID: 45635685 +Type: 2 diff --git a/Assets/Shaders/Trajectory_VS.glsl b/Assets/Shaders/Trajectory_VS.glsl index 6d932734..86be6b7e 100644 --- a/Assets/Shaders/Trajectory_VS.glsl +++ b/Assets/Shaders/Trajectory_VS.glsl @@ -2,9 +2,9 @@ #extension GL_KHR_vulkan_glsl : enable // vertex inputs -layout(location = 0) in vec4 aPos; +layout(location = 0) in vec3 aPos; layout(location = 1) in vec2 aUV; -layout(location = 2) in vec2 aColor; +layout(location = 2) in vec4 aColor; layout(location = 3) in mat4 aTransform; // between shader stages diff --git a/Assets/Shaders/Trajectory_VS.shshaderb b/Assets/Shaders/Trajectory_VS.shshaderb new file mode 100644 index 00000000..6f509f5c Binary files /dev/null and b/Assets/Shaders/Trajectory_VS.shshaderb differ diff --git a/Assets/Shaders/Trajectory_VS.shshaderb.shmeta b/Assets/Shaders/Trajectory_VS.shshaderb.shmeta new file mode 100644 index 00000000..74584b44 --- /dev/null +++ b/Assets/Shaders/Trajectory_VS.shshaderb.shmeta @@ -0,0 +1,3 @@ +Name: Trajectory_VS +ID: 41042628 +Type: 2 diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h index 569818b9..38fe9aa3 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsConstants.h @@ -64,6 +64,17 @@ namespace SHADE /***************************************************************************/ static constexpr std::string_view DEFERRED_COMPOSITE_PASS = "Deferred Comp Pass"; + /***************************************************************************/ + /*! + + \brief + Name of vfx render graph node. + + */ + /***************************************************************************/ + static constexpr std::string_view VFX_PASS = "Vfx Pass"; + + /***************************************************************************/ /*! @@ -117,6 +128,7 @@ namespace SHADE static constexpr std::string_view GBUFFER_WRITE_SUBPASS = "G-Buffer Write"; static constexpr std::string_view UI_SUBPASS = "UI"; + static constexpr std::string_view VFX_SUBPASS = "VFX"; static constexpr std::array USABLE_SUBPASSES = { diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp index 7d783490..976939ce 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.cpp @@ -138,7 +138,8 @@ namespace SHADE //SHAssetManager::CompileAsset("../../Assets/Shaders/UI_VS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/UI_FS.glsl", false); //SHAssetManager::CompileAsset("../../Assets/Shaders/Text_VS.glsl", false); - + SHAssetManager::CompileAsset("../../Assets/Shaders/Trajectory_VS.glsl", false); + SHAssetManager::CompileAsset("../../Assets/Shaders/Trajectory_FS.glsl", false); // Load Built In Shaders static constexpr AssetID VS_DEFAULT = 39210065; defaultVertShader = SHResourceManager::LoadOrGet(VS_DEFAULT); @@ -154,8 +155,10 @@ namespace SHADE static constexpr AssetID TEXT_FS = 38024754; textFS = SHResourceManager::LoadOrGet(TEXT_FS); static constexpr AssetID RENDER_SC_VS = 48082949; renderToSwapchainVS = SHResourceManager::LoadOrGet(RENDER_SC_VS); static constexpr AssetID RENDER_SC_FS = 36869006; renderToSwapchainFS = SHResourceManager::LoadOrGet(RENDER_SC_FS); - static constexpr AssetID SHADOW_MAP_VS = 44646107; shadowMapVS = SHResourceManager::LoadOrGet(SHADOW_MAP_VS); - static constexpr AssetID SHADOW_MAP_FS = 45925790; shadowMapFS = SHResourceManager::LoadOrGet(SHADOW_MAP_FS); + static constexpr AssetID SHADOW_MAP_VS = 44646107; shadowMapVS = SHResourceManager::LoadOrGet(SHADOW_MAP_VS); + static constexpr AssetID SHADOW_MAP_FS = 45925790; shadowMapFS = SHResourceManager::LoadOrGet(SHADOW_MAP_FS); + static constexpr AssetID TRAJECTORY_VS = 41042628; trajectoryVS = SHResourceManager::LoadOrGet(TRAJECTORY_VS); + static constexpr AssetID TRAJECTORY_FS = 45635685; trajectoryFS = SHResourceManager::LoadOrGet(TRAJECTORY_FS); } @@ -308,13 +311,24 @@ namespace SHADE lightingSubSystem->PrepareShadowMapsForRead(cmdBuffer); }); + /*-----------------------------------------------------------------------*/ + /* VFX PASS */ + /*-----------------------------------------------------------------------*/ + auto vfxPass = renderGraph->AddNode(SHGraphicsConstants::RenderGraphEntityNames::VFX_PASS.data(), { "Scene", "Depth Buffer" }, { SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data() }); + auto vfxSubpass = vfxPass->AddSubpass("Vfx Subpass", worldViewport, worldRenderer); + vfxSubpass->AddColorOutput("Scene"); + vfxSubpass->AddDepthOutput("Depth Buffer"); + vfxSubpass->AddExteriorDrawCalls([=](Handle cmdBuffer, Handle renderer, uint32_t frameIndex) + { + trajectoryRenderingSubSystem->Render(cmdBuffer, renderer, frameIndex); + }); /*-----------------------------------------------------------------------*/ /* DEBUG DRAW PASS INIT */ /*-----------------------------------------------------------------------*/ // Set up Debug Draw Passes // - Depth Tested - auto debugDrawNodeDepth = renderGraph->AddNode(SHGraphicsConstants::RenderGraphEntityNames::DEBUG_DRAW_DEPTH_PASS.data(), {"Scene", "Depth Buffer"}, {SHGraphicsConstants::RenderGraphEntityNames::GBUFFER_PASS.data(), SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data()}); + auto debugDrawNodeDepth = renderGraph->AddNode(SHGraphicsConstants::RenderGraphEntityNames::DEBUG_DRAW_DEPTH_PASS.data(), {"Scene", "Depth Buffer"}, { SHGraphicsConstants::RenderGraphEntityNames::VFX_PASS.data()/*, SHGraphicsConstants::RenderGraphEntityNames::DEFERRED_COMPOSITE_PASS.data()*/}); auto debugDrawDepthSubpass = debugDrawNodeDepth->AddSubpass("Debug Draw with Depth", worldViewport, worldRenderer); debugDrawDepthSubpass->AddColorOutput("Scene"); debugDrawDepthSubpass->AddDepthOutput("Depth Buffer"); @@ -435,8 +449,8 @@ namespace SHADE trajectoryRenderingSubSystem = resourceManager.Create(); - //auto gBufferNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data()); - //trajectoryRenderingSubSystem->Init(device, ) + auto vfxNode = renderGraph->GetNode(SHGraphicsConstants::RenderGraphEntityNames::SCREEN_SPACE_PASS.data()); + trajectoryRenderingSubSystem->Init(device, vfxNode->GetRenderpass(), vfxNode->GetSubpass(SHGraphicsConstants::RenderGraphEntityNames::UI_SUBPASS), trajectoryVS, trajectoryFS); SHGlobalDescriptorSets::SetLightingSubSystem(lightingSubSystem); @@ -572,6 +586,7 @@ namespace SHADE } textRenderingSubSystem->Run(frameIndex); + trajectoryRenderingSubSystem->Run(frameIndex); for (auto renderer : renderers) diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h index 0576233f..21d18be1 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/Interface/SHGraphicsSystem.h @@ -471,6 +471,8 @@ namespace SHADE Handle renderToSwapchainFS; Handle shadowMapVS; Handle shadowMapFS; + Handle trajectoryVS; + Handle trajectoryFS; // Fonts Handle testFont; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp index 9401d076..77dd66c8 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.cpp @@ -62,6 +62,11 @@ namespace SHADE mesh = newMesh; } + void SHTrajectoryRenderableComponent::SetPositions(std::vector const& inPositions) noexcept + { + positions = inPositions; + } + void SHTrajectoryRenderableComponent::SetStartColor(SHVec4 color) noexcept { startColor = color; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h index ac0343d4..d6f7be12 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderableComponent.h @@ -26,7 +26,7 @@ namespace SHADE //! Color the trajectory should evolve to the longer it is SHVec4 endColor; - //! evolving rate of the color (with respect to dt) + //! evolving rate of the color float colorEvolveRate; public: @@ -34,6 +34,7 @@ namespace SHADE /* PRIVATE MEMBER FUNCTIONS */ /*-----------------------------------------------------------------------*/ void SetMesh(Handle newMesh) noexcept; + void SetPositions (std::vector const& inPositions) noexcept; void SetStartColor(SHVec4 startColor) noexcept; void SetEndColor (SHVec4 endColor) noexcept; void SetColorEvolveRate (float rate) noexcept; diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp index 9eaca200..740ffa92 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.cpp @@ -70,11 +70,17 @@ namespace SHADE pipeline->GetPipelineState().SetColorBlenState(colorBlendState); } - void SHTrajectoryRenderingSubSystem::Run(uint32_t frameIndex, float dt) noexcept + void SHTrajectoryRenderingSubSystem::Run(uint32_t frameIndex) noexcept { auto& comps = SHComponentManager::GetDense(); for (auto& comp : comps) { + comp.SetPositions(std::vector + { + SHVec3 {}, + SHVec3 {} + }); + // If has positions, feed data to buffer. if (comp.HasPositions()) { @@ -115,7 +121,7 @@ namespace SHADE currentColor = SHVec4::Lerp(startColor, endColor, lerpValue); // evolve lerp value and clamp to 1 - lerpValue = std::max (1.0f, lerpValue + (colorEvolveRate * dt)); + lerpValue = std::max (1.0f, lerpValue + colorEvolveRate); } // add draw data for this trajectory @@ -134,40 +140,46 @@ namespace SHADE comp.ClearPositions(); } - // read transform data to buffer - // read draw data to buffer - SHVkUtil::EnsureBufferAndCopyHostVisibleData(logicalDevice, transformBuffer, transformData.data(), sizeof (SHMatrix) * transformData.size(), vk::BufferUsageFlagBits::eVertexBuffer, "Trajectory System Transform Buffer"); + if (!transformData.empty()) + { + // read transform data to buffer + // read draw data to buffer + SHVkUtil::EnsureBufferAndCopyHostVisibleData(logicalDevice, transformBuffer, transformData.data(), sizeof (SHMatrix) * transformData.size(), vk::BufferUsageFlagBits::eVertexBuffer, "Trajectory System Transform Buffer"); - SHVkUtil::EnsureBufferAndCopyHostVisibleData(logicalDevice, drawDataBuffer, drawData.data(), sizeof(vk::DrawIndexedIndirectCommand) * drawData.size(), vk::BufferUsageFlagBits::eIndirectBuffer, "Trajectory System Draw Data Buffer"); + SHVkUtil::EnsureBufferAndCopyHostVisibleData(logicalDevice, drawDataBuffer, drawData.data(), sizeof(vk::DrawIndexedIndirectCommand) * drawData.size(), vk::BufferUsageFlagBits::eIndirectBuffer, "Trajectory System Draw Data Buffer"); - SHVkUtil::EnsureBufferAndCopyHostVisibleData(logicalDevice, colorBuffer, colorData.data(), sizeof(SHVec4) * colorData.size(), vk::BufferUsageFlagBits::eVertexBuffer, "Trajectory System Color Data Buffer"); + SHVkUtil::EnsureBufferAndCopyHostVisibleData(logicalDevice, colorBuffer, colorData.data(), sizeof(SHVec4) * colorData.size(), vk::BufferUsageFlagBits::eVertexBuffer, "Trajectory System Color Data Buffer"); + } } void SHTrajectoryRenderingSubSystem::Render(Handle cmdBuffer, Handle renderer, uint32_t frameIndex) noexcept { - auto const& mappings = SHGraphicsPredefinedData::GetMappings(SHGraphicsPredefinedData::SystemType::TRAJECTORY_RENDERING); - uint32_t staticGlobalSetIndex = mappings.at(SHPredefinedDescriptorTypes::STATIC_DATA); - uint32_t cameraSetIndex = mappings.at(SHPredefinedDescriptorTypes::CAMERA); + if (!transformData.empty()) + { + auto const& mappings = SHGraphicsPredefinedData::GetMappings(SHGraphicsPredefinedData::SystemType::TRAJECTORY_RENDERING); + uint32_t staticGlobalSetIndex = mappings.at(SHPredefinedDescriptorTypes::STATIC_DATA); + uint32_t cameraSetIndex = mappings.at(SHPredefinedDescriptorTypes::CAMERA); - cmdBuffer->BindPipeline(pipeline); + cmdBuffer->BindPipeline(pipeline); - // Bind global data - SHGlobalDescriptorSets::BindStaticGlobalData(cmdBuffer, SH_PIPELINE_TYPE::GRAPHICS, staticGlobalSetIndex); + // Bind global data + SHGlobalDescriptorSets::BindStaticGlobalData(cmdBuffer, SH_PIPELINE_TYPE::GRAPHICS, staticGlobalSetIndex); - // Bind camera data - renderer->BindDescriptorSet(cmdBuffer, SH_PIPELINE_TYPE::GRAPHICS, cameraSetIndex, frameIndex); + // Bind camera data + renderer->BindDescriptorSet(cmdBuffer, SH_PIPELINE_TYPE::GRAPHICS, cameraSetIndex, frameIndex); - // Bind color vertex buffer - cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRAJECTORY_COLOR, colorBuffer, 0); + // Bind color vertex buffer + cmdBuffer->BindVertexBuffer(SHGraphicsConstants::VertexBufferBindings::TRAJECTORY_COLOR, colorBuffer, 0); - // call draw call - cmdBuffer->DrawMultiIndirect(drawDataBuffer, drawData.size()); + // call draw call + cmdBuffer->DrawMultiIndirect(drawDataBuffer, drawData.size()); - // clear CPU transform and draw data - transformData.clear(); - drawData.clear(); - colorData.clear(); + // clear CPU transform and draw data + transformData.clear(); + drawData.clear(); + colorData.clear(); + } } diff --git a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.h b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.h index 2bba5703..12db99a0 100644 --- a/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.h +++ b/SHADE_Engine/src/Graphics/MiddleEnd/TrajectoryRendering/SHTrajectoryRenderingSubSystem.h @@ -57,7 +57,7 @@ namespace SHADE public: void Init (Handle device, Handle compatibleRenderpass, Handle subpass, Handle textVS, Handle textFS) noexcept; - void Run(uint32_t frameIndex, float dt) noexcept; + void Run(uint32_t frameIndex) noexcept; void Render(Handle cmdBuffer, Handle renderer, uint32_t frameIndex) noexcept; void Exit(void) noexcept;