[Bf-blender-cvs] [98670cfe824] universal-scene-description: USD import: Defined Primitives Only option.

Michael Kowalski noreply at git.blender.org
Tue Nov 29 20:21:41 CET 2022


Commit: 98670cfe8242c4f69dcfbd4cc99dcbfac83fa4b1
Author: Michael Kowalski
Date:   Tue Nov 29 14:18:06 2022 -0500
Branches: universal-scene-description
https://developer.blender.org/rB98670cfe8242c4f69dcfbd4cc99dcbfac83fa4b1

USD import: Defined Primitives Only option.

New option to load defined primitives only. This may be
turned off to allow loading overrides with the Path Mask.

===================================================================

M	source/blender/editors/io/io_usd.c
M	source/blender/io/usd/intern/usd_reader_stage.cc
M	source/blender/io/usd/usd.h

===================================================================

diff --git a/source/blender/editors/io/io_usd.c b/source/blender/editors/io/io_usd.c
index 313e2488ace..e82aefc4383 100644
--- a/source/blender/editors/io/io_usd.c
+++ b/source/blender/editors/io/io_usd.c
@@ -1069,6 +1069,8 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op)
 
   const bool import_visible_only = RNA_boolean_get(op->ptr, "import_visible_only");
 
+  const bool import_defined_only = RNA_boolean_get(op->ptr, "import_defined_only");
+
   const bool create_collection = RNA_boolean_get(op->ptr, "create_collection");
 
   char prim_path_mask[1024];
@@ -1147,7 +1149,8 @@ static int wm_usd_import_exec(bContext *C, wmOperator *op)
                                    .create_background_shader = create_background_shader,
                                    .mtl_name_collision_mode = mtl_name_collision_mode,
                                    .attr_import_mode = attr_import_mode,
-                                   .import_shapes = import_shapes};
+                                   .import_shapes = import_shapes,
+                                   .import_defined_only = import_defined_only};
 
   STRNCPY(params.prim_path_mask, prim_path_mask);
 
@@ -1193,6 +1196,7 @@ static void wm_usd_import_draw(bContext *UNUSED(C), wmOperator *op)
   uiItemR(col, ptr, "import_subdiv", 0, IFACE_("Subdivision"), ICON_NONE);
   uiItemR(col, ptr, "import_instance_proxies", 0, NULL, ICON_NONE);
   uiItemR(col, ptr, "import_visible_only", 0, NULL, ICON_NONE);
+  uiItemR(col, ptr, "import_defined_only", 0, NULL, ICON_NONE);
   uiItemR(col, ptr, "import_guide", 0, NULL, ICON_NONE);
   uiItemR(col, ptr, "import_proxy", 0, NULL, ICON_NONE);
   uiItemR(col, ptr, "import_render", 0, NULL, ICON_NONE);
@@ -1303,6 +1307,13 @@ void WM_OT_usd_import(struct wmOperatorType *ot)
                   "Only applies to primitives with a non-animated visibility attribute. "
                   "Primitives with animated visibility will always be imported");
 
+   RNA_def_boolean(ot->srna,
+                  "import_defined_only",
+                  true,
+                  "Defined Primitives Only",
+                  "Turn this off to allow importing USD primitives which are not defined, "
+                  "for example, to load overrides with the Path Mask");
+
   RNA_def_boolean(ot->srna,
                   "create_collection",
                   false,
diff --git a/source/blender/io/usd/intern/usd_reader_stage.cc b/source/blender/io/usd/intern/usd_reader_stage.cc
index 052b71bfcc5..70ddcb3faa6 100644
--- a/source/blender/io/usd/intern/usd_reader_stage.cc
+++ b/source/blender/io/usd/intern/usd_reader_stage.cc
@@ -287,10 +287,14 @@ USDPrimReader *USDStageReader::collect_readers(Main *bmain,
     dome_lights_.push_back(pxr::UsdLuxDomeLight(prim));
   }
 
-  pxr::Usd_PrimFlagsPredicate filter_predicate = pxr::UsdPrimDefaultPredicate;
+  pxr::Usd_PrimFlagsConjunction filter_predicate = pxr::UsdPrimIsActive && pxr::UsdPrimIsLoaded &&
+                                                   !pxr::UsdPrimIsAbstract;
+  if (params_.import_defined_only) {
+    filter_predicate &= pxr::UsdPrimIsDefined;
+  }
 
   if (!params_.use_instancing && params_.import_instance_proxies) {
-    filter_predicate = pxr::UsdTraverseInstanceProxies(filter_predicate);
+    filter_predicate.TraverseInstanceProxies(true);
   }
 
   pxr::UsdPrimSiblingRange children = prim.GetFilteredChildren(filter_predicate);
diff --git a/source/blender/io/usd/usd.h b/source/blender/io/usd/usd.h
index 88f65c7dfca..e62cf965424 100644
--- a/source/blender/io/usd/usd.h
+++ b/source/blender/io/usd/usd.h
@@ -176,6 +176,7 @@ struct USDImportParams {
   eUSDAttrImportMode attr_import_mode;
   bool triangulate_meshes;
   bool import_shapes;
+  bool import_defined_only;
 };
 
 /* The USD_export takes a as_background_job parameter, and returns a boolean.



More information about the Bf-blender-cvs mailing list