From 604fa15f78220776cdec1960c00d55cc31891fa2 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 28 Dec 2022 19:28:53 +0530 Subject: [PATCH 1/8] add DirectionalLightComponent to vertex shader --- .../shaders/custom_vertex_shader.hlsl | 5 ++++ .../shaders/register_locations_pixel_shader.h | 2 ++ .../register_locations_vertex_shader.h | 1 + rootex/framework/systems/render_system.cpp | 30 ++++++++++++++++++- rootex/framework/systems/render_system.h | 1 + 5 files changed, 38 insertions(+), 1 deletion(-) diff --git a/rootex/core/renderer/shaders/custom_vertex_shader.hlsl b/rootex/core/renderer/shaders/custom_vertex_shader.hlsl index 216ab61d1..dc66ef363 100644 --- a/rootex/core/renderer/shaders/custom_vertex_shader.hlsl +++ b/rootex/core/renderer/shaders/custom_vertex_shader.hlsl @@ -6,6 +6,11 @@ cbuffer CBuf : register(PER_OBJECT_VS_HLSL) matrix MInverseTranspose; }; +cbuffer CBuf : register(PER_FRAME_DL_VS_HLSL) +{ + matrix DLTC; +}; + cbuffer CBuf : register(PER_FRAME_VS_HLSL) { matrix V; diff --git a/rootex/core/renderer/shaders/register_locations_pixel_shader.h b/rootex/core/renderer/shaders/register_locations_pixel_shader.h index b3007d80a..f49e108b1 100644 --- a/rootex/core/renderer/shaders/register_locations_pixel_shader.h +++ b/rootex/core/renderer/shaders/register_locations_pixel_shader.h @@ -21,6 +21,8 @@ #define CUSTOM_PER_OBJECT_PS_HLSL CONCAT(b, CUSTOM_PER_OBJECT_PS_CPP) #define GOD_RAYS_PS_CPP 9 #define GOD_RAYS_PS_HLSL CONCAT(b, GOD_RAYS_PS_CPP) +#define PER_FRAME_DL_VS_CPP 10 +#define PER_FRAME_DL_VS_HLSL CONCAT(b, PER_FRAME_DL_VS_CPP) #define DIFFUSE_PS_CPP 1 #define DIFFUSE_PS_HLSL CONCAT(t, DIFFUSE_PS_CPP) diff --git a/rootex/core/renderer/shaders/register_locations_vertex_shader.h b/rootex/core/renderer/shaders/register_locations_vertex_shader.h index 1ba756bc1..d77ee1247 100644 --- a/rootex/core/renderer/shaders/register_locations_vertex_shader.h +++ b/rootex/core/renderer/shaders/register_locations_vertex_shader.h @@ -6,6 +6,7 @@ #define BONES_VS_CPP 4 #define PER_OBJECT_VS_HLSL CONCAT(b, PER_OBJECT_VS_CPP) +#define PER_FRAME_DL_VS_HLSL CONCAT(b, PER_FRAME_VS_CPP) #define PER_FRAME_VS_HLSL CONCAT(b, PER_FRAME_VS_CPP) #define PER_CAMERA_CHANGE_VS_HLSL CONCAT(b, PER_CAMERA_CHANGE_VS_CPP) #define BONES_VS_HLSL CONCAT(b, BONES_VS_CPP) diff --git a/rootex/framework/systems/render_system.cpp b/rootex/framework/systems/render_system.cpp index 880b298c9..9828ae633 100644 --- a/rootex/framework/systems/render_system.cpp +++ b/rootex/framework/systems/render_system.cpp @@ -11,6 +11,7 @@ #include "light_system.h" #include "application.h" #include "scene_loader.h" +#include "components/visual/light/directional_light_component.h" #define LINE_MAX_VERTEX_COUNT 1000 #define LINE_VERTEX_COUNT 2 @@ -47,6 +48,14 @@ void RenderSystem::recoverLostDevice() ERR("Fatal error: D3D Device lost"); } +void RenderSystem::getDirectionalLightComponent() +{ + std::cout << "hello"; + DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); + std::cout << first.getTransformComponent(); + RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); +} + void RenderSystem::setConfig(const SceneSettings& sceneSettings) { Scene* cameraScene = SceneLoader::GetSingleton()->getRootScene()->findScene(sceneSettings.camera); @@ -395,7 +404,17 @@ void RenderSystem::setPerCameraVSCBs() void RenderSystem::setPerFrameVSCBs(float fogStart, float fogEnd) { - const Matrix& view = getCamera()->getViewMatrix(); + if (!ECSFactory::GetAllDirectionalLightComponent().empty()) + { + DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); + //std::cout << first.getTransformComponent() << std::endl; + Vector3 directionalLightPosition = first.getTransformComponent()->getAbsolutePosition(); + //std::cout << "x component: " << directionalLightPosition.x << "y component: " << directionalLightPosition.y << "z component: " << directionalLightPosition.z << std::endl; + RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { first.getTransformComponent()->getAbsoluteTransform() }, m_PerFrameVSCB.Get()); + RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_DL_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); + } + + const Matrix& view = getCamera()->getViewMatrix(); RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { view.Transpose(), -fogStart, -fogEnd }, m_PerFrameVSCB.Get()); RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); @@ -479,6 +498,15 @@ void RenderSystem::setCamera(CameraComponent* camera) { if (camera) { + std::cout << "heyo"<getAbsolutePosition(); + std::cout << "x component: " << directionalLightPosition.x << "y component: " << directionalLightPosition.y << "z component: " << directionalLightPosition.z << std::endl; + } m_Camera = camera; setPerCameraVSCBs(); setPerCameraChangePSCBs(); diff --git a/rootex/framework/systems/render_system.h b/rootex/framework/systems/render_system.h index 58ec4d806..509141f58 100644 --- a/rootex/framework/systems/render_system.h +++ b/rootex/framework/systems/render_system.h @@ -61,6 +61,7 @@ class RenderSystem : public System void submitCone(const Matrix& transform, const float& height, const float& radius); void recoverLostDevice(); + void getDirectionalLightComponent(); void setCamera(CameraComponent* camera); void restoreCamera(); From 1b06460d5769bc5cb5377116ba177a7e8f1c3bb6 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 28 Dec 2022 20:13:59 +0530 Subject: [PATCH 2/8] add DirectionalLightComponent to vertex-shader --- .../shaders/register_locations_pixel_shader.h | 2 -- .../register_locations_vertex_shader.h | 3 ++- rootex/framework/systems/render_system.cpp | 23 ++----------------- 3 files changed, 4 insertions(+), 24 deletions(-) diff --git a/rootex/core/renderer/shaders/register_locations_pixel_shader.h b/rootex/core/renderer/shaders/register_locations_pixel_shader.h index f49e108b1..b3007d80a 100644 --- a/rootex/core/renderer/shaders/register_locations_pixel_shader.h +++ b/rootex/core/renderer/shaders/register_locations_pixel_shader.h @@ -21,8 +21,6 @@ #define CUSTOM_PER_OBJECT_PS_HLSL CONCAT(b, CUSTOM_PER_OBJECT_PS_CPP) #define GOD_RAYS_PS_CPP 9 #define GOD_RAYS_PS_HLSL CONCAT(b, GOD_RAYS_PS_CPP) -#define PER_FRAME_DL_VS_CPP 10 -#define PER_FRAME_DL_VS_HLSL CONCAT(b, PER_FRAME_DL_VS_CPP) #define DIFFUSE_PS_CPP 1 #define DIFFUSE_PS_HLSL CONCAT(t, DIFFUSE_PS_CPP) diff --git a/rootex/core/renderer/shaders/register_locations_vertex_shader.h b/rootex/core/renderer/shaders/register_locations_vertex_shader.h index d77ee1247..dab632a1d 100644 --- a/rootex/core/renderer/shaders/register_locations_vertex_shader.h +++ b/rootex/core/renderer/shaders/register_locations_vertex_shader.h @@ -4,9 +4,10 @@ #define PER_FRAME_VS_CPP 2 #define PER_OBJECT_VS_CPP 3 #define BONES_VS_CPP 4 +#define PER_FRAME_DL_VS_CPP 5 #define PER_OBJECT_VS_HLSL CONCAT(b, PER_OBJECT_VS_CPP) -#define PER_FRAME_DL_VS_HLSL CONCAT(b, PER_FRAME_VS_CPP) +#define PER_FRAME_DL_VS_HLSL CONCAT(b, PER_FRAME_DL_VS_CPP) #define PER_FRAME_VS_HLSL CONCAT(b, PER_FRAME_VS_CPP) #define PER_CAMERA_CHANGE_VS_HLSL CONCAT(b, PER_CAMERA_CHANGE_VS_CPP) #define BONES_VS_HLSL CONCAT(b, BONES_VS_CPP) diff --git a/rootex/framework/systems/render_system.cpp b/rootex/framework/systems/render_system.cpp index 9828ae633..40dc49517 100644 --- a/rootex/framework/systems/render_system.cpp +++ b/rootex/framework/systems/render_system.cpp @@ -48,14 +48,6 @@ void RenderSystem::recoverLostDevice() ERR("Fatal error: D3D Device lost"); } -void RenderSystem::getDirectionalLightComponent() -{ - std::cout << "hello"; - DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); - std::cout << first.getTransformComponent(); - RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); -} - void RenderSystem::setConfig(const SceneSettings& sceneSettings) { Scene* cameraScene = SceneLoader::GetSingleton()->getRootScene()->findScene(sceneSettings.camera); @@ -407,14 +399,12 @@ void RenderSystem::setPerFrameVSCBs(float fogStart, float fogEnd) if (!ECSFactory::GetAllDirectionalLightComponent().empty()) { DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); - //std::cout << first.getTransformComponent() << std::endl; Vector3 directionalLightPosition = first.getTransformComponent()->getAbsolutePosition(); - //std::cout << "x component: " << directionalLightPosition.x << "y component: " << directionalLightPosition.y << "z component: " << directionalLightPosition.z << std::endl; RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { first.getTransformComponent()->getAbsoluteTransform() }, m_PerFrameVSCB.Get()); RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_DL_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); - } + } - const Matrix& view = getCamera()->getViewMatrix(); + const Matrix& view = getCamera()->getViewMatrix(); RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { view.Transpose(), -fogStart, -fogEnd }, m_PerFrameVSCB.Get()); RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); @@ -498,15 +488,6 @@ void RenderSystem::setCamera(CameraComponent* camera) { if (camera) { - std::cout << "heyo"<getAbsolutePosition(); - std::cout << "x component: " << directionalLightPosition.x << "y component: " << directionalLightPosition.y << "z component: " << directionalLightPosition.z << std::endl; - } m_Camera = camera; setPerCameraVSCBs(); setPerCameraChangePSCBs(); From 621cedd31c8e29e553e365485142c579d154f5c4 Mon Sep 17 00:00:00 2001 From: unknown Date: Wed, 25 Jan 2023 23:41:44 +0530 Subject: [PATCH 3/8] create a shadow-texture --- rootex/core/renderer/rendering_device.cpp | 10 +++++----- rootex/core/renderer/rendering_device.h | 2 ++ 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/rootex/core/renderer/rendering_device.cpp b/rootex/core/renderer/rendering_device.cpp index 501a78b46..ca7b377be 100644 --- a/rootex/core/renderer/rendering_device.cpp +++ b/rootex/core/renderer/rendering_device.cpp @@ -65,7 +65,7 @@ void RenderingDevice::createSwapChainBufferViews() void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, float height) { - Microsoft::WRL::ComPtr depthStencil = nullptr; + Microsoft::WRL::ComPtr shadowTexture = nullptr; D3D11_TEXTURE2D_DESC descDepth = { 0 }; descDepth.Width = width; descDepth.Height = height; @@ -77,14 +77,14 @@ void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, descDepth.Usage = D3D11_USAGE_DEFAULT; descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE; - GFX_ERR_CHECK(m_Device->CreateTexture2D(&descDepth, nullptr, &depthStencil)); + GFX_ERR_CHECK(m_Device->CreateTexture2D(&descDepth, nullptr, &shadowTexture)); D3D11_DEPTH_STENCIL_VIEW_DESC descDSView = {}; descDSView.Format = DXGI_FORMAT_D32_FLOAT_S8X24_UINT; descDSView.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; descDSView.Texture2D.MipSlice = 0u; - GFX_ERR_CHECK(m_Device->CreateDepthStencilView(depthStencil.Get(), &descDSView, &m_MainDSV)); + GFX_ERR_CHECK(m_Device->CreateDepthStencilView(shadowTexture.Get(), &descDSView, &m_ShadowTextureDSV)); D3D11_SHADER_RESOURCE_VIEW_DESC depthSRVDesc; depthSRVDesc.Format = DXGI_FORMAT_R32_FLOAT_X8X24_TYPELESS; @@ -92,7 +92,7 @@ void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, depthSRVDesc.Texture2D.MostDetailedMip = 0; depthSRVDesc.Texture2D.MipLevels = 1; - GFX_ERR_CHECK(m_Device->CreateShaderResourceView(depthStencil.Get(), &depthSRVDesc, &m_MainDSSRV)); + GFX_ERR_CHECK(m_Device->CreateShaderResourceView(shadowTexture.Get(), &depthSRVDesc, &m_ShadowTextureDSSRV)); D3D11_SHADER_RESOURCE_VIEW_DESC stencilSRVDesc; stencilSRVDesc.Format = DXGI_FORMAT_X32_TYPELESS_G8X24_UINT; @@ -100,7 +100,7 @@ void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, stencilSRVDesc.Texture2D.MostDetailedMip = 0; stencilSRVDesc.Texture2D.MipLevels = 1; - GFX_ERR_CHECK(m_Device->CreateShaderResourceView(depthStencil.Get(), &stencilSRVDesc, &m_MainStencilSRV)); + GFX_ERR_CHECK(m_Device->CreateShaderResourceView(shadowTexture.Get(), &stencilSRVDesc, &m_MainStencilSRV)); } void RenderingDevice::setScreenState(bool fullscreen) diff --git a/rootex/core/renderer/rendering_device.h b/rootex/core/renderer/rendering_device.h index f8f86e96d..67091fc7e 100644 --- a/rootex/core/renderer/rendering_device.h +++ b/rootex/core/renderer/rendering_device.h @@ -40,6 +40,8 @@ class RenderingDevice Microsoft::WRL::ComPtr m_MainRTV; Microsoft::WRL::ComPtr m_MainRTSRV; Microsoft::WRL::ComPtr m_MainDSV; + Microsoft::WRL::ComPtr m_ShadowTextureDSV; + Microsoft::WRL::ComPtr m_ShadowTextureDSSRV; Microsoft::WRL::ComPtr m_MainDSSRV; Microsoft::WRL::ComPtr m_MainStencilSRV; From e11a75a230ea4a5457a6d8fc259f9cf581b3203d Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 26 Jan 2023 00:00:50 +0530 Subject: [PATCH 4/8] create a shadow-texture --- rootex/core/renderer/rendering_device.cpp | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/rootex/core/renderer/rendering_device.cpp b/rootex/core/renderer/rendering_device.cpp index ca7b377be..eabe858bd 100644 --- a/rootex/core/renderer/rendering_device.cpp +++ b/rootex/core/renderer/rendering_device.cpp @@ -65,6 +65,7 @@ void RenderingDevice::createSwapChainBufferViews() void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, float height) { + Microsoft::WRL::ComPtr depthStencil = nullptr; Microsoft::WRL::ComPtr shadowTexture = nullptr; D3D11_TEXTURE2D_DESC descDepth = { 0 }; descDepth.Width = width; @@ -77,6 +78,7 @@ void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, descDepth.Usage = D3D11_USAGE_DEFAULT; descDepth.BindFlags = D3D11_BIND_DEPTH_STENCIL | D3D11_BIND_SHADER_RESOURCE; + GFX_ERR_CHECK(m_Device->CreateTexture2D(&descDepth, nullptr, &depthStencil)); GFX_ERR_CHECK(m_Device->CreateTexture2D(&descDepth, nullptr, &shadowTexture)); D3D11_DEPTH_STENCIL_VIEW_DESC descDSView = {}; @@ -84,6 +86,7 @@ void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, descDSView.ViewDimension = D3D11_DSV_DIMENSION_TEXTURE2D; descDSView.Texture2D.MipSlice = 0u; + GFX_ERR_CHECK(m_Device->CreateDepthStencilView(depthStencil.Get(), &descDSView, &m_MainDSV)); GFX_ERR_CHECK(m_Device->CreateDepthStencilView(shadowTexture.Get(), &descDSView, &m_ShadowTextureDSV)); D3D11_SHADER_RESOURCE_VIEW_DESC depthSRVDesc; @@ -92,6 +95,7 @@ void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, depthSRVDesc.Texture2D.MostDetailedMip = 0; depthSRVDesc.Texture2D.MipLevels = 1; + GFX_ERR_CHECK(m_Device->CreateShaderResourceView(depthStencil.Get(), &depthSRVDesc, &m_MainDSSRV)); GFX_ERR_CHECK(m_Device->CreateShaderResourceView(shadowTexture.Get(), &depthSRVDesc, &m_ShadowTextureDSSRV)); D3D11_SHADER_RESOURCE_VIEW_DESC stencilSRVDesc; @@ -100,7 +104,7 @@ void RenderingDevice::createDepthStencil(DXGI_SWAP_CHAIN_DESC& sd, float width, stencilSRVDesc.Texture2D.MostDetailedMip = 0; stencilSRVDesc.Texture2D.MipLevels = 1; - GFX_ERR_CHECK(m_Device->CreateShaderResourceView(shadowTexture.Get(), &stencilSRVDesc, &m_MainStencilSRV)); + GFX_ERR_CHECK(m_Device->CreateShaderResourceView(depthStencil.Get(), &stencilSRVDesc, &m_MainStencilSRV)); } void RenderingDevice::setScreenState(bool fullscreen) From 129e1df8d1b35209467af86a6afd550ffef309aa Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 26 Jan 2023 01:12:51 +0530 Subject: [PATCH 5/8] make a setViewMatrixShadowRender --- rootex/core/renderer/rendering_device.h | 4 ++-- rootex/framework/systems/render_system.cpp | 16 ++++++++++++++++ rootex/framework/systems/render_system.h | 7 +++++++ 3 files changed, 25 insertions(+), 2 deletions(-) diff --git a/rootex/core/renderer/rendering_device.h b/rootex/core/renderer/rendering_device.h index 67091fc7e..da9430769 100644 --- a/rootex/core/renderer/rendering_device.h +++ b/rootex/core/renderer/rendering_device.h @@ -40,8 +40,8 @@ class RenderingDevice Microsoft::WRL::ComPtr m_MainRTV; Microsoft::WRL::ComPtr m_MainRTSRV; Microsoft::WRL::ComPtr m_MainDSV; - Microsoft::WRL::ComPtr m_ShadowTextureDSV; - Microsoft::WRL::ComPtr m_ShadowTextureDSSRV; + Microsoft::WRL::ComPtr m_ShadowTextureDSV; + Microsoft::WRL::ComPtr m_ShadowTextureDSSRV; Microsoft::WRL::ComPtr m_MainDSSRV; Microsoft::WRL::ComPtr m_MainStencilSRV; diff --git a/rootex/framework/systems/render_system.cpp b/rootex/framework/systems/render_system.cpp index 3f21d02c9..357176d7c 100644 --- a/rootex/framework/systems/render_system.cpp +++ b/rootex/framework/systems/render_system.cpp @@ -30,6 +30,7 @@ RenderSystem::RenderSystem() m_Binder.bind(RootexEvents::OpenedScene, this, &RenderSystem::onOpenedScene); m_Camera = SceneLoader::GetSingleton()->getRootScene()->getEntity().getComponent(); + m_DLC = SceneLoader::GetSingleton()->getRootScene()->getEntity().getComponent(); m_LineMaterial = ResourceLoader::CreateBasicMaterialResourceFile("rootex/assets/materials/line.basic.rmat"); m_CurrentFrameLines.m_Endpoints.reserve(LINE_MAX_VERTEX_COUNT * LINE_VERTEX_COUNT * 3); @@ -280,6 +281,21 @@ void RenderSystem::submitLine(const Vector3& from, const Vector3& to) m_CurrentFrameLines.m_Indices.push_back(m_CurrentFrameLines.m_Indices.size()); } +void RenderSystem::refreshViewMatrixForShadowRender() +{ + const Matrix& absoluteTransform = m_DLC->getTransformComponent()->getAbsoluteTransform(); + m_ViewMatrixForShadowRender = Matrix::CreateLookAt( + absoluteTransform.Translation(), + absoluteTransform.Translation() + absoluteTransform.Forward(), + absoluteTransform.Up()); +} + +Matrix RenderSystem::setViewMatrixForShadowRender() +{ + refreshViewMatrixForShadowRender(); + return m_ViewMatrixForShadowRender; +} + void RenderSystem::submitBox(const Vector3& min, const Vector3& max) { Vector3 d = max - min; diff --git a/rootex/framework/systems/render_system.h b/rootex/framework/systems/render_system.h index 509141f58..5fedace9a 100644 --- a/rootex/framework/systems/render_system.h +++ b/rootex/framework/systems/render_system.h @@ -9,6 +9,8 @@ #include "components/visual/model/animated_model_component.h" #include "components/visual/model/sprite_component.h" #include "transform_system.h" +#include "components/space/transform_component.h" +#include "components/visual/light/directional_light_component.h" #include "ASSAO/ASSAO.h" @@ -24,6 +26,7 @@ class RenderSystem : public System }; CameraComponent* m_Camera; + DirectionalLightComponent* m_DLC; Ptr m_Renderer; @@ -63,6 +66,10 @@ class RenderSystem : public System void recoverLostDevice(); void getDirectionalLightComponent(); + Matrix m_ViewMatrixForShadowRender; + Matrix setViewMatrixForShadowRender(); + void refreshViewMatrixForShadowRender(); + void setCamera(CameraComponent* camera); void restoreCamera(); From a7f6bf5c192429185a2e17ff2f90425926556081 Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 26 Jan 2023 03:06:18 +0530 Subject: [PATCH 6/8] improve the setViewMatrixShadowRender --- .../renderer/shaders/basic_vertex_shader.hlsl | 2 +- .../shaders/custom_vertex_shader.hlsl | 2 +- rootex/framework/systems/render_system.cpp | 19 ++++++------------- rootex/framework/systems/render_system.h | 2 -- 4 files changed, 8 insertions(+), 17 deletions(-) diff --git a/rootex/core/renderer/shaders/basic_vertex_shader.hlsl b/rootex/core/renderer/shaders/basic_vertex_shader.hlsl index 431c732b9..8899c864e 100644 --- a/rootex/core/renderer/shaders/basic_vertex_shader.hlsl +++ b/rootex/core/renderer/shaders/basic_vertex_shader.hlsl @@ -40,7 +40,7 @@ struct PixelInputType PixelInputType main(VertexInputType input) { PixelInputType output; - output.screenPosition = mul(input.position, mul(M, mul(V, P))); + output.screenPosition = mul(input.position, mul(M, mul(DLTC, P))); output.normal = normalize(mul((float3)input.normal, (float3x3)MInverseTranspose)); output.worldPosition = mul(input.position, M); output.tex.x = input.tex.x; diff --git a/rootex/core/renderer/shaders/custom_vertex_shader.hlsl b/rootex/core/renderer/shaders/custom_vertex_shader.hlsl index dc66ef363..78f06cf63 100644 --- a/rootex/core/renderer/shaders/custom_vertex_shader.hlsl +++ b/rootex/core/renderer/shaders/custom_vertex_shader.hlsl @@ -50,7 +50,7 @@ PixelInputType main(VertexInputType input) output.worldPosition = mul(input.position, M); output.tex.x = input.tex.x; output.tex.y = 1 - input.tex.y; - output.color = float4(1.0f, 1.0f, 1.0f, 1.0f); + output.color = float4(1.0f, 1.0f, 1.0f, DLTC._41); output.tangent = mul(input.tangent, (float3x3)M); diff --git a/rootex/framework/systems/render_system.cpp b/rootex/framework/systems/render_system.cpp index 357176d7c..4d2271c5d 100644 --- a/rootex/framework/systems/render_system.cpp +++ b/rootex/framework/systems/render_system.cpp @@ -30,7 +30,6 @@ RenderSystem::RenderSystem() m_Binder.bind(RootexEvents::OpenedScene, this, &RenderSystem::onOpenedScene); m_Camera = SceneLoader::GetSingleton()->getRootScene()->getEntity().getComponent(); - m_DLC = SceneLoader::GetSingleton()->getRootScene()->getEntity().getComponent(); m_LineMaterial = ResourceLoader::CreateBasicMaterialResourceFile("rootex/assets/materials/line.basic.rmat"); m_CurrentFrameLines.m_Endpoints.reserve(LINE_MAX_VERTEX_COUNT * LINE_VERTEX_COUNT * 3); @@ -281,19 +280,14 @@ void RenderSystem::submitLine(const Vector3& from, const Vector3& to) m_CurrentFrameLines.m_Indices.push_back(m_CurrentFrameLines.m_Indices.size()); } -void RenderSystem::refreshViewMatrixForShadowRender() -{ - const Matrix& absoluteTransform = m_DLC->getTransformComponent()->getAbsoluteTransform(); - m_ViewMatrixForShadowRender = Matrix::CreateLookAt( - absoluteTransform.Translation(), - absoluteTransform.Translation() + absoluteTransform.Forward(), - absoluteTransform.Up()); -} - Matrix RenderSystem::setViewMatrixForShadowRender() { - refreshViewMatrixForShadowRender(); - return m_ViewMatrixForShadowRender; + if (!ECSFactory::GetAllDirectionalLightComponent().empty()) + { + DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); + return first.getTransformComponent()->getAbsoluteTransform(); + }; + return Matrix(); } void RenderSystem::submitBox(const Vector3& min, const Vector3& max) @@ -415,7 +409,6 @@ void RenderSystem::setPerFrameVSCBs(float fogStart, float fogEnd) if (!ECSFactory::GetAllDirectionalLightComponent().empty()) { DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); - Vector3 directionalLightPosition = first.getTransformComponent()->getAbsolutePosition(); RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { first.getTransformComponent()->getAbsoluteTransform() }, m_PerFrameVSCB.Get()); RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_DL_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); } diff --git a/rootex/framework/systems/render_system.h b/rootex/framework/systems/render_system.h index 5fedace9a..b5302c9d0 100644 --- a/rootex/framework/systems/render_system.h +++ b/rootex/framework/systems/render_system.h @@ -10,7 +10,6 @@ #include "components/visual/model/sprite_component.h" #include "transform_system.h" #include "components/space/transform_component.h" -#include "components/visual/light/directional_light_component.h" #include "ASSAO/ASSAO.h" @@ -26,7 +25,6 @@ class RenderSystem : public System }; CameraComponent* m_Camera; - DirectionalLightComponent* m_DLC; Ptr m_Renderer; From b0946aeb8b6d30588a0dc063d80f24b5d0236f9b Mon Sep 17 00:00:00 2001 From: unknown Date: Thu, 26 Jan 2023 15:27:37 +0530 Subject: [PATCH 7/8] create setShadowDSV function --- rootex/core/renderer/rendering_device.cpp | 5 +++++ rootex/core/renderer/rendering_device.h | 2 ++ rootex/core/renderer/shaders/basic_vertex_shader.hlsl | 2 +- rootex/framework/systems/render_system.cpp | 7 ++++--- rootex/framework/systems/render_system.h | 3 +-- 5 files changed, 13 insertions(+), 6 deletions(-) diff --git a/rootex/core/renderer/rendering_device.cpp b/rootex/core/renderer/rendering_device.cpp index eabe858bd..702b76df1 100644 --- a/rootex/core/renderer/rendering_device.cpp +++ b/rootex/core/renderer/rendering_device.cpp @@ -837,6 +837,11 @@ void RenderingDevice::setOffScreenRTVOnly() m_Context->OMSetRenderTargets(1, m_OffScreenRTV.GetAddressOf(), nullptr); } +void RenderingDevice::setShadowTextureDSV() +{ + m_Context->OMSetRenderTargets(1, m_ShadowTextureDSV.GetAddressOf(), nullptr); +} + void RenderingDevice::setMainRT() { m_Context->OMSetRenderTargets(1, m_MainRTV.GetAddressOf(), nullptr); diff --git a/rootex/core/renderer/rendering_device.h b/rootex/core/renderer/rendering_device.h index da9430769..7017ac488 100644 --- a/rootex/core/renderer/rendering_device.h +++ b/rootex/core/renderer/rendering_device.h @@ -47,6 +47,7 @@ class RenderingDevice Microsoft::WRL::ComPtr m_OffScreenTexture; Microsoft::WRL::ComPtr m_OffScreenRTV; + Microsoft::WRL::ComPtr m_ShadowTextureDSV; Microsoft::WRL::ComPtr m_OffScreenSRV; Microsoft::WRL::ComPtr m_DSState; @@ -156,6 +157,7 @@ class RenderingDevice void setOffScreenRTVDSV(); void setOffScreenRTVOnly(); + void setShadowTextureDSV(); void setMainRT(); void setRTV(Microsoft::WRL::ComPtr rtv); void setRTV(ID3D11RenderTargetView* rtv); diff --git a/rootex/core/renderer/shaders/basic_vertex_shader.hlsl b/rootex/core/renderer/shaders/basic_vertex_shader.hlsl index 8899c864e..431c732b9 100644 --- a/rootex/core/renderer/shaders/basic_vertex_shader.hlsl +++ b/rootex/core/renderer/shaders/basic_vertex_shader.hlsl @@ -40,7 +40,7 @@ struct PixelInputType PixelInputType main(VertexInputType input) { PixelInputType output; - output.screenPosition = mul(input.position, mul(M, mul(DLTC, P))); + output.screenPosition = mul(input.position, mul(M, mul(V, P))); output.normal = normalize(mul((float3)input.normal, (float3x3)MInverseTranspose)); output.worldPosition = mul(input.position, M); output.tex.x = input.tex.x; diff --git a/rootex/framework/systems/render_system.cpp b/rootex/framework/systems/render_system.cpp index 4d2271c5d..fe2ddf3cd 100644 --- a/rootex/framework/systems/render_system.cpp +++ b/rootex/framework/systems/render_system.cpp @@ -280,14 +280,15 @@ void RenderSystem::submitLine(const Vector3& from, const Vector3& to) m_CurrentFrameLines.m_Indices.push_back(m_CurrentFrameLines.m_Indices.size()); } -Matrix RenderSystem::setViewMatrixForShadowRender() +void RenderSystem::setViewMatrixForShadowRender() { if (!ECSFactory::GetAllDirectionalLightComponent().empty()) { DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); - return first.getTransformComponent()->getAbsoluteTransform(); + const Matrix& directionalLight = first.getTransformComponent()->getAbsoluteTransform(); + RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { first.getTransformComponent()->getAbsoluteTransform() }, m_PerFrameVSCB.Get()); + RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_DL_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); }; - return Matrix(); } void RenderSystem::submitBox(const Vector3& min, const Vector3& max) diff --git a/rootex/framework/systems/render_system.h b/rootex/framework/systems/render_system.h index b5302c9d0..51e3cbe03 100644 --- a/rootex/framework/systems/render_system.h +++ b/rootex/framework/systems/render_system.h @@ -65,8 +65,7 @@ class RenderSystem : public System void getDirectionalLightComponent(); Matrix m_ViewMatrixForShadowRender; - Matrix setViewMatrixForShadowRender(); - void refreshViewMatrixForShadowRender(); + void setViewMatrixForShadowRender(); void setCamera(CameraComponent* camera); void restoreCamera(); From b8ff8a9594e8288f94dfe2f3565574669bd17a50 Mon Sep 17 00:00:00 2001 From: unknown Date: Fri, 27 Jan 2023 21:18:47 +0530 Subject: [PATCH 8/8] modify setViewShadowRender function --- rootex/core/renderer/shaders/custom_vertex_shader.hlsl | 2 +- rootex/framework/systems/render_system.cpp | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/rootex/core/renderer/shaders/custom_vertex_shader.hlsl b/rootex/core/renderer/shaders/custom_vertex_shader.hlsl index 78f06cf63..dc66ef363 100644 --- a/rootex/core/renderer/shaders/custom_vertex_shader.hlsl +++ b/rootex/core/renderer/shaders/custom_vertex_shader.hlsl @@ -50,7 +50,7 @@ PixelInputType main(VertexInputType input) output.worldPosition = mul(input.position, M); output.tex.x = input.tex.x; output.tex.y = 1 - input.tex.y; - output.color = float4(1.0f, 1.0f, 1.0f, DLTC._41); + output.color = float4(1.0f, 1.0f, 1.0f, 1.0f); output.tangent = mul(input.tangent, (float3x3)M); diff --git a/rootex/framework/systems/render_system.cpp b/rootex/framework/systems/render_system.cpp index fe2ddf3cd..f7a45294f 100644 --- a/rootex/framework/systems/render_system.cpp +++ b/rootex/framework/systems/render_system.cpp @@ -286,7 +286,7 @@ void RenderSystem::setViewMatrixForShadowRender() { DirectionalLightComponent& first = ECSFactory::GetAllDirectionalLightComponent().front(); const Matrix& directionalLight = first.getTransformComponent()->getAbsoluteTransform(); - RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { first.getTransformComponent()->getAbsoluteTransform() }, m_PerFrameVSCB.Get()); + RenderingDevice::GetSingleton()->editBuffer(PerFrameVSCB { first.getTransformComponent()->getAbsoluteTransform().Transpose( }, m_PerFrameVSCB.Get()); RenderingDevice::GetSingleton()->setVSCB(PER_FRAME_DL_VS_CPP, 1, m_PerFrameVSCB.GetAddressOf()); }; }