Skip to content

Version 2.0.1 - Houdini 18.5.532

Compare
Choose a tag to compare
@dpernuit dpernuit released this 30 Mar 22:18
· 11 commits to Houdini18.5-4.26 since this release

Houdini Engine for Unreal - Version 2.0

Update 1 of the v2 plug-in.
The plug-in is now linked to Houdini 18.5.532 / HAPI 3.5.2.

Documentation for version 2.0 of the plug-in is available:
https://www.sidefx.com/docs/unreal/


New features:

  • Added support for setting/modifying per-instance custom data on instancer.
    The number of custom floats per instance can be set via the "unreal_num_custom_floats" attribute.
    The custom data itself can be set on the instances via "unreal_per_instance_custom_dataX" attributes, where X is the zero-based index of the custom float data.

  • Improved Houdini Engine Manager Ticking:
    Instead of processing each Houdini Asset Components one by one, in sequential order, per tick, we now additionally process the selected HACS and the active HACs for each tick.
    We also now continue the processing of the HACS when they are not in a "blocking" state.
    This greatly improves the time it takes to cook an HDA, especially when a lot of HDAs are present, in the level, by reducing the amount of ticks needed.

  • Improved Ticking: Added a time limit to HAC processing/ticking. The limit can be modified via HoudiniEngine.TickTimeLimit CVar.

  • New plugin setting: "Prefer Hda Memory Copy Over Hda Source File".
    When enabled, the plugin will always instantiate the memory copy of a HDA stored in the .uasset file instead of using the latest version of the HDA file itself.
    This helps ensuring consistency between users when using HDAs, but will not work with expanded HDAs. The memory copy can be updated by manually reimporting the HDA.

  • Added overrides for Static Mesh Build settings directly on the Houdini Asset Component.
    This allows overriding the default build settings values from the plugin settings per HAC.
    Additionally, this now also allows for changing those properties via generic property attributes (details).
    ie: i@unreal_uproperty_UseFullPrecisionUVs = 1;

  • It is now possible to preset geometry inputs with multiple assets when filling the object path value with multiple asset references, separated by semi-colons.
    Similarly, it is now possible to preset World, Landscape, and Asset types inputs by setting the object path parameter value to actor path/name.

  • Generic property attributes on details can now be applied to the Houdini Asset Component.
    This allows the use of detail attributes to preset some of the HAC's property (Cook Triggers, Auto-bake etc...)

  • It is now possible to decide whether or not a curve input adds additional rot/scale attributes.
    (the setting has been moved from the Houdini Asset Component to the Curve input).
    The default value for this can be changed in the plugin settings (the default is now to not add rot/scale)
    Editable curves no longer add additional rot/scale attributes.

  • Added support for generic property attributes on Landscapes.

  • Added a widget to indicate the status of the Houdini Engine Session to the details panel.

  • Added support for resolving level output paths with {hda_level} token during baking.


