@@ -105,7 +105,7 @@ class UsdMod::Impl {
105
105
void processPrim (Args& args, pxr::UsdPrim& prim);
106
106
107
107
void processLight (Args& args, const pxr::UsdPrim& lightPrim, const bool isOverride);
108
- void processReplacement (Args& args);
108
+ bool processReplacement (Args& args);
109
109
110
110
Categorizer processCategoryFlags (const pxr::UsdPrim& prim);
111
111
@@ -527,7 +527,7 @@ bool explicitlyNoReferences(const pxr::UsdPrim& prim) {
527
527
return false ;
528
528
}
529
529
530
- void UsdMod::Impl::processReplacement (Args& args) {
530
+ bool UsdMod::Impl::processReplacement (Args& args) {
531
531
ScopedCpuProfileZone ();
532
532
533
533
if (args.rootPrim .IsA <pxr::UsdGeomMesh>()) {
@@ -551,6 +551,14 @@ void UsdMod::Impl::processReplacement(Args& args) {
551
551
if (args.meshes [0 ].includeOriginal ) {
552
552
args.meshes [0 ].categories = processCategoryFlags (args.rootPrim );
553
553
}
554
+ return true ;
555
+ } else {
556
+ bool result = preserveGameObject (args.rootPrim );
557
+ if (result) {
558
+ Logger::warn (str::format (" Empty override prim found. " , args.rootPrim .GetPrimPath ().GetString (), " has no children, but the original mesh reference is not explicitely deleted." ));
559
+ }
560
+ return !result;
561
+
554
562
}
555
563
}
556
564
@@ -663,11 +671,11 @@ void UsdMod::Impl::processUSD(const Rc<DxvkContext>& context) {
663
671
664
672
Args args = {context, xformCache, child, replacementVec};
665
673
666
- processReplacement (args);
667
-
668
- variantCounts[hash]++;
674
+ if (processReplacement (args)) {
675
+ variantCounts[hash]++;
669
676
670
- m_owner.m_replacements ->set <AssetReplacement::eMesh>(hash, std::move (replacementVec));
677
+ m_owner.m_replacements ->set <AssetReplacement::eMesh>(hash, std::move (replacementVec));
678
+ }
671
679
}
672
680
}
673
681
}
@@ -695,9 +703,9 @@ void UsdMod::Impl::processUSD(const Rc<DxvkContext>& context) {
695
703
696
704
Args args = {context, xformCache, rootPrim, replacementVec};
697
705
698
- processReplacement (args);
699
-
700
- m_owner. m_replacements -> set <AssetReplacement::eMesh>(variantHash, std::move (replacementVec));
706
+ if ( processReplacement (args)) {
707
+ m_owner. m_replacements -> set <AssetReplacement::eMesh>(variantHash, std::move (replacementVec));
708
+ }
701
709
}
702
710
}
703
711
@@ -710,9 +718,9 @@ void UsdMod::Impl::processUSD(const Rc<DxvkContext>& context) {
710
718
std::vector<AssetReplacement> replacementVec;
711
719
Args args = {context, xformCache, child, replacementVec};
712
720
713
- processReplacement (args);
714
-
715
- m_owner. m_replacements -> set <AssetReplacement::eLight>(hash, std::move (replacementVec));
721
+ if ( processReplacement (args)) {
722
+ m_owner. m_replacements -> set <AssetReplacement::eLight>(hash, std::move (replacementVec));
723
+ }
716
724
}
717
725
}
718
726
}
0 commit comments