From b0bacc28e0b0d04a2c20a2af3117253e0f29ab3f Mon Sep 17 00:00:00 2001 From: assiduous Date: Tue, 7 Jan 2025 19:28:51 -0800 Subject: [PATCH] TemporalAntiAliasing: added GetJitteredProjMatrix helper function --- Hydrogent/src/Tasks/HnBeginFrameTask.cpp | 12 ++++------- .../interface/TemporalAntiAliasing.hpp | 21 ++++++++++++++++++- 2 files changed, 24 insertions(+), 9 deletions(-) diff --git a/Hydrogent/src/Tasks/HnBeginFrameTask.cpp b/Hydrogent/src/Tasks/HnBeginFrameTask.cpp index 898c68ba..1b4b1ec7 100644 --- a/Hydrogent/src/Tasks/HnBeginFrameTask.cpp +++ b/Hydrogent/src/Tasks/HnBeginFrameTask.cpp @@ -1,5 +1,5 @@ /* - * Copyright 2023-2024 Diligent Graphics LLC + * Copyright 2023-2025 Diligent Graphics LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -40,6 +40,7 @@ #include "MapHelper.hpp" #include "ScopedDebugGroup.hpp" #include "GLTF_PBR_Renderer.hpp" +#include "TemporalAntiAliasing.hpp" namespace Diligent { @@ -493,10 +494,7 @@ void HnBeginFrameTask::UpdateFrameConstants(IDeviceContext* pCtx, PrevCamera = CamAttribs; if (m_pCamera != nullptr) { - float4x4 ProjMatrix = m_pCamera->GetProjectionMatrix(); - ProjMatrix[2][0] = Jitter.x; - ProjMatrix[2][1] = Jitter.y; - + const float4x4 ProjMatrix = TemporalAntiAliasing::GetJitteredProjMatrix(m_pCamera->GetProjectionMatrix(), Jitter); const float4x4& ViewMatrix = m_pCamera->GetViewMatrix(); const float4x4& WorldMatrix = m_pCamera->GetWorldMatrix(); const float4x4 ViewProj = ViewMatrix * ProjMatrix; @@ -554,9 +552,7 @@ void HnBeginFrameTask::UpdateFrameConstants(IDeviceContext* pCtx, } else { - float4x4 PrevProj = PrevCamera.mProj; - PrevProj[2][0] = Jitter.x; - PrevProj[2][1] = Jitter.y; + const float4x4 PrevProj = TemporalAntiAliasing::GetJitteredProjMatrix(PrevCamera.mProj, Jitter); if (PrevProj != CamAttribs.mProj) { CameraTransformDirty = true; diff --git a/PostProcess/TemporalAntiAliasing/interface/TemporalAntiAliasing.hpp b/PostProcess/TemporalAntiAliasing/interface/TemporalAntiAliasing.hpp index 6dcb328d..f2ee27ac 100644 --- a/PostProcess/TemporalAntiAliasing/interface/TemporalAntiAliasing.hpp +++ b/PostProcess/TemporalAntiAliasing/interface/TemporalAntiAliasing.hpp @@ -1,5 +1,5 @@ /* - * Copyright 2024 Diligent Graphics LLC + * Copyright 2024-2025 Diligent Graphics LLC * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. @@ -116,6 +116,25 @@ class TemporalAntiAliasing ITextureView* GetAccumulatedFrameSRV(bool IsPrevFrame = false, Uint32 AccumulationBufferIdx = 0) const; + static inline float4x4 GetJitteredProjMatrix(float4x4 Proj, const float2& Jitter) + { + if (Proj.m33 == 0.f) + { + // Perspective projection. + // Make jitter proportional to z so that it is constant in screen space. + Proj.m20 += Jitter.x; + Proj.m21 += Jitter.y; + } + else + { + // Orthographic projection. + // Apply offsets directly. + Proj.m30 += Jitter.x; + Proj.m31 += Jitter.y; + } + return Proj; + } + private: using RenderTechnique = PostFXRenderTechnique; using ResourceInternal = RefCntAutoPtr;