Bug fixes:

  • Fixed various issues with the "unreal_bake_folder" attribute:
  • "unreal_bake_folder" is now read from primitive and detail attributes on mesh, curve, instancer and landscape inputs,
    and cached in CachedAttributes on the FHoudiniOutputObject.
  • The specified BakeFolder no longer has to exist on disk to be considered valid.
  • The unreal_bake_folder no longer automatically sets the UI BakeFolder property on the HAC or PDG Asset Link.
  • The bake folder resolution order is now: primitive attribute first, then detail attribute,
    then BakeFolder on HAC/PDG UI and finally the default from the plugin settings.
    Updated the baking code to take this into account.
  • Added support for baking foliage to specified levels or sub-levels using "unreal_level_path".
  • "Bake to actors" now bakes unreal_foliage as foliage.
  • Added support for baking foliage to blueprint as HISMC.
  • Fixed index of out range when baking WC landscape/terrain and curve outputs with PDG
  • Fixed bug causing invalid transforms on Static Mesh Component upon multiple bake.
  • Fixed position offset on Landscapes due to Heightfield tiles having a slightly different size.
  • Baking: CenterActorToBoundingBoxCenter: exclude editor-only components from the bounding box calculation (such as the editor only billboard/sprite components)
  • Added the ability to copy the world transform in CopyPropertyToNewActorAndComponent
  • The component world transform is now set when baking to existing actors for SMC, single instance SMC and curves/spline components.
  • Calculate and cache certain landscape tile properties for the first tile for temp/bake workflow. Reuse cached properties for remaining tiles.
  • Invalidate landscape cache when TOP node is dirtied or all work items are cleared.
  • Cache global landscape data on TOP node after processing the first landscape tile. All subsequently processed tiles will use cached data.
  • Fixed Generic Attributes not being applied on the Houdini Asset Component like in Version 1.
  • Fixed GeneratedDistanceFieldResolutionScale Static Mesh Generation Property not being properly applied before building the Static Mesh.
  • Fix for landscape transforms when generating landscapes using PDG.
  • Fixed possible crash when duplicating HDA that contained multiparms.
  • PDG/commandlet: fixed an issue where CachedAttributes were not set on FHoudiniOutputObjects of PDG meshes imported via the commandlet.
  • HoudiniGeoImportCommandlet/HoudiniGeoImporter now also supports reading unreal_bake_folder from the individual output objects when importing in bake mode.
  • FHoudiniPackageParams: fixed an issue where the {temp}, {bake}, {out} and {out_basepath} tokens had the last sub-directory removed from their value
  • FHoudiniStringResolver: { and } in token values are replaced by __
  • Fixed bug with the "unreal_bake_folder" attribute: It no longer automatically sets the UI BakeFolder property. Its resolution order is now: primitive attribute first, then detail attribute, then BakeFolder on HAC/PDG UI, and finally the default from the plugin settings. The specified BakeFolder no longer has to exist on disk to be considered valid.
  • Fixed the unreal_output_name and unreal_bake_folder being ignored when baking instancers and the attributes were set on the instanced mesh.
  • Instancer baking: when a temp mesh is baked as part of an instancer, and the mesh has a mesh output on the asset, the mesh is baked with package params that are built from its FHoudiniOutputObject, taking into account the unreal_output_name and unreal_bake_folder set on the mesh itself, and not the values from the instancer (this matches what foliage baking is doing as well).
  • Baking: Set PackageParams.bAttemptToLoadMissingPackages to true when baking in EPackageReplaceMode::CreateNewAssets mode. This is needed since FindPackage can return null if a package is not in memory even if it exists on disk. So in such cases, we have to also call LoadPackage to check if a valid package already exists on disk.
  • PDG Commandlet: re-using existing temporary results is problematic when the commandlet is used since the node and geoids can change every time the commandlet imports or re-imports a result. So now if we receive a new work result object (where an existing object is already loaded) via the commandlet we first unload the existing object before loading the new object.
  • HAC output cleanup: simplified the checks for the base/parent component when cleaning foliage in FHoudiniOutputTranslator::ClearOutput to check if the output's owner is a HAC, otherwise try the foliage component's outer.
  • PDG: Fixed a bug where DestroyResultOutputs didn't destroy the output components.
  • PDG: Improved tracking/reuse of previous PDG WorkItem results
  • PDG: When a node has successfully cooked all of its work items, call a function to check that the node's WorkResults array is in sync with the work item IDs from HAPI. This helps in cases where work item counts change, but WORK_ITEM_REMOVED events are not received (such as when doing node rebuilds, manually deleting the node in session sync, or reloading the map where the loaded asset link is then no longer linked to the node in the Houdini Engine session). Currently, this just affects the entries in UTOPNode::WorkResults, the issue where WorkItemTallys are sometimes out of sync has not yet been resolved.
  • PDG: when looking for a FTOPWorkResult object in the TOP Node's array, if an entry with the given WorkItemID does not exist, try to find an entry with matching WorkItemIndex and WorkItemID == INDEX_NONE (invalid entries or entries that had IDs cleared upon save/load of the map).
  • PDG: FTOPWorkResultObjects were given a name that was always the same (for each FTOPWorkResultObject in a FTOPWorkResult) and this name was used to match a FTOPWorkResultObject for re-use. This has now been changed to include the index from the HAPI ResultInfo array to make the name unique. When work item results are processed, any old FTOPWorkResultObjects that were not re-used are destroyed (and have their old output objects removed and destroyed).
  • Baking: PDG: track previous bake outputs using the WorkItemIndex (from HAPI),
    not the array index in the UTOPNode::WorkResults array or the WorkItemID.
    The WorkItemIndex is more stable/deterministic than the other two options.
    Perhaps we can add support for a custom attribute to work items to help with reliably identifying the same item/object in subsequent cooks and bakes.
  • Fixed visibility layer issues with tiled landscapes.
  • PDG Auto-Bake: Use the WorkItemHAPIIndex and WorkResultObjectIndex to identify the work item and result object to bake.
  • PDG Auto-Bake: when auto-baking also apply the selection option (All vs Selected Network vs Selected Node)
  • Baking: Actor names: fixed an issue where if unreal_bake_actor is set to test_1, incremental baking would generate test_2 (if test_1 already exists)
    instead of test_1_1. Also use our own loop instead of MakeUniqueObjectName, to generate more consistent and continuous ranges (MakeUniqueObjectName increases a counter per class).
  • Baking PDG: we now pass in all the actors baked in the current bake run all the way through to work result object baking (previously an empty array was always passed to BakePDGWorkResultObject)
  • PDG: Fixed the work items tallies reporting incorrect numbers.
  • FHoudiniPackageParams: removed bAttemptToLoadMissingPackages: in CreateNewAssets mode we now always check if a package exists on disk (using LOAD_Verify) if FindPackage returns nullptr.
  • Removed redundant for loops when updating generic attributes on instancers.
  • Fixed the "unreal_output_name" attribute being ignored on landscapes.
  • Fixed geometry input's defaults value (object path inputs) being ignored.
  • Fixed potential endless cook loop when using Session Sync.
  • Fixed a lost session failing to be reported if HARS/Houdini crashed/was shutdown before instantiating an asset.
    This could lead to an instantiation loop.
  • Fixed the Houdini Engine status sometimes being incorrectly reported.
  • Fixed bugs when using foliage instancers:
    Previous foliage instances were not always properly cleaned up when directly instancing FoliageTypes, or when switching from foliage instances to "normal" instances.
  • Updated the path that is used to find the Houdini executable on Linux for session sync, tested on Ubuntu 20.04 and Houdini 18.5.499.
  • Updated the path that is used to find the Houdini executable on Mac for session sync.
  • Fixed a crash/memory leak with UHoudiniFloatRampCurve and UHoudiniColorRampCurve from the parameter details when there is
    an attempt to destroy the owning UHoudiniParameter or its world (while the curves are still in the root set)
    or if the curves are destroyed but the SCurveEditors still reference them as CurveOwners.
  • Fixed an issue where static mesh material slots were appended over and over when recooking HDAs that output collision meshes with materials.
  • Fix up complex collision properties when outputting a static mesh.
  • The first invisible complex collision mesh is treated as implicit, i.e. it will not be explicitly created as a component.
  • Fixed extra "ghost" curve appearing with HDAs that contained closed editable curves, either upon duplication, or first cook after loading a level with the HDA.
  • When rebuilding an HDA editable output curves (HoudiniSplineComponent) are now marked as changed/trigger update,
    so that the curve on the Houdini side is updated/kept in sync with the edited values in Unreal.
  • Fixed Multi-parm instances being replaced with the first instance when rebuilding/cooking a loaded HDA actor. (when opening a map and cooking for the first time, for example)
  • Fixed possible crash (Bad MeshDescription) when an HDA generates invalid output mesh data.
  • MeshTranslator: Fix crash if main Static Mesh didn't have a BodySetup.
  • FHoudiniOutputTranslator::UpdateLoadedOutputs: don't skip closed editable
    output curves that are identified as meshes: HAPI treats closed curves as meshes, not curves.
  • Fixed issue where RawMesh LODs would get incorrect material assignments.
  • Fixed bug preventing the modifications of RVT via generic uproperty attributes
  • Generic Attributes: Fixed bug when assigning single value to array property
  • Generic Attributes: Added log infos when properties are incompatible or when we cannot find valid ValuePtrs for the UProperties.
  • Recook now also resend the input objects to Houdini.
  • Added persistent notification mechanism to prevent notification spamming during cooking.
  • PDG Auto-bake: we now auto-bake a node once all work items of the node are
    complete (but we still support baking additional dynamically generated work
    items automatically if they come in later)
  • World Inputs now detect added/removed components on an actor used as a world input and trigger an update.
  • Fixed world inputs auto-starting the Houdini Engine Session when a camera object was selected.
  • Merged PR#101 on behalf of dearamy: Fix Misusing of Y and Z
    This fixes incorrect terrain output scale.
  • Merged PR#122 on behalf of eliiik: Fix Houdini Spline visualization rotation and scale error
    This fixes invalid Houdini Spline rotation/scale when the Actor has been scaled/rotated.
  • Fixed HARS/Houdini crashing when sending additional rot/scale attributes on editable curves.
  • Fixed Editable curves not displaying the proper curve points upon instantiation if the editable curve was set with 2 points or less.
  • Prevent crashes when the user tries to set per instance custom data via generic attributes.
    We now skip the attribute and log a warning that indicates the proper attributes to use.
  • The PhysicsState, RenderState, and Bounds of the HAC and its children are now properly updated upon recook.
  • Fixed HoudiniAssetComponent being ignored by editor ray tracing due to the HAC not having a SceneProxy in the SceneManager.
    This fixes issues like surface snapping not working with Houdini Generated Static Meshes.
    This only applies to "refined" static meshes, the temporary HoudiniStaticMeshComponents still don't have collisions.
  • Fixed folders sometimes losing their selected (tabs) / expanded (collapsible) by improving the reuse of parameter objects.
    The lookup table (by name) that we use to find previously created parameters can now store multiple parameters,
    as it is sometimes possible to have two parameters with the same name (ie: Folder/FolderList).
  • Fixed crash when importing Landscapes via the PDG Asset Link.
    This was caused by FHoudiniEngineUtils::GetOuterHoudiniAssetComponent() not returning a HAC if it wasn't the direct outer of the object.
    For PDG outputs, the output's outer is actually the PDG Asset Link, not the HAC.
  • Fixed crash when attempting to visualize a curve with no CV points but with display points.
  • Fixed curve inputs losing their type/method/closed/reversed properties after losing/restarting the Houdini Engine Session.
  • Added missing includes/forward declarations for NoPCH/Non-Unity builds