summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRémi Verschelde <rverschelde@gmail.com>2024-08-19 12:09:34 +0200
committerRémi Verschelde <rverschelde@gmail.com>2024-08-19 12:09:34 +0200
commit10b91ee950c3c45925a9d8607d2923677860beff (patch)
treead4ad3a146be20d942767416ecbd3ff4dbfb2c2d
parent7f6b4eb5ee34f5b74f09633082caefb126365b2b (diff)
parent92f2bc70dd734e0de3b6c7f18c57680c63715343 (diff)
downloadredot-engine-10b91ee950c3c45925a9d8607d2923677860beff.tar.gz
Merge pull request #95705 from zeux/fsr-skin-relax
Relax motion vector updates to allow skipped frames for skeletons
-rw-r--r--servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp
index c5454e748a..a95c4ec83a 100644
--- a/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp
+++ b/servers/rendering/renderer_rd/storage_rd/mesh_storage.cpp
@@ -1056,8 +1056,9 @@ void MeshStorage::update_mesh_instances() {
mi->surfaces[i].previous_buffer = mi->surfaces[i].current_buffer;
- if (uses_motion_vectors && (frame - mi->surfaces[i].last_change) == 1) {
- // Previous buffer's data can only be one frame old to be able to use motion vectors.
+ if (uses_motion_vectors && mi->surfaces[i].last_change && (frame - mi->surfaces[i].last_change) <= 2) {
+ // Use a 2-frame tolerance so that stepped skeletal animations have correct motion vectors
+ // (stepped animation is common for distant NPCs).
uint32_t new_buffer_index = mi->surfaces[i].current_buffer ^ 1;
if (mi->surfaces[i].uniform_set[new_buffer_index].is_null()) {