Houdini Engine for Unreal
|
Houdini Engines for Unreal currently supports outputting four types of geometries from Houdini Assets:
Geometries are outputted from the nodes that currently have the display flag set. For SOP-type assets, the geometry will be outputted from the display SOP node within the sub-network. For Object-type assets, the display node of each Object sub-network will be outputted.
By default, the plug-in does not use the output nodes, but will output the geometry of the nodes that have the display flag. If you enable the "use output nodes" checkbox in the asset options in the details panel, the plugin will use the HDA's output nodes, and will only use the display flag node if no output nodes are found.
Most Houdini assets will produce Static Meshes upon cook. The generated Static Meshes Components corresponding to the display nodes will be attached to the Houdini Asset Actor, and listed in the Houdini Outputs section in the details panel. They can be baked in order to separate them from the asset and convert them to standalone Static Meshes available in the content browser.
The Houdini Outputs section will also display the materials assigned to each generated meshes, and give you the option to override them either by drag and dropping or selecting a Material in the drop down list.
Generated meshes can also have colliders and sockets assigned to them. Those can be visualized in the Static Mesh Editor by double clicking on the mesh thumbnail in the Details panel.
For more information on the mesh generation mechanism, please consult Meshes.
In version 2, Static Mesh creation time has been optimized and now uses Mesh Descriptions. You can also decide to use an even faster Proxy Mesh generation while editing the HDA. The ProxyMeshes can be automatically refined to Static Mesh, either on a timer, when saving/playing the level, or manually. To enable them, tick "Enable Proxy Mesh" in the project settings.
Proxy Meshes were added to provide a faster visual feedback when modifying an HDA, but are no mean considered as an asset's "final" output. They will only create their main level LOD, and won't have any colliders, and cannot be instanced.
You can clearly see that an HDA is using proxy meshes, as each of its proxy will display a Houdini Logo sprite.
In order to easily separate multiple meshes in your output, you can simply pack each mesh into a pack primitive before merging thenm in your asset's output. Packed primitives are normally used for instancers, but in Version 2, a single pack primitive will always create a Static Mesh instead of an instancer with one instance.
The unreal_output_name attribute can be used to set the output mesh's name.
When using packed primitives or attribute instancers, Houdini assets will produce Instanced Static Mesh Components. All the instancers will be listed in the Houdini Outputs sections of the details panel, and labeled "instancer". In a similar way as Static Meshes, if the instanced static geometry was produced by the asset, it will also be listed in the Houdini Output Mesh section. It will be labeled as "instanced" to indicate that the mesh is used by oner of the instancer in the HDA's outputs.
The unreal_output_name attribute can be used to set the output instancer's name.
For more information, please consult Instancers.
In version 2, you now also have the ability to directly create Foliage instances instead of Instanced Static Mesh Components. For that, you will need to add the unreal_foliage int attribute to your instancer, and set its value to 1. If not already existing, new foliage types will be created for the instanced meshes, and the instances added to the current level's foliage actor. When modifying the HDA, the plugin will only modify/update the foliage instances it created, and will not modify or remove manually placed foliage instances.
If your asset outputs one or multiple Heightfield node, then the resulting geometry will be created directly as a Landscape in Unreal.
Generated Landscapes and their materials will be listed in the Houdini Outputs section in the details panel.
The unreal_landscape_tile_actor_type attribute can be set to 1 in order to tell the plugin that it should create LandscapeStreamingProxies and a SharedLandscapeActor instead of multiple Landscape Actors. In version 1, the unreal_landscape_streaming_proxy primitive / detail int attribute was used for a similar purpose.
The unreal_output_name attribute can be used to set the output landscape actor's name. When using streaming proxies, the proxies' shared landscape actor name can be set using the unreal_landscape_shared_actor_name attribute, and the unreal_output_name attribute will control the proxies' names.
For more information, please see Landscapes.
If an HDA output is a Houdini point cloud, it will generate an Unreal DataTable when added to the scene. The DataTable will be populated according to the point cloud's attributes.
The Unreal struct to use as the basis for the data table is determined by the value of the unreal_data_table_rowstruct attribute of the points. The value of the first point will be taken. The value should be a string representing a valid Unreal path (where /Game represents the Content folder). If the specified folder is valid, but the specified struct does not exist, it will be created with variables populated according to the remaining attributes.
The string that will be used as the row name (key) for each row of the data table is determined by the unreal_data_table_rowname attribute of the points. If no such attribute is given, the row names will be defaulted to NewRow_x where x is the index of the row, starting at 0.
The data table will be saved at the string specified by the unreal_object_path attribute. The string at the first point will be taken. This path should be a valid Unreal path (where /Game represents the Content folder). If no path is specified, a name for the data table will be automatically generated and it will be saved in the HoudiniEngine/Temp folder. If the specified data table path already exists, it will be overwritten.
Any other attributes that start with unreal_data_table_ are candidates to use for populating the data table. If the row struct for the data table already exists, these attributes will be matched to the variables of the row struct. Otherwise, variables will be added to the newly created row struct based on these attributes.
Point clouds generated by inputting a data table into Houdini as a geometry input will generate an identical data table when added to Unreal (with the exception of unsupported types that were converted to strings in Houdini, the values of these will be skipped).
If the row struct already exists:
If the row struct does not already exist:
In version 2, it is now possible for HDA to output curves as Spline Components. To do so, add the unreal_output_curve int attribute to the curve, with its value set to 1.
For more information, please consult Curve Output.
In version 2, when the Output Templated Geos asset option is enabled, the plugin has the ability to display an asset's templated geos. This can be used to display helper geometry used to produce the HDA's output, without actually creating an actual output.
Templated geos outputs use a specific wireframe default material. They will not be baked, and will be hidden in-game by default. Only templated meshes are supported, and display geos are never considered templated.
A number of properties that control the behaviour/creation of the generated Static Meshes (like the default collision presets, the use of MikkTSpace, Distance Field etc..) can be modifed directly on the details panels.
Those properties are normally found in the Static Mesh Components details, or in the Static Mesh Editor. They are listed under "Static Mesh Generation" in the Houdini Asset's details, as "Static Mesh Generation properties" and Static Mesh Build Settings".
They allow overriding the default build settings values set in the plugin settings per Houdini Asset Component. Additionally, they can also be modified procedurally via attributes by using generic property attributes (detail attributes only).
ie: i = 1;