From dc6953dd93ec54142f3efbb89283242de98ef2da Mon Sep 17 00:00:00 2001 From: turanszkij Date: Fri, 31 Mar 2017 00:12:03 +0200 Subject: [PATCH] temporal AA enabled for transparent pass + deferred pipeline --- WickedEngine/DeferredRenderableComponent.cpp | 2 +- WickedEngine/Renderable3DComponent.cpp | 48 ++++++++++---------- WickedEngine/grassPS_deferred.hlsl | 1 + WickedEngine/objectHF.hlsli | 2 +- WickedEngine/qGrassPS_deferred.hlsl | 1 + WickedEngine/wiGraphicsDevice_DX11.cpp | 2 +- 6 files changed, 30 insertions(+), 26 deletions(-) diff --git a/WickedEngine/DeferredRenderableComponent.cpp b/WickedEngine/DeferredRenderableComponent.cpp index 4be6313a6..e6e04b462 100644 --- a/WickedEngine/DeferredRenderableComponent.cpp +++ b/WickedEngine/DeferredRenderableComponent.cpp @@ -31,7 +31,7 @@ void DeferredRenderableComponent::ResizeBuffers() rtGBuffer.Initialize( wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight() , true, FORMAT_R8G8B8A8_UNORM); - rtGBuffer.Add(FORMAT_R16G16_FLOAT); + rtGBuffer.Add(FORMAT_R16G16B16A16_FLOAT); rtGBuffer.Add(FORMAT_R8G8B8A8_UNORM); rtGBuffer.Add(FORMAT_R8G8B8A8_UNORM); diff --git a/WickedEngine/Renderable3DComponent.cpp b/WickedEngine/Renderable3DComponent.cpp index c55cf65c6..d030c5421 100644 --- a/WickedEngine/Renderable3DComponent.cpp +++ b/WickedEngine/Renderable3DComponent.cpp @@ -324,29 +324,6 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende } wiProfiler::GetInstance().BeginRange("Secondary Scene", wiProfiler::DOMAIN_GPU, threadID); - if (wiRenderer::GetTemporalAAEnabled()) - { - wiRenderer::GetDevice()->EventBegin("Temporal AA Resolve", threadID); - int current = wiRenderer::GetDevice()->GetFrameCount() % 2 == 0 ? 0 : 1; - int history = 1 - current; - rtTemporalAA[current].Activate(threadID); { - fx.process.setTemporalAAResolve(true); - fx.setMaskMap(rtTemporalAA[history].GetTexture()); - wiImage::Draw(shadedSceneRT.GetTextureResolvedMSAA(threadID), fx, threadID); - fx.process.clear(); - } - wiRenderer::GetDevice()->UnBindResources(TEXSLOT_GBUFFER0, 1, threadID); - wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, 1, threadID); - shadedSceneRT.Set(threadID, nullptr, false, 0); { - fx.presentFullScreen = true; - fx.blendFlag = BLENDMODE_OPAQUE; - fx.quality = QUALITY_NEAREST; - wiImage::Draw(rtTemporalAA[current].GetTexture(), fx, threadID); - fx.presentFullScreen = false; - } - wiRenderer::GetDevice()->EventEnd(); - } - if (getLightShaftsEnabled() && XMVectorGetX(XMVector3Dot(wiRenderer::GetSunPosition(), wiRenderer::getCamera()->GetAt())) > 0) { wiRenderer::GetDevice()->EventBegin("Light Shafts", threadID); @@ -443,6 +420,31 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende wiRenderer::GetDevice()->EventEnd(); } + if (wiRenderer::GetTemporalAAEnabled()) + { + wiRenderer::GetDevice()->EventBegin("Temporal AA Resolve", threadID); + int current = wiRenderer::GetDevice()->GetFrameCount() % 2 == 0 ? 0 : 1; + int history = 1 - current; + rtTemporalAA[current].Activate(threadID); { + wiRenderer::UpdateGBuffer(mainRT.GetTextureResolvedMSAA(threadID, 0), mainRT.GetTextureResolvedMSAA(threadID, 1), nullptr, nullptr, nullptr, threadID); + fx.presentFullScreen = false; + fx.process.setTemporalAAResolve(true); + fx.setMaskMap(rtTemporalAA[history].GetTexture()); + wiImage::Draw(shadedSceneRT.GetTextureResolvedMSAA(threadID), fx, threadID); + fx.process.clear(); + } + wiRenderer::GetDevice()->UnBindResources(TEXSLOT_GBUFFER0, 1, threadID); + wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, 1, threadID); + shadedSceneRT.Set(threadID, nullptr, false, 0); { + fx.presentFullScreen = true; + fx.blendFlag = BLENDMODE_OPAQUE; + fx.quality = QUALITY_NEAREST; + wiImage::Draw(rtTemporalAA[current].GetTexture(), fx, threadID); + fx.presentFullScreen = false; + } + wiRenderer::GetDevice()->EventEnd(); + } + wiProfiler::GetInstance().EndRange(); // Secondary Scene } void Renderable3DComponent::RenderTransparentScene(wiRenderTarget& refractionRT, GRAPHICSTHREAD threadID) diff --git a/WickedEngine/grassPS_deferred.hlsl b/WickedEngine/grassPS_deferred.hlsl index 5218b770e..df0565ca6 100644 --- a/WickedEngine/grassPS_deferred.hlsl +++ b/WickedEngine/grassPS_deferred.hlsl @@ -17,6 +17,7 @@ GBUFFEROutputType main(GS_OUT PSIn) float metalness = 0; float ao = 1; float sss = 0; + float2 velocity = 0; OBJECT_PS_OUT_GBUFFER } \ No newline at end of file diff --git a/WickedEngine/objectHF.hlsli b/WickedEngine/objectHF.hlsli index 063175a4b..749dc87f8 100644 --- a/WickedEngine/objectHF.hlsli +++ b/WickedEngine/objectHF.hlsli @@ -332,7 +332,7 @@ inline void TiledLighting(in float2 pixel, in float3 N, in float3 V, in float3 P #define OBJECT_PS_OUT_GBUFFER \ GBUFFEROutputType Out = (GBUFFEROutputType)0; \ Out.g0 = float4(color.rgb, 1); /*FORMAT_R8G8B8A8_UNORM*/ \ - Out.g1 = float4(encode(N), 0, 0); /*FORMAT_R16G16_FLOAT*/ \ + Out.g1 = float4(encode(N), velocity); /*FORMAT_R16G16B16_FLOAT*/ \ Out.g2 = float4(0, 0, sss, emissive); /*FORMAT_R8G8B8A8_UNORM*/ \ Out.g3 = float4(roughness, reflectance, metalness, ao); /*FORMAT_R8G8B8A8_UNORM*/ \ return Out; diff --git a/WickedEngine/qGrassPS_deferred.hlsl b/WickedEngine/qGrassPS_deferred.hlsl index 23001fef2..c4449f03b 100644 --- a/WickedEngine/qGrassPS_deferred.hlsl +++ b/WickedEngine/qGrassPS_deferred.hlsl @@ -18,6 +18,7 @@ GBUFFEROutputType main(QGS_OUT PSIn) float metalness = 0; float ao = 1; float sss = 0; + float2 velocity = 0; OBJECT_PS_OUT_GBUFFER } \ No newline at end of file diff --git a/WickedEngine/wiGraphicsDevice_DX11.cpp b/WickedEngine/wiGraphicsDevice_DX11.cpp index 636ae7ac7..96f6e98fd 100644 --- a/WickedEngine/wiGraphicsDevice_DX11.cpp +++ b/WickedEngine/wiGraphicsDevice_DX11.cpp @@ -1399,7 +1399,7 @@ GraphicsDevice_DX11::GraphicsDevice_DX11(wiWindowRegistration::window_type windo } UINT createDeviceFlags = 0; - createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; + //createDeviceFlags |= D3D11_CREATE_DEVICE_DEBUG; D3D_DRIVER_TYPE driverTypes[] = {