@@ -786,7 +786,9 @@ FHoudiniOutputTranslator::UpdateDataLayersAndLevelInstanceOnOutput(
786786
787787
788788bool
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