From 3a8eecbb1c54e74cbfb903367bb20ff1578b7b2f Mon Sep 17 00:00:00 2001 From: Trent Polack Date: Wed, 8 Apr 2026 11:25:52 -0400 Subject: [PATCH 1/2] Fixed a number of build errors with UnrealEngine build on ue5-main (with this as a project plugin). --- .../Private/HoudiniAnimationTranslator.cpp | 6 +++--- Source/HoudiniEngine/Private/HoudiniEngineUtils.cpp | 8 +++----- .../Private/HoudiniInstanceTranslator.cpp | 2 +- .../HoudiniEngine/Private/HoudiniOutputTranslator.cpp | 2 +- .../Private/Tests/HoudiniEditorTestDataLayers.cpp | 6 +++--- .../Private/Tests/HoudiniEditorTestHLOD.cpp | 6 +++--- .../Private/Tests/HoudiniEditorTestSkeletalMesh.cpp | 10 +++++----- 7 files changed, 19 insertions(+), 21 deletions(-) diff --git a/Source/HoudiniEngine/Private/HoudiniAnimationTranslator.cpp b/Source/HoudiniEngine/Private/HoudiniAnimationTranslator.cpp index 89039550af..898d34f7d7 100644 --- a/Source/HoudiniEngine/Private/HoudiniAnimationTranslator.cpp +++ b/Source/HoudiniEngine/Private/HoudiniAnimationTranslator.cpp @@ -595,13 +595,13 @@ bool FHoudiniAnimationTranslator::CreateAnimationFromMotionClip(UHoudiniOutput* TSharedPtr JsonObject; if (GetFbxCustomAttributes(GeoId, MeshPartId, RootBoneIndex, JsonObject)) { - TArray Keys; + TArray Keys; JsonObject->Values.GetKeys(Keys); - for (const FString& Key : Keys) + for (const UE::FSharedString& Key : Keys) { if (double Value; JsonObject->TryGetNumberField(Key, Value)) { - TArray& CurveData = FbxCustomAttributes.FindOrAdd(Key); + TArray& CurveData = FbxCustomAttributes.FindOrAdd(*Key); CurveData.Add(FRichCurveKey(FrameTime, static_cast(Value))); } } diff --git a/Source/HoudiniEngine/Private/HoudiniEngineUtils.cpp b/Source/HoudiniEngine/Private/HoudiniEngineUtils.cpp index dfcce98b21..055a1c3ca9 100755 --- a/Source/HoudiniEngine/Private/HoudiniEngineUtils.cpp +++ b/Source/HoudiniEngine/Private/HoudiniEngineUtils.cpp @@ -8522,7 +8522,7 @@ FString FHoudiniEngineUtils::RSTOrderToString(HAPI_RSTOrder RstOrder) FString FHoudiniEngineUtils::HapiTransformToString(HAPI_Transform Transform) { - FStringBuilderBase Output; + TStringBuilderBase Output; Output.Appendf(TEXT("P: %f, %f, %f "), Transform.position[0], Transform.position[1], Transform.position[2]); Output.Appendf(TEXT("Q: %f, %f, %f, %f "), Transform.rotationQuaternion[0], Transform.rotationQuaternion[1], Transform.rotationQuaternion[2], Transform.rotationQuaternion[3]); @@ -8544,9 +8544,7 @@ FString FHoudiniEngineUtils::DumpNode(HAPI_NodeId NodeId) if(Result != HAPI_RESULT_SUCCESS) return FString::Printf(TEXT("Failed to get node info: %s\n"), *FHoudiniEngineUtils::GetErrorDescription()); - FStringBuilderBase Output; - - + TStringBuilderBase Output; Output.Appendf(TEXT("Node ID: %d\n"), NodeId); Output.Appendf(TEXT(" Name: %s\n"), *FHoudiniEngineString(NodeInfo.nameSH).ToFString()); Output.Appendf(TEXT(" Type: %s\n"), *NodeTypeToString(NodeInfo.type)); @@ -8582,7 +8580,7 @@ FString FHoudiniEngineUtils::DumpAttribute(HAPI_NodeId NodeId, HAPI_PartId PartI return FString::Printf(TEXT("Failed to get attribute info: %s\n"), *FHoudiniEngineUtils::GetErrorDescription()); } - FStringBuilderBase Output; + TStringBuilderBase Output; Output.Appendf(TEXT(" Storage: %s\n"), *StorageTypeToString(AttributeInfo.storage)); Output.Appendf(TEXT(" Type: %s\n"), *AttributeTypeToString(AttributeInfo.typeInfo)); Output.Appendf(TEXT(" Tuple Size: %d\n"), AttributeInfo.tupleSize); diff --git a/Source/HoudiniEngine/Private/HoudiniInstanceTranslator.cpp b/Source/HoudiniEngine/Private/HoudiniInstanceTranslator.cpp index 2b670ecf44..1db32ae0b3 100755 --- a/Source/HoudiniEngine/Private/HoudiniInstanceTranslator.cpp +++ b/Source/HoudiniEngine/Private/HoudiniInstanceTranslator.cpp @@ -1927,7 +1927,7 @@ FHoudiniInstanceTranslator::GetPerInstanceCustomData( Accessor.GetAttributeData(HAPI_ATTROWNER_POINT, Values); if (Values.IsEmpty()) { - HOUDINI_LOG_ERROR(TEXT("Could found attribute "), *CurrentAttr); + HOUDINI_LOG_ERROR(TEXT("Could not find attribute: %s"), *CurrentAttr); return; } diff --git a/Source/HoudiniEngine/Private/HoudiniOutputTranslator.cpp b/Source/HoudiniEngine/Private/HoudiniOutputTranslator.cpp index 7851767a9b..3d181afa13 100755 --- a/Source/HoudiniEngine/Private/HoudiniOutputTranslator.cpp +++ b/Source/HoudiniEngine/Private/HoudiniOutputTranslator.cpp @@ -65,7 +65,7 @@ #include "Components/HierarchicalInstancedStaticMeshComponent.h" #include "Editor.h" #include "EditorSupportDelegates.h" -#include "Engine/UserDefinedStruct.h" +#include "StructUtils/UserDefinedStruct.h" #include "Engine/WorldComposition.h" #include "FileHelpers.h" #include "HAL/PlatformFileManager.h" diff --git a/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestDataLayers.cpp b/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestDataLayers.cpp index abd71e8e75..692f7acf5c 100644 --- a/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestDataLayers.cpp +++ b/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestDataLayers.cpp @@ -178,7 +178,7 @@ bool FHoudiniEditorTestLandscapeDataLayers::RunTest(const FString& Parameters) auto& BakedOutput = BakedOutputs[0]; HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 1, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject = BakedOutput.BakedOutputObjects.begin().ElementIt->Value.Value;; + auto& BakedObject = BakedOutput.BakedOutputObjects.begin()->Value; #else auto& BakedObject = BakedOutput.BakedOutputObjects.begin().Value(); #endif @@ -262,7 +262,7 @@ IMPLEMENT_SIMPLE_HOUDINI_AUTOMATION_TEST(FHoudiniEditorTestInstancesDataLayers, HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 2, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject0 = ObjIt.ElementIt->Value.Value; + auto& BakedObject0 = ObjIt->Value; #else auto& BakedObject0 = ObjIt.Value(); #endif @@ -280,7 +280,7 @@ IMPLEMENT_SIMPLE_HOUDINI_AUTOMATION_TEST(FHoudiniEditorTestInstancesDataLayers, ++ObjIt; #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject1 = ObjIt.ElementIt->Value.Value; + auto& BakedObject1 = ObjIt->Value; #else auto& BakedObject1 = ObjIt.Value(); #endif diff --git a/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestHLOD.cpp b/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestHLOD.cpp index 472a51e02c..461eef3e3e 100644 --- a/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestHLOD.cpp +++ b/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestHLOD.cpp @@ -87,7 +87,7 @@ bool FHoudiniEditorTestLandscapeHLOD::RunTest(const FString& Parameters) HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 1, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject = BakedOutput.BakedOutputObjects.begin().ElementIt->Value.Value; + auto& BakedObject = BakedOutput.BakedOutputObjects.begin()->Value; #else auto& BakedObject = BakedOutput.BakedOutputObjects.begin().Value(); #endif @@ -144,7 +144,7 @@ IMPLEMENT_SIMPLE_HOUDINI_AUTOMATION_TEST(FHoudiniEditorTestInstancesHLOD, "Houdi HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 2, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject0 = ObjIt.ElementIt->Value.Value; + auto& BakedObject0 = ObjIt->Value; #else auto& BakedObject0 = ObjIt.Value(); #endif @@ -159,7 +159,7 @@ IMPLEMENT_SIMPLE_HOUDINI_AUTOMATION_TEST(FHoudiniEditorTestInstancesHLOD, "Houdi // Check second output instancer has HLODLayer. ++ObjIt; #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject1 = ObjIt.ElementIt->Value.Value; + auto& BakedObject1 = ObjIt->Value; #else auto& BakedObject1 = ObjIt.Value(); #endif diff --git a/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestSkeletalMesh.cpp b/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestSkeletalMesh.cpp index 5c264a5fa5..d220bb3d6b 100644 --- a/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestSkeletalMesh.cpp +++ b/Source/HoudiniEngineEditor/Private/Tests/HoudiniEditorTestSkeletalMesh.cpp @@ -105,7 +105,7 @@ bool FHoudiniEditorTestSkeletalMeshElectra::RunTest(const FString& Parameters) auto & BakedOutput = BakedOutputs[0]; HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 1, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject = BakedOutput.BakedOutputObjects.begin().ElementIt->Value.Value; + auto& BakedObject = BakedOutput.BakedOutputObjects.begin()->Value; #else auto& BakedObject = BakedOutput.BakedOutputObjects.begin().Value(); #endif @@ -206,7 +206,7 @@ bool FHoudiniEditorTestSkeletalMeshElectraDefaultPhysicsAsset::RunTest(const FSt auto& BakedOutput = BakedOutputs[0]; HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 1, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject = BakedOutput.BakedOutputObjects.begin().ElementIt->Value.Value; + auto& BakedObject = BakedOutput.BakedOutputObjects.begin()->Value; #else auto& BakedObject = BakedOutput.BakedOutputObjects.begin().Value(); #endif @@ -312,7 +312,7 @@ bool FHoudiniEditorTestSkeletalMeshElectraCustomPhysicsAsset::RunTest(const FStr HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 1, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject = BakedOutput.BakedOutputObjects.begin().ElementIt->Value.Value; + auto& BakedObject = BakedOutput.BakedOutputObjects.begin()->Value; #else auto& BakedObject = BakedOutput.BakedOutputObjects.begin().Value(); #endif @@ -492,7 +492,7 @@ bool FHoudiniEditorTestSkeletalMeshElectraExistingPhysicsAsset::RunTest(const FS HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 1, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject = BakedOutput.BakedOutputObjects.begin().ElementIt->Value.Value; + auto& BakedObject = BakedOutput.BakedOutputObjects.begin()->Value; #else auto& BakedObject = BakedOutput.BakedOutputObjects.begin().Value(); #endif @@ -600,7 +600,7 @@ bool FHoudiniEditorTestSkeletalMeshElectraExistingSkeleton::RunTest(const FStrin auto& BakedOutput = BakedOutputs[0]; HOUDINI_TEST_EQUAL_ON_FAIL(BakedOutput.BakedOutputObjects.Num(), 1, return true); #if ENGINE_MAJOR_VERSION == 5 && ENGINE_MINOR_VERSION >= 7 - auto& BakedObject = BakedOutput.BakedOutputObjects.begin().ElementIt->Value.Value; + auto& BakedObject = BakedOutput.BakedOutputObjects.begin()->Value; #else auto& BakedObject = BakedOutput.BakedOutputObjects.begin().Value(); #endif From f3439062c6e68bccdf6c36dd579bf2ad6f3ccaa6 Mon Sep 17 00:00:00 2001 From: Trent Polack Date: Wed, 8 Apr 2026 14:16:57 -0400 Subject: [PATCH 2/2] Manually set Houdini Engine to my local version of Houdini (latest production one). --- Source/HoudiniEngine/HoudiniEngine.Build.cs | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Source/HoudiniEngine/HoudiniEngine.Build.cs b/Source/HoudiniEngine/HoudiniEngine.Build.cs index abec87f9c2..6d947558df 100644 --- a/Source/HoudiniEngine/HoudiniEngine.Build.cs +++ b/Source/HoudiniEngine/HoudiniEngine.Build.cs @@ -80,7 +80,7 @@ private void LogInformation(string info) private string GetHFSPath() { - string HoudiniVersion = "21.0.679"; + string HoudiniVersion = "21.0.671"; // TRENT_MOD (4/8/26): Original version is "21.0.679". Modified for what I have locally. bool bIsRelease = true; string HFSPath = ""; string RegistryPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Side Effects Software"; @@ -254,7 +254,7 @@ private string GetHFSPath() } string Info = string.Format("Houdini Engine : Houdini {0} could not be found. Houdini Engine will not be available in this build.", HoudiniVersion); - LogInformation(Info); + LogError(Info); return ""; }