diff options
| author | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-19 12:09:34 +0200 |
|---|---|---|
| committer | Rémi Verschelde <rverschelde@gmail.com> | 2024-08-19 12:09:34 +0200 |
| commit | 10b91ee950c3c45925a9d8607d2923677860beff (patch) | |
| tree | ad4ad3a146be20d942767416ecbd3ff4dbfb2c2d | |
| parent | 7f6b4eb5ee34f5b74f09633082caefb126365b2b (diff) | |
| parent | 92f2bc70dd734e0de3b6c7f18c57680c63715343 (diff) | |
| download | redot-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.cpp | 5 |
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()) { |
