Skip to content

Commit 017a7d7

Browse files
committed
- Fixed a regression that caused double instancers to be generated after baking
when an HDA outputs both meshes and instancers.
1 parent 536285e commit 017a7d7

File tree

2 files changed

+34
-19
lines changed

2 files changed

+34
-19
lines changed

Source/HoudiniEngine/Private/HoudiniInstanceTranslator.cpp

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -150,6 +150,7 @@ FHoudiniInstanceTranslator::CreateAllInstancersFromHoudiniOutputs(
150150
{
151151
if (Output->GetType() != EHoudiniOutputType::Instancer)
152152
continue;
153+
153154
bool bSuccess = FHoudiniInstanceTranslator::CreateAllInstancersFromHoudiniOutput(
154155
Output,
155156
InAllOutputs,

Source/HoudiniEngine/Private/HoudiniOutputTranslator.cpp

Lines changed: 33 additions & 19 deletions
Original file line numberDiff line numberDiff line change
@@ -786,7 +786,9 @@ FHoudiniOutputTranslator::UpdateDataLayersAndLevelInstanceOnOutput(
786786

787787

788788
bool
789-
FHoudiniOutputTranslator::BuildStaticMeshesOnHoudiniProxyMeshOutputs(UHoudiniCookable* HC, bool bInDestroyProxies)
789+
FHoudiniOutputTranslator::BuildStaticMeshesOnHoudiniProxyMeshOutputs(
790+
UHoudiniCookable* HC,
791+
bool bInDestroyProxies)
790792
{
791793
if (!IsValid(HC))
792794
return false;
@@ -834,14 +836,24 @@ FHoudiniOutputTranslator::BuildStaticMeshesOnHoudiniProxyMeshOutputs(UHoudiniCoo
834836
HC->GetStaticMeshBuildSettings(),
835837
AllOutputMaterials,
836838
OuterComponent,
837-
true, // bInTreatExistingMaterialsAsUpToDate
839+
true, // bInTreatExistingMaterialsAsUpToDate
838840
bInDestroyProxies
839841
);
840842
}
841843
}
842844
else if (OutputType == EHoudiniOutputType::Instancer)
843845
{
844-
InstancerOutputs.Add(CurOutput);
846+
for (auto& CurOutputObject : CurOutput->OutputObjects)
847+
{
848+
if (CurOutputObject.Value.ProxyComponent != nullptr
849+
|| CurOutputObject.Value.ProxyObject != nullptr)
850+
{
851+
// This is a single instance instancer (a mesh)
852+
// that will need to be rebuilt
853+
InstancerOutputs.Add(CurOutput);
854+
bFoundProxies = true;
855+
}
856+
}
845857
}
846858

847859
for (auto& CurMat : CurOutput->AssignmentMaterialsById)
@@ -852,31 +864,33 @@ FHoudiniOutputTranslator::BuildStaticMeshesOnHoudiniProxyMeshOutputs(UHoudiniCoo
852864
}
853865
}
854866

855-
// Rebuild instancers if we built any static meshes from proxies
856-
if (bFoundProxies)
867+
// No proxies were found
868+
// TODO: Dont return if we found instancers???
869+
if (!bFoundProxies || InstancerOutputs.Num() <= 0)
870+
return true;
871+
872+
// We might need to also rebuild some instancer outputs (single instance instancer)
873+
// And we might need to destroy the proxies for the instancer outputs before rebuilding the instancer
874+
if (bInDestroyProxies)
857875
{
858-
if (bInDestroyProxies)
876+
for (auto& CurOutput : InstancerOutputs)
859877
{
860-
// We need to destroy the proxies for the instancer outputs before rebuilding the instancer
861-
for (auto& CurOutput : InstancerOutputs)
878+
for (auto& CurOutputObject : CurOutput->OutputObjects)
862879
{
863-
for (auto& CurOutputObject : CurOutput->OutputObjects)
864-
{
865-
if (CurOutputObject.Value.ProxyComponent)
866-
FHoudiniMeshTranslator::RemoveAndDestroyComponent(CurOutputObject.Value.ProxyComponent);
880+
if (CurOutputObject.Value.ProxyComponent)
881+
FHoudiniMeshTranslator::RemoveAndDestroyComponent(CurOutputObject.Value.ProxyComponent);
867882

868-
if (IsValid(CurOutputObject.Value.ProxyObject))
869-
{
870-
CurOutputObject.Value.ProxyObject->MarkAsGarbage();
871-
}
883+
if (IsValid(CurOutputObject.Value.ProxyObject))
884+
{
885+
CurOutputObject.Value.ProxyObject->MarkAsGarbage();
872886
}
873887
}
874888
}
875-
876-
// Rebuild the instancers
877-
FHoudiniInstanceTranslator::CreateAllInstancersFromHoudiniOutputs(InstancerOutputs, HC->GetOutputs(), OuterComponent, PackageParams);
878889
}
879890

891+
// Rebuild the instancers
892+
FHoudiniInstanceTranslator::CreateAllInstancersFromHoudiniOutputs(InstancerOutputs, HC->GetOutputs(), OuterComponent, PackageParams);
893+
880894
return true;
881895
}
882896

0 commit comments

Comments
 (0)