Skip to content

Commit 2ca2a27

Browse files
Merge branch 'ignoreEmptyOverrides' into 'main'
Fix for incorrectly ignoring meshes after show/hide is used in USD Composer See merge request lightspeedrtx/dxvk-remix-nv!1207
2 parents 4d3b1d0 + 54a2510 commit 2ca2a27

File tree

1 file changed

+20
-12
lines changed

1 file changed

+20
-12
lines changed

src/dxvk/rtx_render/rtx_mod_usd.cpp

+20-12
Original file line numberDiff line numberDiff line change
@@ -105,7 +105,7 @@ class UsdMod::Impl {
105105
void processPrim(Args& args, pxr::UsdPrim& prim);
106106

107107
void processLight(Args& args, const pxr::UsdPrim& lightPrim, const bool isOverride);
108-
void processReplacement(Args& args);
108+
bool processReplacement(Args& args);
109109

110110
Categorizer processCategoryFlags(const pxr::UsdPrim& prim);
111111

@@ -527,7 +527,7 @@ bool explicitlyNoReferences(const pxr::UsdPrim& prim) {
527527
return false;
528528
}
529529

530-
void UsdMod::Impl::processReplacement(Args& args) {
530+
bool UsdMod::Impl::processReplacement(Args& args) {
531531
ScopedCpuProfileZone();
532532

533533
if (args.rootPrim.IsA<pxr::UsdGeomMesh>()) {
@@ -551,6 +551,14 @@ void UsdMod::Impl::processReplacement(Args& args) {
551551
if (args.meshes[0].includeOriginal) {
552552
args.meshes[0].categories = processCategoryFlags(args.rootPrim);
553553
}
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+
554562
}
555563
}
556564

@@ -663,11 +671,11 @@ void UsdMod::Impl::processUSD(const Rc<DxvkContext>& context) {
663671

664672
Args args = {context, xformCache, child, replacementVec};
665673

666-
processReplacement(args);
667-
668-
variantCounts[hash]++;
674+
if (processReplacement(args)) {
675+
variantCounts[hash]++;
669676

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+
}
671679
}
672680
}
673681
}
@@ -695,9 +703,9 @@ void UsdMod::Impl::processUSD(const Rc<DxvkContext>& context) {
695703

696704
Args args = {context, xformCache, rootPrim, replacementVec};
697705

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+
}
701709
}
702710
}
703711

@@ -710,9 +718,9 @@ void UsdMod::Impl::processUSD(const Rc<DxvkContext>& context) {
710718
std::vector<AssetReplacement> replacementVec;
711719
Args args = {context, xformCache, child, replacementVec};
712720

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+
}
716724
}
717725
}
718726
}

0 commit comments

Comments
 (0)