From ca42accc5a4edca56632862c3d19f3929e501017 Mon Sep 17 00:00:00 2001 From: turanszkij Date: Wed, 29 Mar 2017 10:20:41 +0200 Subject: [PATCH] temporal AA accounts for motion vector --- WickedEngine/ForwardRenderableComponent.cpp | 1 + WickedEngine/Renderable3DComponent.cpp | 2 ++ .../TiledForwardRenderableComponent.cpp | 5 +++-- WickedEngine/captureImpostorPS.hlsl | 2 +- WickedEngine/envMapPS.hlsl | 2 +- WickedEngine/globals.hlsli | 4 +++- WickedEngine/grassPS_forward_dirlight.hlsl | 3 ++- WickedEngine/grassPS_tiledforward.hlsl | 3 ++- WickedEngine/objectHF.hlsli | 12 ++++++++++++ WickedEngine/objectPS_forward_dirlight.hlsl | 2 +- .../objectPS_forward_dirlight_normalmap.hlsl | 2 +- ...ard_dirlight_normalmap_planarreflection.hlsl | 2 +- ...objectPS_forward_dirlight_normalmap_pom.hlsl | 2 +- ...ectPS_forward_dirlight_planarreflection.hlsl | 2 +- WickedEngine/objectPS_forward_dirlight_pom.hlsl | 2 +- .../objectPS_forward_dirlight_transparent.hlsl | 2 +- ..._forward_dirlight_transparent_normalmap.hlsl | 2 +- ..._transparent_normalmap_planarreflection.hlsl | 2 +- ...ward_dirlight_transparent_normalmap_pom.hlsl | 2 +- ...d_dirlight_transparent_planarreflection.hlsl | 2 +- ...jectPS_forward_dirlight_transparent_pom.hlsl | 2 +- .../objectPS_forward_dirlight_water.hlsl | 2 +- WickedEngine/objectPS_textureonly.hlsl | 2 +- WickedEngine/objectPS_tiledforward.hlsl | 2 +- .../objectPS_tiledforward_normalmap.hlsl | 2 +- ...tiledforward_normalmap_planarreflection.hlsl | 2 +- .../objectPS_tiledforward_normalmap_pom.hlsl | 2 +- .../objectPS_tiledforward_planarreflection.hlsl | 2 +- WickedEngine/objectPS_tiledforward_pom.hlsl | 2 +- .../objectPS_tiledforward_transparent.hlsl | 2 +- ...ctPS_tiledforward_transparent_normalmap.hlsl | 2 +- ..._transparent_normalmap_planarreflection.hlsl | 2 +- ..._tiledforward_transparent_normalmap_pom.hlsl | 2 +- ...ledforward_transparent_planarreflection.hlsl | 2 +- .../objectPS_tiledforward_transparent_pom.hlsl | 2 +- WickedEngine/objectPS_tiledforward_water.hlsl | 2 +- WickedEngine/objectVS10.hlsl | 2 +- WickedEngine/qGrassPS_forward_dirlight.hlsl | 3 ++- WickedEngine/qGrassPS_tiledforward.hlsl | 3 ++- WickedEngine/temporalAAResolvePS.hlsl | 5 ++++- WickedEngine/wiRenderer.cpp | 17 ++++++++++++++--- WickedEngine/wiRenderer.h | 5 ++++- 42 files changed, 81 insertions(+), 42 deletions(-) diff --git a/WickedEngine/ForwardRenderableComponent.cpp b/WickedEngine/ForwardRenderableComponent.cpp index bd863b0df..01f972e83 100644 --- a/WickedEngine/ForwardRenderableComponent.cpp +++ b/WickedEngine/ForwardRenderableComponent.cpp @@ -26,6 +26,7 @@ void ForwardRenderableComponent::ResizeBuffers() Renderable3DComponent::ResizeBuffers(); rtMain.Initialize(wiRenderer::GetDevice()->GetScreenWidth(), wiRenderer::GetDevice()->GetScreenHeight(), true, FORMAT_R16G16B16A16_FLOAT, 1, getMSAASampleCount(), false); + rtMain.Add(FORMAT_R16G16B16A16_FLOAT); // thin gbuffer } void ForwardRenderableComponent::Initialize() diff --git a/WickedEngine/Renderable3DComponent.cpp b/WickedEngine/Renderable3DComponent.cpp index 2b82cb85e..988518eb6 100644 --- a/WickedEngine/Renderable3DComponent.cpp +++ b/WickedEngine/Renderable3DComponent.cpp @@ -334,6 +334,8 @@ void Renderable3DComponent::RenderSecondaryScene(wiRenderTarget& mainRT, wiRende wiImage::Draw(shadedSceneRT.GetTextureResolvedMSAA(threadID), fx, threadID); fx.process.clear(); } + wiRenderer::GetDevice()->UnBindResources(TEXSLOT_GBUFFER0, 2, threadID); + wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, 1, threadID); shadedSceneRT.Set(threadID, nullptr); { fx.presentFullScreen = true; fx.blendFlag = BLENDMODE_OPAQUE; diff --git a/WickedEngine/TiledForwardRenderableComponent.cpp b/WickedEngine/TiledForwardRenderableComponent.cpp index 05d570f93..a91b7e316 100644 --- a/WickedEngine/TiledForwardRenderableComponent.cpp +++ b/WickedEngine/TiledForwardRenderableComponent.cpp @@ -20,7 +20,6 @@ TiledForwardRenderableComponent::~TiledForwardRenderableComponent() void TiledForwardRenderableComponent::RenderScene(GRAPHICSTHREAD threadID) { - wiProfiler::GetInstance().BeginRange("Opaque Scene", wiProfiler::DOMAIN_GPU, threadID); wiRenderer::UpdateCameraCB(wiRenderer::getCamera(), threadID); @@ -53,12 +52,14 @@ void TiledForwardRenderableComponent::RenderScene(GRAPHICSTHREAD threadID) wiRenderer::GetDevice()->UnBindResources(TEXSLOT_ONDEMAND0, 1, threadID); + wiProfiler::GetInstance().BeginRange("Opaque Scene", wiProfiler::DOMAIN_GPU, threadID); rtMain.Set(threadID); { wiRenderer::DrawWorld(wiRenderer::getCamera(), getTessellationEnabled(), threadID, SHADERTYPE_TILEDFORWARD, rtReflection.GetTexture(), true, true); wiRenderer::DrawSky(threadID); } - + rtMain.Deactivate(threadID); + wiRenderer::UpdateGBuffer(rtMain.GetTexture(0), rtMain.GetTexture(1), nullptr, nullptr, nullptr, threadID); wiProfiler::GetInstance().EndRange(); // Opaque Scene } void TiledForwardRenderableComponent::RenderTransparentScene(wiRenderTarget& refractionRT, GRAPHICSTHREAD threadID) diff --git a/WickedEngine/captureImpostorPS.hlsl b/WickedEngine/captureImpostorPS.hlsl index bfb4e78e4..dd7353c5d 100644 --- a/WickedEngine/captureImpostorPS.hlsl +++ b/WickedEngine/captureImpostorPS.hlsl @@ -11,7 +11,7 @@ struct ImpostorOut ImpostorOut main(PixelInputType input) { - OBJECT_PS_MAKE + OBJECT_PS_MAKE_COMMON OBJECT_PS_SAMPLETEXTURES diff --git a/WickedEngine/envMapPS.hlsl b/WickedEngine/envMapPS.hlsl index 33fdbedf2..e2658f0e0 100644 --- a/WickedEngine/envMapPS.hlsl +++ b/WickedEngine/envMapPS.hlsl @@ -26,5 +26,5 @@ float4 main(PSIn input) : SV_TARGET OBJECT_PS_GAMMA - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } \ No newline at end of file diff --git a/WickedEngine/globals.hlsli b/WickedEngine/globals.hlsli index 3af15f869..5301f9db0 100644 --- a/WickedEngine/globals.hlsli +++ b/WickedEngine/globals.hlsli @@ -69,11 +69,13 @@ CBUFFER(FrameCB, CBSLOT_RENDERER_FRAME) float g_xFrame_WindRandomness; uint g_xFrame_FrameCount; int g_xFrame_SunLightArrayIndex; + float2 g_xFrame_TemporalAAJitter; + float2 g_xFrame_TemporalAAJitterPrev; // The following are per frame properties for the main camera: float4x4 g_xFrame_MainCamera_VP; // View*Projection float4x4 g_xFrame_MainCamera_View; float4x4 g_xFrame_MainCamera_Proj; - float3 g_xFrame_MainCamera_CamPos; float xPadding2_FrameCB; + float3 g_xFrame_MainCamera_CamPos; float xPadding3_FrameCB; float4x4 g_xFrame_MainCamera_PrevV; float4x4 g_xFrame_MainCamera_PrevP; float4x4 g_xFrame_MainCamera_PrevVP; // PrevView*PrevProjection diff --git a/WickedEngine/grassPS_forward_dirlight.hlsl b/WickedEngine/grassPS_forward_dirlight.hlsl index e3c2b6112..2a0eef492 100644 --- a/WickedEngine/grassPS_forward_dirlight.hlsl +++ b/WickedEngine/grassPS_forward_dirlight.hlsl @@ -2,7 +2,7 @@ #include "grassHF_PS.hlsli" #include "ditherHF.hlsli" -float4 main(GS_OUT PSIn) : SV_Target +GBUFFEROutputType_Thin main(GS_OUT PSIn) { #ifdef GRASS_FADE_DITHER clip(dither(PSIn.pos.xy) - PSIn.fade); @@ -24,6 +24,7 @@ float4 main(GS_OUT PSIn) : SV_Target float2 pixel = PSIn.pos.xy; float3 diffuse = 0; float3 specular = 0; + float2 velocity = 0; OBJECT_PS_LIGHT_BEGIN diff --git a/WickedEngine/grassPS_tiledforward.hlsl b/WickedEngine/grassPS_tiledforward.hlsl index 201cdd758..c2411d62e 100644 --- a/WickedEngine/grassPS_tiledforward.hlsl +++ b/WickedEngine/grassPS_tiledforward.hlsl @@ -4,7 +4,7 @@ #include "ditherHF.hlsli" [earlydepthstencil] -float4 main(GS_OUT PSIn) : SV_Target +GBUFFEROutputType_Thin main(GS_OUT PSIn) { float4 baseColor = float4(PSIn.col,1); float opacity = baseColor.a; @@ -22,6 +22,7 @@ float4 main(GS_OUT PSIn) : SV_Target float2 pixel = PSIn.pos.xy; float3 diffuse = 0; float3 specular = 0; + float2 velocity = 0; OBJECT_PS_LIGHT_BEGIN diff --git a/WickedEngine/objectHF.hlsli b/WickedEngine/objectHF.hlsli index 80e5c4982..aae239ddc 100644 --- a/WickedEngine/objectHF.hlsli +++ b/WickedEngine/objectHF.hlsli @@ -60,6 +60,11 @@ struct GBUFFEROutputType float4 g2 : SV_TARGET2; // texture_gbuffer2 float4 g3 : SV_TARGET3; // texture_gbuffer3 }; +struct GBUFFEROutputType_Thin +{ + float4 g0 : SV_TARGET0; // texture_gbuffer0 + float4 g1 : SV_TARGET1; // texture_gbuffer1 +}; // METHODS @@ -258,6 +263,7 @@ inline void TiledLighting(in float2 pixel, in float3 N, in float3 V, in float3 P float lineardepth = input.pos2D.z; \ float2 refUV = float2(1, -1)*input.ReflectionMapSamplingPos.xy / input.ReflectionMapSamplingPos.w / 2.0f + 0.5f;\ float2 ScreenCoord = float2(1, -1) * input.pos2D.xy / input.pos2D.w / 2.0f + 0.5f; \ + float2 velocity = ((input.pos2DPrev.xy/input.pos2DPrev.w - g_xFrame_TemporalAAJitterPrev) - (input.pos2D.xy/input.pos2D.w - g_xFrame_TemporalAAJitter)) * float2(0.5f, -0.5f); #define OBJECT_PS_COMPUTETANGENTSPACE \ float3 T, B; \ @@ -332,6 +338,12 @@ inline void TiledLighting(in float2 pixel, in float3 N, in float3 V, in float3 P return Out; #define OBJECT_PS_OUT_FORWARD \ + GBUFFEROutputType_Thin Out = (GBUFFEROutputType_Thin)0; \ + Out.g0 = color; /*FORMAT_R16G16B16_FLOAT*/ \ + Out.g1 = float4(encode(N), velocity); /*FORMAT_R16G16B16_FLOAT*/ \ + return Out; + +#define OBJECT_PS_OUT_FORWARD_SIMPLE \ return color; #endif // _OBJECTSHADER_HF_ \ No newline at end of file diff --git a/WickedEngine/objectPS_forward_dirlight.hlsl b/WickedEngine/objectPS_forward_dirlight.hlsl index f92dd74d2..839928e4c 100644 --- a/WickedEngine/objectPS_forward_dirlight.hlsl +++ b/WickedEngine/objectPS_forward_dirlight.hlsl @@ -1,7 +1,7 @@ #include "objectHF.hlsli" -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_DITHER diff --git a/WickedEngine/objectPS_forward_dirlight_normalmap.hlsl b/WickedEngine/objectPS_forward_dirlight_normalmap.hlsl index 8fbcbd332..026ef0cc6 100644 --- a/WickedEngine/objectPS_forward_dirlight_normalmap.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_normalmap.hlsl @@ -1,6 +1,6 @@ #include "objectHF.hlsli" -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_DITHER diff --git a/WickedEngine/objectPS_forward_dirlight_normalmap_planarreflection.hlsl b/WickedEngine/objectPS_forward_dirlight_normalmap_planarreflection.hlsl index 212b236ed..0143e6598 100644 --- a/WickedEngine/objectPS_forward_dirlight_normalmap_planarreflection.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_normalmap_planarreflection.hlsl @@ -1,7 +1,7 @@ #include "objectHF.hlsli" -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_DITHER diff --git a/WickedEngine/objectPS_forward_dirlight_normalmap_pom.hlsl b/WickedEngine/objectPS_forward_dirlight_normalmap_pom.hlsl index 2a08d7696..356a52b0b 100644 --- a/WickedEngine/objectPS_forward_dirlight_normalmap_pom.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_normalmap_pom.hlsl @@ -1,7 +1,7 @@ #include "objectHF.hlsli" -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_DITHER diff --git a/WickedEngine/objectPS_forward_dirlight_planarreflection.hlsl b/WickedEngine/objectPS_forward_dirlight_planarreflection.hlsl index d10728f3c..4f90938bc 100644 --- a/WickedEngine/objectPS_forward_dirlight_planarreflection.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_planarreflection.hlsl @@ -1,6 +1,6 @@ #include "objectHF.hlsli" -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_DITHER diff --git a/WickedEngine/objectPS_forward_dirlight_pom.hlsl b/WickedEngine/objectPS_forward_dirlight_pom.hlsl index dc51dffdd..eff796dcf 100644 --- a/WickedEngine/objectPS_forward_dirlight_pom.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_pom.hlsl @@ -1,7 +1,7 @@ #include "objectHF.hlsli" -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_DITHER diff --git a/WickedEngine/objectPS_forward_dirlight_transparent.hlsl b/WickedEngine/objectPS_forward_dirlight_transparent.hlsl index 1c2e10e74..317db922a 100644 --- a/WickedEngine/objectPS_forward_dirlight_transparent.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_transparent.hlsl @@ -26,5 +26,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_forward_dirlight_transparent_normalmap.hlsl b/WickedEngine/objectPS_forward_dirlight_transparent_normalmap.hlsl index 7f287cd19..b0f5311ff 100644 --- a/WickedEngine/objectPS_forward_dirlight_transparent_normalmap.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_transparent_normalmap.hlsl @@ -30,5 +30,5 @@ float4 main( PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } \ No newline at end of file diff --git a/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_planarreflection.hlsl b/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_planarreflection.hlsl index 61999bb19..f1c7f8e22 100644 --- a/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_planarreflection.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_planarreflection.hlsl @@ -30,5 +30,5 @@ float4 main( PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } \ No newline at end of file diff --git a/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_pom.hlsl b/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_pom.hlsl index 90f0def27..bc94cb25b 100644 --- a/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_pom.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_transparent_normalmap_pom.hlsl @@ -32,5 +32,5 @@ float4 main( PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } \ No newline at end of file diff --git a/WickedEngine/objectPS_forward_dirlight_transparent_planarreflection.hlsl b/WickedEngine/objectPS_forward_dirlight_transparent_planarreflection.hlsl index b7c7e7509..d9c94cec6 100644 --- a/WickedEngine/objectPS_forward_dirlight_transparent_planarreflection.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_transparent_planarreflection.hlsl @@ -26,5 +26,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } \ No newline at end of file diff --git a/WickedEngine/objectPS_forward_dirlight_transparent_pom.hlsl b/WickedEngine/objectPS_forward_dirlight_transparent_pom.hlsl index ef6d1360a..0977c26fd 100644 --- a/WickedEngine/objectPS_forward_dirlight_transparent_pom.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_transparent_pom.hlsl @@ -30,5 +30,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } \ No newline at end of file diff --git a/WickedEngine/objectPS_forward_dirlight_water.hlsl b/WickedEngine/objectPS_forward_dirlight_water.hlsl index 362c30b68..64be0620a 100644 --- a/WickedEngine/objectPS_forward_dirlight_water.hlsl +++ b/WickedEngine/objectPS_forward_dirlight_water.hlsl @@ -60,5 +60,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } \ No newline at end of file diff --git a/WickedEngine/objectPS_textureonly.hlsl b/WickedEngine/objectPS_textureonly.hlsl index cb367f810..f844e3c4c 100644 --- a/WickedEngine/objectPS_textureonly.hlsl +++ b/WickedEngine/objectPS_textureonly.hlsl @@ -14,6 +14,6 @@ float4 main(PixelInputType_Simple input) : SV_TARGET OBJECT_PS_EMISSIVE - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_tiledforward.hlsl b/WickedEngine/objectPS_tiledforward.hlsl index fc70a0f63..5e76508c1 100644 --- a/WickedEngine/objectPS_tiledforward.hlsl +++ b/WickedEngine/objectPS_tiledforward.hlsl @@ -3,7 +3,7 @@ #include "objectHF.hlsli" [earlydepthstencil] -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_MAKE diff --git a/WickedEngine/objectPS_tiledforward_normalmap.hlsl b/WickedEngine/objectPS_tiledforward_normalmap.hlsl index 9612dcd50..9fba9a4bb 100644 --- a/WickedEngine/objectPS_tiledforward_normalmap.hlsl +++ b/WickedEngine/objectPS_tiledforward_normalmap.hlsl @@ -3,7 +3,7 @@ #include "objectHF.hlsli" [earlydepthstencil] -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_MAKE diff --git a/WickedEngine/objectPS_tiledforward_normalmap_planarreflection.hlsl b/WickedEngine/objectPS_tiledforward_normalmap_planarreflection.hlsl index b153341ae..83b30f40b 100644 --- a/WickedEngine/objectPS_tiledforward_normalmap_planarreflection.hlsl +++ b/WickedEngine/objectPS_tiledforward_normalmap_planarreflection.hlsl @@ -3,7 +3,7 @@ #include "objectHF.hlsli" [earlydepthstencil] -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_MAKE diff --git a/WickedEngine/objectPS_tiledforward_normalmap_pom.hlsl b/WickedEngine/objectPS_tiledforward_normalmap_pom.hlsl index f5cb60f2e..7795021e0 100644 --- a/WickedEngine/objectPS_tiledforward_normalmap_pom.hlsl +++ b/WickedEngine/objectPS_tiledforward_normalmap_pom.hlsl @@ -3,7 +3,7 @@ #include "objectHF.hlsli" [earlydepthstencil] -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_MAKE diff --git a/WickedEngine/objectPS_tiledforward_planarreflection.hlsl b/WickedEngine/objectPS_tiledforward_planarreflection.hlsl index 3da7858e8..b8e0dfd91 100644 --- a/WickedEngine/objectPS_tiledforward_planarreflection.hlsl +++ b/WickedEngine/objectPS_tiledforward_planarreflection.hlsl @@ -3,7 +3,7 @@ #include "objectHF.hlsli" [earlydepthstencil] -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_MAKE diff --git a/WickedEngine/objectPS_tiledforward_pom.hlsl b/WickedEngine/objectPS_tiledforward_pom.hlsl index d6614b0dc..10691d5e5 100644 --- a/WickedEngine/objectPS_tiledforward_pom.hlsl +++ b/WickedEngine/objectPS_tiledforward_pom.hlsl @@ -3,7 +3,7 @@ #include "objectHF.hlsli" [earlydepthstencil] -float4 main(PixelInputType input) : SV_TARGET +GBUFFEROutputType_Thin main(PixelInputType input) { OBJECT_PS_MAKE diff --git a/WickedEngine/objectPS_tiledforward_transparent.hlsl b/WickedEngine/objectPS_tiledforward_transparent.hlsl index 7b858ec76..4e574be2b 100644 --- a/WickedEngine/objectPS_tiledforward_transparent.hlsl +++ b/WickedEngine/objectPS_tiledforward_transparent.hlsl @@ -27,5 +27,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_tiledforward_transparent_normalmap.hlsl b/WickedEngine/objectPS_tiledforward_transparent_normalmap.hlsl index ba637d36e..8fc3c2f6d 100644 --- a/WickedEngine/objectPS_tiledforward_transparent_normalmap.hlsl +++ b/WickedEngine/objectPS_tiledforward_transparent_normalmap.hlsl @@ -31,5 +31,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_tiledforward_transparent_normalmap_planarreflection.hlsl b/WickedEngine/objectPS_tiledforward_transparent_normalmap_planarreflection.hlsl index 26cacee8f..764e7d46d 100644 --- a/WickedEngine/objectPS_tiledforward_transparent_normalmap_planarreflection.hlsl +++ b/WickedEngine/objectPS_tiledforward_transparent_normalmap_planarreflection.hlsl @@ -31,5 +31,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_tiledforward_transparent_normalmap_pom.hlsl b/WickedEngine/objectPS_tiledforward_transparent_normalmap_pom.hlsl index 3fe52af7e..2eccd3b74 100644 --- a/WickedEngine/objectPS_tiledforward_transparent_normalmap_pom.hlsl +++ b/WickedEngine/objectPS_tiledforward_transparent_normalmap_pom.hlsl @@ -33,5 +33,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_tiledforward_transparent_planarreflection.hlsl b/WickedEngine/objectPS_tiledforward_transparent_planarreflection.hlsl index 481183231..c1329887d 100644 --- a/WickedEngine/objectPS_tiledforward_transparent_planarreflection.hlsl +++ b/WickedEngine/objectPS_tiledforward_transparent_planarreflection.hlsl @@ -27,5 +27,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_tiledforward_transparent_pom.hlsl b/WickedEngine/objectPS_tiledforward_transparent_pom.hlsl index 90abb2635..11d997e27 100644 --- a/WickedEngine/objectPS_tiledforward_transparent_pom.hlsl +++ b/WickedEngine/objectPS_tiledforward_transparent_pom.hlsl @@ -31,5 +31,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectPS_tiledforward_water.hlsl b/WickedEngine/objectPS_tiledforward_water.hlsl index 43b45ad97..d256036d2 100644 --- a/WickedEngine/objectPS_tiledforward_water.hlsl +++ b/WickedEngine/objectPS_tiledforward_water.hlsl @@ -62,5 +62,5 @@ float4 main(PixelInputType input) : SV_TARGET OBJECT_PS_FOG - OBJECT_PS_OUT_FORWARD + OBJECT_PS_OUT_FORWARD_SIMPLE } diff --git a/WickedEngine/objectVS10.hlsl b/WickedEngine/objectVS10.hlsl index be3e614e2..6789f8721 100644 --- a/WickedEngine/objectVS10.hlsl +++ b/WickedEngine/objectVS10.hlsl @@ -41,7 +41,7 @@ PixelInputType main(Input input) //} Out.pos = Out.pos2D = mul( pos, g_xCamera_VP ); - Out.pos2DPrev = mul(posPrev, g_xCamera_VP); + Out.pos2DPrev = mul(posPrev, g_xFrame_MainCamera_PrevVP); Out.pos3D = pos.xyz; Out.tex = input.tex.xy; Out.nor = normalize(normal); diff --git a/WickedEngine/qGrassPS_forward_dirlight.hlsl b/WickedEngine/qGrassPS_forward_dirlight.hlsl index 176b66d19..0256fb36d 100644 --- a/WickedEngine/qGrassPS_forward_dirlight.hlsl +++ b/WickedEngine/qGrassPS_forward_dirlight.hlsl @@ -2,7 +2,7 @@ #include "grassHF_PS.hlsli" #include "ditherHF.hlsli" -float4 main(QGS_OUT PSIn) : SV_Target +GBUFFEROutputType_Thin main(QGS_OUT PSIn) { #ifdef GRASS_FADE_DITHER clip(dither(PSIn.pos.xy) - PSIn.fade); @@ -29,6 +29,7 @@ float4 main(QGS_OUT PSIn) : SV_Target float depth = PSIn.pos.z; float3 diffuse = 0; float3 specular = 0; + float2 velocity = 0; OBJECT_PS_LIGHT_BEGIN diff --git a/WickedEngine/qGrassPS_tiledforward.hlsl b/WickedEngine/qGrassPS_tiledforward.hlsl index 7d64a4c3c..4f652665a 100644 --- a/WickedEngine/qGrassPS_tiledforward.hlsl +++ b/WickedEngine/qGrassPS_tiledforward.hlsl @@ -4,7 +4,7 @@ #include "ditherHF.hlsli" [earlydepthstencil] -float4 main(QGS_OUT PSIn) : SV_Target +GBUFFEROutputType_Thin main(QGS_OUT PSIn) { float4 baseColor = texture_0.Sample(sampler_linear_clamp,PSIn.tex); baseColor.a *= 1.0 - PSIn.fade; @@ -27,6 +27,7 @@ float4 main(QGS_OUT PSIn) : SV_Target float depth = PSIn.pos.z; float3 diffuse = 0; float3 specular = 0; + float2 velocity = 0; OBJECT_PS_LIGHT_BEGIN diff --git a/WickedEngine/temporalAAResolvePS.hlsl b/WickedEngine/temporalAAResolvePS.hlsl index 7646713ff..d3110879f 100644 --- a/WickedEngine/temporalAAResolvePS.hlsl +++ b/WickedEngine/temporalAAResolvePS.hlsl @@ -2,6 +2,8 @@ float4 main(VertexToPixelPostProcess PSIn) : SV_TARGET { + float2 velocity = texture_gbuffer1.Load(uint3(PSIn.pos.xy,0)).zw; + //float4 neighborhood[9]; //neighborhood[0] = xMaskTex.Load(uint3(PSIn.pos.xy + uint2(-1, -1), 0)); //neighborhood[1] = xMaskTex.Load(uint3(PSIn.pos.xy + uint2(0, -1), 0)); @@ -22,7 +24,8 @@ float4 main(VertexToPixelPostProcess PSIn) : SV_TARGET //} //float4 history = clamp(neighborhood[4], neighborhoodMin, neighborhoodMax); - float4 history = xMaskTex.Load(uint3(PSIn.pos.xy, 0)); + //float4 history = xMaskTex.Load(uint3(PSIn.pos.xy, 0)); + float4 history = xMaskTex.SampleLevel(sampler_linear_clamp, PSIn.tex + velocity, 0); float4 current = xTexture.Load(uint3(PSIn.pos.xy,0)); diff --git a/WickedEngine/wiRenderer.cpp b/WickedEngine/wiRenderer.cpp index 6ccf1e49b..b3eb568d9 100644 --- a/WickedEngine/wiRenderer.cpp +++ b/WickedEngine/wiRenderer.cpp @@ -53,6 +53,7 @@ bool wiRenderer::wireRender = false, wiRenderer::debugSpheres = false, wiRendere , wiRenderer::debugEnvProbes = false, wiRenderer::gridHelper = false, wiRenderer::voxelHelper = false, wiRenderer::requestReflectionRendering = false, wiRenderer::advancedLightCulling = true; float wiRenderer::SPECULARAA = 0.0f; float wiRenderer::renderTime = 0, wiRenderer::renderTime_Prev = 0, wiRenderer::deltaTime = 0; +XMFLOAT2 wiRenderer::temporalAAJitter = XMFLOAT2(0, 0), wiRenderer::temporalAAJitterPrev = XMFLOAT2(0, 0); Texture2D* wiRenderer::enviroMap,*wiRenderer::colorGrading; float wiRenderer::GameSpeed=1,wiRenderer::overrideGameSpeed=1; @@ -1705,10 +1706,18 @@ void wiRenderer::UpdatePerFrameData(float dt) { const XMFLOAT4& halton = wiMath::GetHaltonSequence(GetDevice()->GetFrameCount() % 64); static float jitter = 1.0f; - cam->Projection.m[2][0] = jitter * (halton.x * 2 - 1) / (float)GetDevice()->GetScreenWidth(); - cam->Projection.m[2][1] = jitter * (halton.y * 2 - 1) / (float)GetDevice()->GetScreenHeight(); + temporalAAJitterPrev = temporalAAJitter; + temporalAAJitter.x = jitter * (halton.x * 2 - 1) / (float)GetDevice()->GetScreenWidth(); + temporalAAJitter.y = jitter * (halton.y * 2 - 1) / (float)GetDevice()->GetScreenHeight(); + cam->Projection.m[2][0] = temporalAAJitter.x; + cam->Projection.m[2][1] = temporalAAJitter.y; cam->BakeMatrices(); } + else + { + temporalAAJitter = XMFLOAT2(0, 0); + temporalAAJitterPrev = XMFLOAT2(0, 0); + } refCam->Reflect(cam, waterPlane.getXMFLOAT4()); @@ -3776,7 +3785,7 @@ void wiRenderer::RenderMeshes(const XMFLOAT3& eye, const CulledCollection& culle (mesh->streamoutBuffers[VPROP_POS].IsValid() ? &mesh->streamoutBuffers[VPROP_POS] : &mesh->vertexBuffers[VPROP_POS]), (mesh->streamoutBuffers[VPROP_NOR].IsValid() ? &mesh->streamoutBuffers[VPROP_NOR] : &mesh->vertexBuffers[VPROP_NOR]), &mesh->vertexBuffers[VPROP_TEX], - (mesh->streamoutBuffers[VPROP_PRE].IsValid() ? &mesh->streamoutBuffers[VPROP_PRE] : &mesh->vertexBuffers[VPROP_POS]), + (mesh->streamoutBuffers[VPROP_PRE].IsValid() ? &mesh->streamoutBuffers[VPROP_PRE] : &mesh->vertexBuffers[VPROP_PRE]), &mesh->instanceBuffer }; UINT strides[] = { @@ -4764,6 +4773,8 @@ void wiRenderer::UpdateFrameCB(GRAPHICSTHREAD threadID) cb.mWindDirection = wind.direction; cb.mFrameCount = (UINT)GetDevice()->GetFrameCount(); cb.mSunLightArrayIndex = GetSunArrayIndex(); + cb.mTemporalAAJitter = temporalAAJitter; + cb.mTemporalAAJitterPrev = temporalAAJitterPrev; auto camera = getCamera(); auto prevCam = prevFrameCam; diff --git a/WickedEngine/wiRenderer.h b/WickedEngine/wiRenderer.h index 32d66b015..734ffc785 100644 --- a/WickedEngine/wiRenderer.h +++ b/WickedEngine/wiRenderer.h @@ -81,6 +81,7 @@ public: static bool HAIRPARTICLEENABLED, EMITTERSENABLED; static float SPECULARAA; static float renderTime, renderTime_Prev, deltaTime; + static XMFLOAT2 temporalAAJitter, temporalAAJitterPrev; static void SetShadowProps2D(int resolution, int count, int softShadowQuality); static void SetShadowPropsCube(int resolution, int count); @@ -116,10 +117,12 @@ public: float mWindRandomness; UINT mFrameCount; int mSunLightArrayIndex; + XMFLOAT2 mTemporalAAJitter; + XMFLOAT2 mTemporalAAJitterPrev; XMMATRIX mVP; XMMATRIX mView; XMMATRIX mProj; - XMFLOAT3 mCamPos; float pad2; + XMFLOAT3 mCamPos; float pad3; XMMATRIX mPrevV; XMMATRIX mPrevP; XMMATRIX mPrevVP;