Skip to content

Commit 7074137

Browse files
committed
Alpha 3.1 update
The plug-in is now linked with Houdini 18.0.532 / HAPI3.3.11 New Features: - Added the ability to split attribute instancers and packed primitives instancers by attribute. The attribute used to split the instancers can be set via the "unreal_split_attr" attribute (string). The specified attributes values will then be used to create multiple instancers instead of one. - Instancers now store the split attributes they used so it can be reused to resolve output attributes. This allows, for example, to use the tile attribute when baking instancers/meshes to world composition (with a tiled landscape) to control the sublevel where the baked actors should be placed. - Added automatic conversion of attributes when they are of an inappropriate type. FHoudiniEngineUtils::HapiGetAttributeDataAsFloat/Integer/String now try to convert attributes to the expected type. This will remove frustration and attributes being ignored due to them not being of the expected type. Bug Fixes: - Fixed non-editor build errors, game build errors and incorrect initialization warnings when packaging. - Fixed non-unity build issues caused by #define LOCTEXT_NAMESPACE - Added 'Scale Changed Uniformly' Lock and Reset to float VEC3 parameter, to Input Geometry objects and instanced objects. - Parameter UI performance improved: Construct radio button circle segments exactly once at first use, avoid repeat computation. - Fixed the 'Editing...' Text in Curve Input UI not updated properly when selecting other types of components in the same HDA. - Fixed: Made the curve type menu consistent to Houdini. Added 'Points' curve type which displays CVs only. - Fixed: curves 'reversed' parameter is now synced with Houdini. - Fixed: bug preventing the editing of curves when cooking is paused. - Fixed: Unreal Spline Component input cooking infinitely after changing a spline control point or rebuilding. - Fixed: File/String parameters text field extends when the string is long. - Fixed: Crash when connecting to a HARS session that was manually started. This was caused by calling SetSessionSyncInfo before initializing HAPI. - Fixed displayed templated geos not updating after having being changed. - Fixed: PDG Asset Link listing bypassed TOP Networks/TOP Nodes. - Fixed: Ramp parameters' curves UI disappearing randomly due to GC. - Fixed: PDG Asset Link listing TOP Networks nested inside other TOP networks. This fixes the PDG listing all subnets, ROP Geometry top nodes etc.. found in a HDA. - Fixed: bug with the PDG Asset Link that prevented certain nodes from being cooked via the UI. This was caused by an invalid selection of TOP Nodes due to a mismatch between UI indices and TOP indices caused by hidden nodes. - Fixed the PDG Asset Link sometimes still an invalid/hidden node after changing the node filter, or after instantiating a new PDG HDA with invalid/hidden nodes. - Fixed crashes that could happen when recooking a HDA with tiled landscapes that previously baked to WC, after adding new tiles. - Fixed crash that could happen when loosing the session due to houdini crashing (or being killed manually). FHoudiniEngineManager::StopHoudiniTicking() crashed when trying to access/clear the timer out of the game thread. - Fixed the plugin leaving previous foliage types in the foliage system after changing the foliage mesh. When instancing foliage, the previously used foliage type is now destroyed if no instances are left on it after cleaning the HDA's instances. - Fixed deleting an HDA also deleting the foliage component even if that component still had manually placed instances left. We now only delete the foliage component if it doesnt have instances anymore. - Fixed a bug that prevented clearing string parameters used as Asset pickers. - Removed outdated warning spam when attempting to fetch unreal_material attributes on instancer: "Instancer: the unreal_material attribute must be a primitive or detail attribute, ignoring the attribute." - Fixed foliage instancers removing/destroying the foliage component for the previously used foliage type after changing the instanced mesh, even if said foliage component still had hand-placed instances left. - Fixed foliage instancers leaving empty foliage types behind after deleting their Houdini asset actor. - Fixed regression causing "Bake To Actor" to attempt to create a default level when the "unreal_level_path" attribute is not set. This caused the baking process to open a "save as" dialog to attempt to save that untitled level... Bake to actors now properly uses the current level when the level path attribute is not set. - Fixed the "tile" attribute/ "tile_i" token not being properly processed with "unreal_level_path" attributes when baking meshes and instancers to actors. - Fixed string parameters set as asset picker not updating their thumbnail/selected object after drag & dropping an asset on the widget. The string value was properly set to the asset reference, but the widget didn't display the proper asset thumbnail/infos. - Fixed baking instancers sometimes creating invisible actors. This was caused by the default reference mesh setting the HiddenInGame property to true. - Fixed issues when creating multiple landscape tiles mixed with instancers or other objects that also have the tile attribute. This caused the output translator to only create one output (and only one landscape), with all the volumes (height, masks ..) instead of creating an output per tile. This was caused by UHoudiniOutput::HeightfieldMatch() not finding previous/new landscape properly. - Fixed: possible crash in the output details. - Fixed: Parameter Details endlessly looping due to directories not being parsed correctly if the params were invalid (-1). - Fixed instancer not properly baking to sublevel via the unreal_level_path attribute. - Renamed the "tile_i" output token to "tile" to make it compatible with the split instance attribute. - Fixed: Parameter UI: Wrong divider line on nested tabs - Fixed: Parameter UI: bugs with the divider of nested multiparm and tabs, and empty multiparm and folder - Fixed: Parameter UI: tab's innermost divider is too tall for tabs row.
1 parent 6e8f163 commit 7074137

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

