diff --git a/source/blender/io/usd/intern/usd_reader_stage.cc b/source/blender/io/usd/intern/usd_reader_stage.cc index e8f7b8ee890..2bccbaa75d2 100644 --- a/source/blender/io/usd/intern/usd_reader_stage.cc +++ b/source/blender/io/usd/intern/usd_reader_stage.cc @@ -907,19 +907,25 @@ void USDStageReader::collect_point_instancer_proto_paths(const pxr::UsdPrim &pri pxr::UsdPrimSiblingRange children = prim.GetFilteredChildren(filter_flags); for (const auto &child_prim : children) { - const pxr::UsdGeomImageable imageable = pxr::UsdGeomImageable(child_prim); - if (!imageable) { - continue; - } - /* We should only traverse through a hierarchy, and any potential instancers, if they would be - * included by our purpose and visibility checks, matching what is inside #collect_readers. */ - if (!include_by_purpose(imageable)) { - continue; - } + /* Note we allow undefined prims in case prototypes are defined as overs. + * If the prim is defined, we apply additional checks for inclusion. */ + if (child_prim.IsDefined()) { + const pxr::UsdGeomImageable imageable = pxr::UsdGeomImageable(child_prim); + if (!imageable) { + continue; + } - if (!include_by_visibility(imageable)) { - continue; + /* We should only traverse through a hierarchy, and any potential instancers, if they would + * be included by our purpose and visibility checks, matching what is inside + * #collect_readers. */ + if (!include_by_purpose(imageable)) { + continue; + } + + if (!include_by_visibility(imageable)) { + continue; + } } if (pxr::UsdGeomPointInstancer instancer = pxr::UsdGeomPointInstancer(child_prim)) {