Fix large worlds rendering of meshes

Add `Double4x4` for higher precision matrices operations

#2985
This commit is contained in:
Wojtek Figat
2025-02-11 13:01:48 +01:00
parent 21f8dab5de
commit aa8add7b38
13 changed files with 338 additions and 9 deletions

View File

@@ -215,6 +215,13 @@ void RenderView::GetWorldMatrix(const Transform& transform, Matrix& world) const
Matrix::Transformation(transform.Scale, transform.Orientation, translation, world);
}
void RenderView::GetWorldMatrix(Double4x4& world) const
{
world.M41 -= Origin.X;
world.M42 -= Origin.Y;
world.M43 -= Origin.Z;
}
TaaJitterRemoveContext::TaaJitterRemoveContext(const RenderView& view)
{
if (view.IsTaaResolved)

View File

@@ -5,6 +5,9 @@
#include "Engine/Core/Math/BoundingFrustum.h"
#include "Engine/Core/Math/Matrix.h"
#include "Engine/Core/Math/Vector3.h"
#if USE_LARGE_WORLDS
#include "Engine/Core/Math/Double4x4.h"
#endif
#include "Engine/Core/Types/LayersMask.h"
#include "Engine/Level/Types.h"
#include "Enums.h"
@@ -358,6 +361,9 @@ public:
world.M42 -= (float)Origin.Y;
world.M43 -= (float)Origin.Z;
}
// Applies the render origin to the transformation instance matrix.
void GetWorldMatrix(Double4x4& world) const;
};
// Removes TAA jitter from the RenderView when drawing geometry after TAA has been resolved to prevent unwanted jittering.