From 934589c7370f9d2312742b3b78685ec224406011 Mon Sep 17 00:00:00 2001 From: makowalski Date: Wed, 9 Dec 2020 16:50:18 -0500 Subject: USD import flags. Added Is Sequence and Transform Cache Constraint import options. --- source/blender/editors/io/io_usd.c | 25 +++++++++++++++- .../blender/io/usd/import/usd_reader_xformable.cc | 2 +- source/blender/io/usd/intern/usd_capi.cc | 33 +++++++++++----------- source/blender/io/usd/usd.h | 2 ++ 4 files changed, 44 insertions(+), 18 deletions(-) diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c index 09452d46ced..3655abea00b 100644 --- a/source/blender/editors/io/io_usd.c +++ b/source/blender/editors/io/io_usd.c @@ -283,6 +283,9 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op) const bool import_usdpreview = RNA_boolean_get(op->ptr, "import_usdpreview"); + const bool is_sequence = RNA_boolean_get(op->ptr, "is_sequence"); + const bool transform_constraint = RNA_boolean_get(op->ptr, "transform_constraint"); + /* Switch out of edit mode to avoid being stuck in it (T54326). */ Object *obedit = CTX_data_edit_object(C); if (obedit) { @@ -296,7 +299,9 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op) debug, use_instancing, light_intensity_scale, - import_usdpreview}; + import_usdpreview, + is_sequence, + transform_constraint}; bool ok = USD_import(C, filename, ¶ms, as_background_job); @@ -322,6 +327,11 @@ static void wm_usd_import_draw(bContext *UNUSED(C), wmOperator *op) uiItemR(box, ptr, "light_intensity_scale", 0, NULL, ICON_NONE); uiItemR(col, ptr, "debug", 0, NULL, ICON_NONE); + box = uiLayoutBox(layout); + uiItemL(box, IFACE_("Animation Cache"), ICON_NONE); + uiItemR(box, ptr, "is_sequence", 0, NULL, ICON_NONE); + uiItemR(box, ptr, "transform_constraint", 0, NULL, ICON_NONE); + box = uiLayoutBox(layout); uiItemL(box, IFACE_("Experimental"), ICON_NONE); uiItemR(box, ptr, "use_instancing", 0, NULL, ICON_NONE); @@ -394,6 +404,19 @@ void WM_OT_usd_import(wmOperatorType *ot) false, "Import UsdPreviewSurface", "When checked, convert UsdPreviewSurface shaders to Principled BSD shader networks."); + + RNA_def_boolean(ot->srna, + "is_sequence", + false, + "Is Sequence", + "Set to true if the cache is split into separate files"); + + RNA_def_boolean(ot->srna, + "transform_constraint", + true, + "Transform Cache Constraint", + "When checked, create transform cache constraints for objects that have " + "time-varying transforms."); } #endif /* WITH_USD */ diff --git a/source/blender/io/usd/import/usd_reader_xformable.cc b/source/blender/io/usd/import/usd_reader_xformable.cc index 539b388438a..fdca56cf7ed 100644 --- a/source/blender/io/usd/import/usd_reader_xformable.cc +++ b/source/blender/io/usd/import/usd_reader_xformable.cc @@ -97,7 +97,7 @@ void USDXformableReader::set_object_transform(const double time, CacheFile *cach BKE_object_apply_mat4(object_, transform_from_usd, true, false); BKE_object_to_mat4(object_, object_->obmat); - if (cache_file && !is_constant) { + if (cache_file && (!is_constant || this->context_.import_params.is_sequence)) { bConstraint *con = BKE_constraint_add_for_object( object_, NULL, CONSTRAINT_TYPE_TRANSFORM_CACHE); bTransformCacheConstraint *data = static_cast(con->data); diff --git a/source/blender/io/usd/intern/usd_capi.cc b/source/blender/io/usd/intern/usd_capi.cc index 931b08433ef..73a1a5ede14 100644 --- a/source/blender/io/usd/intern/usd_capi.cc +++ b/source/blender/io/usd/intern/usd_capi.cc @@ -298,22 +298,23 @@ static void import_startjob(void *user_data, short *stop, short *do_update, floa USDPrimIterator usd_prim_iter(data->stage, import_ctx, data->bmain); - CacheFile *cache_file = static_cast( - BKE_cachefile_add(data->bmain, BLI_path_basename(data->filename))); - - /* Decrement the ID ref-count because it is going to be incremented for each - * modifier and constraint that it will be attached to, so since currently - * it is not used by anyone, its use count will off by one. */ - /* TODO(makowalski): rather than decrementing the use count, should - * we just call BKE_id_free_us() on the cache_file id when cleaning up? */ - id_us_min(&cache_file->id); - - // cache_file->is_sequence = data->params.is_sequence; - cache_file->scale = data->params.scale; - STRNCPY(cache_file->filepath, data->filename); - - // data->archive = archive; - // data->settings.cache_file = cache_file; + CacheFile *cache_file = nullptr; + + if (data->params.transform_constraint) { + cache_file = static_cast( + BKE_cachefile_add(data->bmain, BLI_path_basename(data->filename))); + + /* Decrement the ID ref-count because it is going to be incremented for each + * modifier and constraint that it will be attached to, so since currently + * it is not used by anyone, its use count will off by one. */ + /* TODO(makowalski): rather than decrementing the use count, should + * we just call BKE_id_free_us() on the cache_file id when cleaning up? */ + id_us_min(&cache_file->id); + + cache_file->is_sequence = data->params.is_sequence; + cache_file->scale = data->params.scale; + STRNCPY(cache_file->filepath, data->filename); + } // Optionally print the stage contents for debugging. if (data->params.debug) { diff --git a/source/blender/io/usd/usd.h b/source/blender/io/usd/usd.h index d993d7d62cf..cd3ff47ab68 100644 --- a/source/blender/io/usd/usd.h +++ b/source/blender/io/usd/usd.h @@ -65,6 +65,8 @@ struct USDImportParams { bool use_instancing; float light_intensity_scale; bool import_usdpreview; + bool is_sequence; + bool transform_constraint; }; /* The USD_import function takes a as_background_job parameter, and returns a boolean. -- cgit v1.2.3