48 files changed

+1678
-887
lines changed

HoudiniEngine.uplugin

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,8 @@
11
{
22
"FileVersion" : 3,
33
"FriendlyName" : "Houdini Engine v2",
4-
"Version" : 18000499,
5-
"VersionName" : "v2 - Alpha3 - H18.0.499",
4+
"Version" : 18000532,
5+
"VersionName" : "v2 - Alpha3.1 - H18.0.532",
66
"CreatedBy" : "Side Effects Software Inc.",
77
"CreatedByURL" : "http://www.sidefx.com",
88
"DocsURL" : "http://www.sidefx.com/docs/unreal/",

Source/HoudiniEngine/HoudiniEngine.Build.cs

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,7 +32,7 @@
3232

3333
/*
3434
35-
Houdini Version: 18.0.499
35+
Houdini Version: 18.0.532
3636
Houdini Engine Version: 3.3.11
3737
Unreal Version: 4.25.0
3838
@@ -47,7 +47,7 @@ public class HoudiniEngine : ModuleRules
4747
{
4848
private string GetHFSPath()
4949
{
50-
string HoudiniVersion = "18.0.499";
50+
string HoudiniVersion = "18.0.532";
5151
bool bIsRelease = true;
5252
string HFSPath = "C:/dev/hfs";
5353
string RegistryPath = "HKEY_LOCAL_MACHINE\\SOFTWARE\\Side Effects Software";

Source/HoudiniEngine/Private/HoudiniEngine.cpp

Lines changed: 44 additions & 29 deletions
Original file line numberDiff line numberDiff line change
@@ -372,6 +372,29 @@ FHoudiniEngine::GetSession() const
372372
return Session.type == HAPI_SESSION_MAX ? nullptr : &Session;
373373
}
374374

375+
HAPI_CookOptions
376+
FHoudiniEngine::GetDefaultCookOptions()
377+
{
378+
// Default CookOptions
379+
HAPI_CookOptions CookOptions;
380+
FHoudiniApi::CookOptions_Init(&CookOptions);
381+
382+
CookOptions.curveRefineLOD = 8.0f;
383+
CookOptions.clearErrorsAndWarnings = false;
384+
CookOptions.maxVerticesPerPrimitive = 3;
385+
CookOptions.splitGeosByGroup = false;
386+
CookOptions.splitGeosByAttribute = false;
387+
CookOptions.splitAttrSH = 0;
388+
CookOptions.refineCurveToLinear = true;
389+
CookOptions.handleBoxPartTypes = false;
390+
CookOptions.handleSpherePartTypes = false;
391+
CookOptions.splitPointsByVertexAttributes = false;
392+
CookOptions.packedPrimInstancingMode = HAPI_PACKEDPRIM_INSTANCING_MODE_FLAT;
393+
CookOptions.cookTemplatedGeos = true;
394+
395+
return CookOptions;
396+
}
397+
375398
bool
376399
FHoudiniEngine::StartSession(HAPI_Session*& SessionPtr,
377400
const bool& StartAutomaticServer,
@@ -491,16 +514,6 @@ FHoudiniEngine::StartSession(HAPI_Session*& SessionPtr,
491514
HOUDINI_CHECK_ERROR(FHoudiniApi::GetSessionEnvInt(
492515
SessionPtr, HAPI_SESSIONENVINT_LICENSE, (int32 *)&LicenseType));
493516

494-
// Indicate that Session Sync is enabled
495-
if (bEnableSessionSync)
496-
{
497-
FString Notification = TEXT("Houdini Engine Session Sync enabled.");
498-
FHoudiniEngineUtils::CreateSlateNotification(Notification);
499-
HOUDINI_LOG_MESSAGE(TEXT("Houdini Engine Session Sync enabled."));
500-
501-
UploadSessionSyncInfoToHoudini();
502-
}
503-
504517
return true;
505518
}
506519

@@ -568,9 +581,6 @@ FHoudiniEngine::SessionSyncConnect(
568581
//bSyncHoudiniViewport = HoudiniRuntimeSettings->bSyncHoudiniViewport;
569582
//bSyncUnrealViewport = HoudiniRuntimeSettings->bSyncUnrealViewport;
570583

571-
// Upload our session sync params to H
572-
UploadSessionSyncInfoToHoudini();
573-
574584
return true;
575585
}
576586

@@ -637,24 +647,13 @@ FHoudiniEngine::InitializeHAPISession()
637647
const UHoudiniRuntimeSettings * HoudiniRuntimeSettings = GetDefault< UHoudiniRuntimeSettings >();
638648

639649
// Default CookOptions
640-
HAPI_CookOptions CookOptions;
641-
FHoudiniApi::CookOptions_Init(&CookOptions);
642-
CookOptions.curveRefineLOD = 8.0f;
643-
CookOptions.clearErrorsAndWarnings = false;
644-
CookOptions.maxVerticesPerPrimitive = 3;
645-
CookOptions.splitGeosByGroup = false;
646-
CookOptions.splitGeosByAttribute = false;
647-
CookOptions.splitAttrSH = 0;
648-
CookOptions.refineCurveToLinear = true;
649-
CookOptions.handleBoxPartTypes = false;
650-
CookOptions.handleSpherePartTypes = false;
651-
CookOptions.splitPointsByVertexAttributes = false;
652-
CookOptions.packedPrimInstancingMode = HAPI_PACKEDPRIM_INSTANCING_MODE_FLAT;
653-
CookOptions.cookTemplatedGeos = true;
650+
HAPI_CookOptions CookOptions = FHoudiniEngine::GetDefaultCookOptions();
654651

655652
bool bUseCookingThread = true;
656653
HAPI_Result Result = FHoudiniApi::Initialize(
657-
&Session, &CookOptions, bUseCookingThread,
654+
&Session,
655+
&CookOptions,
656+
bUseCookingThread,
658657
HoudiniRuntimeSettings->CookingThreadStackSize,
659658
TCHAR_TO_UTF8(*HoudiniRuntimeSettings->HoudiniEnvironmentFiles),
660659
TCHAR_TO_UTF8(*HoudiniRuntimeSettings->OtlSearchPath),
@@ -683,6 +682,17 @@ FHoudiniEngine::InitializeHAPISession()
683682
// Let HAPI know we are running inside UE4
684683
FHoudiniApi::SetServerEnvString(&Session, HAPI_ENV_CLIENT_NAME, HAPI_UNREAL_CLIENT_NAME);
685684

685+
if (bEnableSessionSync)
686+
{
687+
// Set the session sync infos if needed
688+
UploadSessionSyncInfoToHoudini();
689+
690+
// Indicate that Session Sync is enabled
691+
FString Notification = TEXT("Houdini Engine Session Sync enabled.");
692+
FHoudiniEngineUtils::CreateSlateNotification(Notification);
693+
HOUDINI_LOG_MESSAGE(TEXT("Houdini Engine Session Sync enabled."));
694+
}
695+
686696
return true;
687697
}
688698

@@ -1028,12 +1038,17 @@ FHoudiniEngine::UpdateSessionSyncInfoFromHoudini()
10281038
void
10291039
FHoudiniEngine::UploadSessionSyncInfoToHoudini()
10301040
{
1041+
// No need to set sessionsync info if we're not using session sync
1042+
if (!bEnableSessionSync)
1043+
return;
1044+
10311045
// Set the Session Sync settings to Houdini
10321046
HAPI_SessionSyncInfo SessionSyncInfo;
10331047
SessionSyncInfo.cookUsingHoudiniTime = bCookUsingHoudiniTime;
10341048
SessionSyncInfo.syncViewport = bSyncViewport;
10351049

1036-
FHoudiniApi::SetSessionSyncInfo(&Session, &SessionSyncInfo);
1050+
if (HAPI_RESULT_SUCCESS != FHoudiniApi::SetSessionSyncInfo(&Session, &SessionSyncInfo))
1051+
HOUDINI_LOG_WARNING(TEXT("Failed to set the SessionSync Infos."));
10371052
}
10381053

10391054
#undef LOCTEXT_NAMESPACE

Source/HoudiniEngine/Private/HoudiniEngine.h

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -62,6 +62,10 @@ class HOUDINIENGINE_API FHoudiniEngine : public IModuleInterface
6262

6363
// Session accessor
6464
virtual const HAPI_Session* GetSession() const;
65+
66+
// Default cook options
67+
static HAPI_CookOptions GetDefaultCookOptions();
68+
6569
// Creates a new session
6670
bool StartSession(
6771
HAPI_Session*& SessionPtr,

0 commit comments

Comments
 (0)