Version2 - Alpha3
Pre-releaseAlpha3 update
The plug-in is now linked to Houdini 18.0.499 / HAPI 3.3.11.
New Features:
-
Added support for the PDG Asset Link:
See below for more details. -
Updated and improved support for World Composition
See below for more details. -
Parameters:
Added support for Log Float and Log Int Parameters.
Improved UI for Tabs folders and radio button folders. -
Added support for landscape material/hole material in the output details:
material update via the ComboBox/drag & drop, and reset the material to its default value. -
Physical Materials can be set on landscape/per landscape layer when using the "unreal_physical_material" primitive attribute.
-
It is possible to "pre-assign" landscape layer info object when using the "unreal_landscape_layer_info" primitive attribute.
The attribute value must point to a valid LandscapeLayerInfoObject reference.
The LayerInfo should have the same "LayerName" as the Landscape Layer.
Since this attribute is only used when the landscape is created, it should be present and valid on first cook.
It will be ignored if changed on recook, unless if the output landscape actor is deleted first before the recook. -
Input: Added "import as reference" for geometry, asset, and world inputs.
This allows importing the selected asset/actors as "unreal_instance" references. -
Added clear Button for Landscape inputs.
-
Added a "Disable input" button on when there is no input selected for Asset and Landscape inputs.
-
Material parameter attributes are now imported when importing meshes.
(we currently support scalar, vector and texture parameter types) -
Added back support for assigning actors to output mesh sockets.
-
Added the ability to assign a reference to an asset in the content browser to output mesh sockets.
The referenced asset will be instantiated and assigned to the socket.
The created actors will be destroyed when the actors are re-created, or when the HDA is deleted. -
When an asset referenced by an attribute instancer ("unreal_instance") or for socket assignment could not be found,
the plugin will now create a default "asset not found" box mesh (hidden in-game by default).
This can be enabled/disabled by default in the project settings. -
The "unreal_foliage" attribute is now also supported on point, and as a float parameter.
(was only supported as integer, primitive or detail attribute before). -
When using a string parameter as an actor picker by using the unreal_ref, it is now possible to filter the classes displayed by the actor picker by using the unreal_ref_class tag.
(On behalf of Robmeister regarding issues #24 and #23, Thank you!) -
UI improvements to String parameters when in "asset ref" mode:
- Display the class/color used for filtering assets on the thumbnail.
- Show the selected object name in the combo box.
- Show the full string value (asset ref) as a tooltip. -
Added support for outputting templated geos
- Templated geos are outputted using a specific, wireframe, default material.
- Templated geos are not baked, and are hidden in-game by default.
- Display geos are never considered templated.
- Only templated meshes are supported.
- Added an "output templated geos" checkbox to the asset options to enable/disable this. -
Added support for importing Camera Components on Actors as camera OBJ node.
This is mostly experimental. -
Added the ability to instantiate a class when using the "unreal_instance" attribute.
Instead of referring to an asset in the CB, we now also allow to directly instantiate a class
(ie "PointLight", "AudioVolume"... )
This is especially useful when wanting to instantiate a class that cannot be saved as an asset in the content browser, and removes the need to create a BP for that.
This will succeed as long as that class can be placed as an actor. -
Added the "Set from Content Browser" arrow on Geometry inputs, and output materials.
(pick the first selected SM); -
Added: Curve Input UI: added 'editing' Text to the input curve which is currently being edited.
-
Added support for the "unreal_level_path" attribute to Meshes and Instancer:
When baking, this allows the user to specify the path to a level where the baked Actors will go.
If the level doesn't exist, then the level and its package will be created.
This allows moving meshes and instancers to the appropriate levels when using PDG and/or World Composition. -
Added the ability for Geometry Input to import StaticMeshComponents found in BP.
-
Added support for SessionSync:
- Added a new menu command to open Houdini in Session Sync mode and directly connect to it.
Connection is handled by an async task, that connects as soon as the SessionSync session is available.
- We only launch Houdini in Session Sync mode if it's not already running.
If we've previously started Houdini in SessionSync, we just reconnect to the existing process
- Added SessionSync default settings:
- SyncWithHoudiniCook: when enabled and connected to a Session Sync session,
Unreal will update after a change has been made in Houdini.
- CookUsingHoudiniTime: controls if the plugin should use the Houdini timeline time when cooking.
- SessionSync features are only enabled if we're connected to a SessionSync session.
Auto-started session (using HARS) ignore SessionSync features.
- Added menu entry to close the current Houdini Session Sync.
PDG Asset Link:
The plugin now has a PDG Asset Link, similar to the one used by the Unity plugin that allows cooking and fetching results from PDG Graphs embedded in HDAs.
A PDG Asset Link is automatically created when importing an HDA that contains a TOP Network.
The PDG Asset Link UI will list all the TOP Networks available in the HDA.
It will also display all the TOP Nodes available for the currently selected TOP Network, as well as controls to dirty, cook them...
To avoid displaying all the nodes in a TOP Network, the PDG Asset Link uses a filter that specifies a prefix for the node names to decide if they should be listed by the PDG asset link.
By default, the filter is set to "HE_", so only nodes that start with HE_ will be listed in the PDG Asset Link: HE_Terrain, HE_Trees, etc...
Similarly, nodes that produce output BGEOs that should be processed and created in Unreal can be specified via a TOP Output filter prefix.
By default, the filter is set to "HE_OUT_", so the PDG Asset Link will only try to load Work Item Output files that are created by nodes that start with this prefix: HE_OUT_Trees, HE_OUT_Roads, HE_OUT_Buildings...
Those filters can be modified or disabled in the PDG Asset Link UI.
When cooking the PDG Graph, the PDG Asset Link will automatically import Work Items output files that have successfully cooked on the TOP Output Nodes.
The results are loaded on actors that reproduce the PDG Graph's hierarchy:
TOP NETWORK
- TOP NODE
- WorkItem Output File
Despite not being attached to the HDA, it is important to note that "Cooked" PDG results are still considered temporary, like normal HDA outputs would, and are still owned by the Houdini Asset Actor until baked.
This means that dirtying or changing the PDG asset can potentially destroy or update them, and destroying the Houdini Actor will also destroy them.
The PDG Asset Link has its own "bake" section, which gives more control in deciding what/how the PDG graph's results are baked.
You can choose whether to bake all outputs, only the selected top network, or selected TOP node. You can decide if you want to replace existing assets and actors created from a previous bake or create new ones...
In this current Alpha, these work items output files are NOT loaded asynchronously.
Asynchronous loading of PDG output files will be added to the plugin in later updates.
World Composition:
World Composition support has been completely updated and redesigned and is now supported only when baking.
When baking tiled landscapes in a world with world composition enabled, the plugin automatically creates or updates the levels needed for the tiles. When cooking the HDA, the generated landscape tiles remain attached to the HDA Actor to provide visual feedback and fast iteration.
The following attributes can be used on the HF to control World Composition baking:
- the "unreal_landscape_tile_actor_type" primitive, int attribute can be used to decide if LandscapeStreamingProxies should be created when baking. When set to 1, Landscape streaming proxies are created. When set to 0, landscape actors are created. This replaces the "unreal_landscape_streaming_proxy" attribute used in v1.
- Individual landscape tile actor names can be set using the "unreal_output_name" attribute.
- The "unreal_level_path" attribute can be used to set the name and path to the levels that will be generated for the landscape tiles.
- When generating landscape streaming proxies, the "unreal_landscape_shared_actor_name" primitive, int attribute can be used to specify the name of the common, shared landscape actor that controls all the streaming proxies.
- "unreal_landscape_layer_min" and "unreal_landscape_layer_max" can be used to specify the min and max values to be used when converting HeightField masks or height values.
Output attributes
The plugin now has the ability to process a set of output tokens (keywords in curly brackets) that can be used on certain attributes to make path and name more dynamic.
They are still in the process of being added to the plugin and are mainly used now for the "unreal_output_name" and "unreal_level_path" attributes to control the naming and path of the output objects generated when baking for world composition, or PDG.
This s a list of some of the currently supported attribute tokens:
{world} - Path the directory that contains the world.
{hda_name} - Name of the HDA
{hda_actor_name} - Name of the Houdini Asset Actor
{object_name} - Name of the Object
{guid} - GUID of the HDA component
{out} - The output directory (varies if cooking or baking the asset)
{pdg_topnet_name} - Name of the TOP Network that generated the output.
{pdg_topnode_name} - Name of the TOP Node that generated the output.
{pdg_workitem_index} - Index of the WorkItem that generated the output.
{tile_i}- Tile number, available on tiled Heightfields.
{geo_id} - ID of the geo node used by HAPI to create the result.
{part_id} - ID of the Part that created the output.
{split_str} - Split string used to identify the output.
Some examples:
unreal_level_path = "{world}/Landscape/Tile{tile_i}"
unreal_output_name = "{hda_actor_name}PurplePlants{geo_id}_{part_id}"
unreal_level_path = "{out}/{hda_name}/{guid}/PurplePlants/{geo_id}/{part_id}"
Bug Fixes:
- StaticMeshes imported by bgeo files can now be reimported.
- Fixed undo/redo bugs with inputs.
- Fixed clearing input objects not deleting their Houdini nodes
- Fixed changing input type causing a HAPI error (invalid node id).
This happened when changing input types, from a type with more input objects to one with fewer objects. - Fixed landscapes not recooking if their height volume wasn't the first one added to the output.
- Fixed recooking an HDA that created a landscape actor creating a new one upon recook instead of reusing the previous actor.
- Improved how the output translator processes volume outputs (Heightfields).
- Fixed GUID not properly recreated when creating temp assets when baking in the "CreateNewAssets" mode.
- Fixed tiled landscapes using the same package params (not per tile) if world composition wasn't enabled.
- Fixed Curve not being deleted when undoing an input type change if the input contained only the default curve object.
- Fixed a crash/exception thrown when trying to access a HoudiniLandscapePtr's raw pointer during Garbage Collection.
This generally happened when clearing the scene after loading/creating a new level when the current map had an HDA that generated landscapes. - We now check for path validity when cooking/baking:
we use the default if the attribute path is invalid, set back to the previous if the input path is invalid. - Fixed overriding temp/bake folder with default/attrib if the temp/bake folder is specified by the user via the details UI.
- Fixed temp/bake folder now supports both absolute path, and Game Project relative path.
- Fixed Radio folders not properly working.
- Fixed naming discrepancy for LandscapeLayerInfoObject when dealing with landscape tiles.
- Fixed Editable curves being reverted back to default after duplication.
- Fixed crash when cleaning the temp folder caused by searching in an empty folder.
- Fixed Default Input curve component being visible (and dummy) right after being initialized.
- Fixed: World input UI:
- when on Bound Selection mode, clear selections clears the selected bound actors.
- The 'select all' button is disabled in Bound Selection mode.
- recook not being triggered after changing the selection mode. - Fixed the "unreal_landscape_layer_nonweightblended" attribute not being properly taken into account.
- Fixed Heightfield rotations not being properly applied to generated Landscapes.
- Fixed bug with undo/redo when editing multiple objects.
- Fixed landscape output position issues when using SOP/Object Merge inputs:
This was caused by the landscape being attached using "KeepWorldTransform" instead of "KeepRelativeTransform". - Fixed position issues when recooking a landscape HDA.
This was caused by SetActorTransform acting differently if the landscape was attached to the HDA (recook) or not (first cook).
Since transforms are relative to the HDA anyway, use SetActorRelativeTransform instead. - Fixed tiled landscapes having a transform issue when switching from single tile output to multiple tile outputs:
We now always update the transform, even if the HGPO transform hasn't changed, as the converted unreal transform might be different due to the height conversion. - Fixed naming issue with the current selection on landscape input.
- Fixed: Output mesh socket: socket names are made unique, otherwise UE uses the first socket for assignment if multiple sockets use the same name.
- Fixed Landscape input not properly filtering their HDA's landscape outputs.
- Fixed "Update Input Landscape" not working properly after the World Composition update.
- Fixed Input Landscapes that have "Update Input Landscape" enabled being incorrectly filtered out by the Landscape Input UI.
- Reduced the log spam caused by HoudiniEngine.Build.cs (Issue #16)
- Fixed corrupted text (Chinese characters) being displayed in the log when CreateNode failed/cooked with errors.
- Fixed manual proxy mesh refinement not doing anything under specific conditions. (when the output objects did not change)
We now force rebuild the meshes when refining Mesh proxies. - Fixed a crash that happened after losing the HE session during a task (cook, instantiate...)
This was due to the plugin attempting to display a slate notification while in a background thread. - Fixed the "unreal_material" attribute incorrectly creating material instances instead of reusing the referenced material directly.
- Optimized/Fixed error spamming when fetching instancer materials:
We're not attempting to load the assigned material multiple time (once for each instance), but once for each material instead.
This removes the error spamming when the material referenced is invalid. - Fixed warning spam for "Invalid override bake path" and "Invalid override temporary cook path"
when the HDA doesn't have any temp/bake folder override attributes. - Fixed "Cannot ClearRefineMeshesTimer, World is nullptr!" error spam.
- Parameters are now fully updated when rebuilding/recooking an HDA.
This fixes some issues, like parameter tags not being updated upon recook/rebuild. - Fixed missing "#undef LOTCTEXT_NAMESPACE" in a few files.
- When baking, Static Meshes and materials are now only duplicated/baked if they are temporary.
(if they are still in the HDA's output objects, or in the HDA temp folder, or in the default temp folder)
This applies to all types of baking (to Actors/BP/Foliage). - Fixed baking all types of Instancers to Blueprint.
(ISMC, HISMC, MSIC, IAC) - Packages generated when baking are now all saved together (once).
- Fixed some asset options not triggering a recook of the HDA after being changed:
do not generate outputs, cook on transform change, push transform to Houdini, output templated geos - Fixed a bug that prevented baked actors from being deleted
(this was due to baked actors not being created using the RF_Transactionnal flag somehow) - When baking to actors, Components are now properly duplicated instead of being recreated.
(this allow preserving changed properties on the components) - Fixed HDA not recreating/updating their meshes after toggling "Do not generate outputs"
- The default Houdini Logo mesh is now always hidden in-game.
- Fixed object merge inputs creating node using an invalid name ("input-1" instead of using the parm's name)
- Fixed missing default component values on HoudiniAssetComponent.
ie: mobility is now set by default to static etc. - Assets bounds were not properly updated, causing issues when focusing ('F') on the HDA.
The asset bound is now updated using all Inputs, Outputs, including Input param types and editable outputs. - Fixed: Input/editable curve: The curve Type, Method, and closed parameters were not set when initializing them.
- Fixed UI bugs with parameter layout/indentation.
- Fixed crash when resolving the output string attribute.
- Fixed "package none" error spam when using a class filter on string parameters set in asset picker mode.
- Fixed world input's spline resolution's default value not being set to 50 like in v1.