From 7326cf65d8445daee79f5642c9c6d40965549b85 Mon Sep 17 00:00:00 2001 From: Andrei Gagua Date: Wed, 3 Jun 2026 18:49:42 +0300 Subject: [PATCH] Fix: Editor - use non-jittered projection for post-TAA overlay grid Add a managed `RenderView.GetOverlayProjection()` helper that returns the non-jittered projection once TAA has been resolved, and use it for editor overlay rendering paths. --- Source/Editor/Gizmo/GridGizmo.cs | 3 ++- Source/Engine/Graphics/RenderView.cs | 8 ++++++++ Source/Engine/UI/UICanvas.cs | 2 +- 3 files changed, 11 insertions(+), 2 deletions(-) diff --git a/Source/Editor/Gizmo/GridGizmo.cs b/Source/Editor/Gizmo/GridGizmo.cs index 71f20f8c2..37cbd20ab 100644 --- a/Source/Editor/Gizmo/GridGizmo.cs +++ b/Source/Editor/Gizmo/GridGizmo.cs @@ -113,7 +113,8 @@ namespace FlaxEditor.Gizmo if (cb != IntPtr.Zero) { var data = new Data(); - Matrix.Multiply(ref renderContext.View.View, ref renderContext.View.Projection, out var viewProjection); + var projection = renderContext.View.GetOverlayProjection(); + Matrix.Multiply(ref renderContext.View.View, ref projection, out var viewProjection); Matrix.Transpose(ref viewProjection, out data.ViewProjectionMatrix); data.ViewPos = renderContext.View.WorldPosition; data.GridColor = options.Viewport.ViewportGridColor; diff --git a/Source/Engine/Graphics/RenderView.cs b/Source/Engine/Graphics/RenderView.cs index b71b2d19b..66e3546ff 100644 --- a/Source/Engine/Graphics/RenderView.cs +++ b/Source/Engine/Graphics/RenderView.cs @@ -33,6 +33,14 @@ namespace FlaxEngine NonJitteredProjection = Projection; } + /// + /// Gets projection matrix for overlay geometry rendered after temporal anti-aliasing has been resolved. + /// + public Matrix GetOverlayProjection() + { + return IsTaaResolved ? NonJitteredProjection : Projection; + } + /// /// Initializes render view data. /// diff --git a/Source/Engine/UI/UICanvas.cs b/Source/Engine/UI/UICanvas.cs index 225213dba..a4cf2fd78 100644 --- a/Source/Engine/UI/UICanvas.cs +++ b/Source/Engine/UI/UICanvas.cs @@ -90,7 +90,7 @@ namespace FlaxEngine Matrix.Multiply(ref worldMatrix, ref renderContext.View.View, out Matrix viewMatrix); Matrix projectionMatrix = renderContext.View.Projection; if (worldSpace && (Canvas.RenderLocation == PostProcessEffectLocation.Default || Canvas.RenderLocation == PostProcessEffectLocation.AfterAntiAliasingPass)) - projectionMatrix = renderContext.View.NonJitteredProjection; // Fix TAA jittering when rendering UI in world after TAA resolve + projectionMatrix = renderContext.View.GetOverlayProjection(); // Fix TAA jittering when rendering UI in world after TAA resolve Matrix.Multiply(ref viewMatrix, ref projectionMatrix, out Matrix viewProjectionMatrix); // Pick a depth buffer