Houdini Engine for Unreal
 All Files Pages
Outputs

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.

Static Meshes

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.

Unreal_OutputMeshDetails.png

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.

Unreal_OutputMeshDetails.png

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.

Instancers And Foliage.

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.

Unreal_OutputInstances.png

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.

Landscapes

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.

Unreal_LandscapeDetails.png

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.

Tables

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 attribute names following the prefix start with an integer followed by an underscore, that integer will be treated as the index of the variable to match with.
    • The variable at that index must have an identical name to the attribute name with the prefix and index (including the underscore).
      • For example, the attribute unreal_data_table_2_type will be matched with the second variable of the row struct if its name is type. It will not be matched if the name is not type.
  • If no index is present in the attribute name, it will be matched with any variable that shares the same name after the prefix.
    • For example, the attribute unreal_data_table_type will be matched with a variable of the row struct with name type. If no such variable exists, it will not be matched.
  • If no match is found, the attribute will be skipped.
  • The attribute type and the matched variable type must satisfy the following constraints:
    • The variable type must be one of the following:
      • Any numeric type
      • Vectors
      • Rotators
      • Transforms
      • Colors
      • Linear Colors
      • Strings
    • They must have the same number of components (they are both single values, or are tuples of the same size).
      • Rotators have 3 components, transforms have 10 (4 component quarternion, 3 component scale and translation), colors and linear colors have 4.
    • If the attribute type does not exactly match the variable type, one of the following must be true:
      • They are both numeric types (in which case the attribute values will be forcefully converted to the variable type and overflow may occur).
      • The attribute is numeric and the variable is a string type (String, Name, or Text).
  • Transforms are handled as a special case. Attributes will be matched to a variable with a transform type only if there are 3 separate attributes with the standard name, but appended with *_rotation*, *_scale*, and *_translate*. The rotation attribute must be a tuple of size 4, and the others must have size 3. This reflects the way transform variables are converted to Houdini attributes when a data table is used as a geometry input.

If the row struct does not already exist:

  • Transform variables will be created if 3 attributes match the naming pattern described above.
  • Otherwise, a variable will be created for each attribute with the prefix.
    • The best matching Unreal type will be used. For tuples, generic vector types will be used.
    • Tuple sizes cannot exceed 4.

Spline Component

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.

Templated Geo 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.

Note
Currently, guide geometries are not supported, but only nodes with the templated flags.

Mesh Build Settings

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;