diff --git a/source/blender/blenkernel/BKE_cachefile.hh b/source/blender/blenkernel/BKE_cachefile.hh index b02f2f8f272..f3b91a37746 100644 --- a/source/blender/blenkernel/BKE_cachefile.hh +++ b/source/blender/blenkernel/BKE_cachefile.hh @@ -28,6 +28,7 @@ bool BKE_cachefile_filepath_get(const Main *bmain, char r_filepath[1024]); double BKE_cachefile_time_offset(const CacheFile *cache_file, double time, double fps); +double BKE_cachefile_frame_offset(const CacheFile *cache_file, double time); /* Modifiers and constraints open and free readers through these. */ void BKE_cachefile_reader_open(CacheFile *cache_file, diff --git a/source/blender/blenkernel/intern/cachefile.cc b/source/blender/blenkernel/intern/cachefile.cc index cac1caab1bc..9e8002a8188 100644 --- a/source/blender/blenkernel/intern/cachefile.cc +++ b/source/blender/blenkernel/intern/cachefile.cc @@ -405,6 +405,13 @@ double BKE_cachefile_time_offset(const CacheFile *cache_file, const double time, return cache_file->is_sequence ? frame : frame / fps - time_offset; } +double BKE_cachefile_frame_offset(const CacheFile *cache_file, const double time) +{ + const double time_offset = double(cache_file->frame_offset); + const double frame = cache_file->override_frame ? double(cache_file->frame) : time; + return cache_file->is_sequence ? frame : frame - time_offset; +} + bool BKE_cache_file_uses_render_procedural(const CacheFile *cache_file, Scene *scene) { RenderEngineType *render_engine_type = RE_engines_find(scene->r.engine); diff --git a/source/blender/modifiers/intern/MOD_meshsequencecache.cc b/source/blender/modifiers/intern/MOD_meshsequencecache.cc index 3109151965d..3a3b40dcfbd 100644 --- a/source/blender/modifiers/intern/MOD_meshsequencecache.cc +++ b/source/blender/modifiers/intern/MOD_meshsequencecache.cc @@ -174,6 +174,7 @@ static void modify_geometry_set(ModifierData *md, Scene *scene = DEG_get_evaluated_scene(ctx->depsgraph); CacheFile *cache_file = mcmd->cache_file; const float frame = DEG_get_ctime(ctx->depsgraph); + const double frame_offset = BKE_cachefile_frame_offset(cache_file, double(frame)); const double time = BKE_cachefile_time_offset(cache_file, frame, FPS); const char *err_str = nullptr; @@ -236,7 +237,7 @@ static void modify_geometry_set(ModifierData *md, case CACHEFILE_TYPE_USD: { # ifdef WITH_USD const blender::io::usd::USDMeshReadParams params = blender::io::usd::create_mesh_read_params( - time * FPS, mcmd->read_flag); + frame_offset, mcmd->read_flag); blender::io::usd::USD_read_geometry( mcmd->reader, ctx->object, *geometry_set, params, &err_str); # endif