On this page

Houdini Engine for Unreal supports both the Input and Ouput of Landscapes. You can also output landscapes to the World Composition system.

Note

Currently, Houdini Engine plugin doesn’t support the Landscape Edit Layers, but only the material/paint landscape layers.

Input

Landscapes can be imported to Houdini by using a Landscape Inputs and World Outliner Inputs.

The landscape’s height and layer data is in Houdini as a heightfield (or as a point cloud or mesh if you selected the corresponding option in a world input).

If the landscape is exported as a heightfield, all the landscape layers are masks on the heightfield node. The input’s landscape’s tags are imported as primitive attributes, prefixed with unreal_uproperty_tag_, followed by the tag’s name. Theses attributes recreate the imported tags when outputting the heightfield back to Unreal.

Output

Landscapes can be generated by your HDA if the output node contains Height Field primitives. Each Height Field primitive present in the output is converted to a Landscape by the plug-in. The height primitive controls the landscape geometry, and all the additional Height Field primitives (mask, mesa, and cliffs) on the landscape as Target Layer.

Creating or modifying landscapes

By default, the Houdini Engine plugin will treat each Output in an HDA is a unique Landscape which will be created. The plugin can also modify existing landscapes. This is controlled by an attribute on each primitive in the HDA Output:

If you set the unreal_landscape_output_mode to 0, it generates a new landscape. Set it to 1 to modify an edit layer on an existing landscape.

The name of the target landscape actor in both modes can be specified with unreal_output_name. When modifying existing landscapes the special name Input<N> can be used to specify that the output will be the <N>th input sent to the HDA; this is particularly useful when using Houdini to modify existing landscapes. The default name is Landscape.

Unreal landscape layers

Unreal uses two kinds of Layers in its Landscape system

Target Layers control different properties of a Landscape. These are Paint Layers, Visibility Layers, and Sculpt (or height) Layers.

Edit Layers seperate different Landscape Layers into user-controllable layers which can be built by the user.

The Houdini Engine plugin makes extensive use of Edit Layers during cooking to build up temporary Landscape data which can be viewed and disabled in the Unreal Editor. Previous versions of the Houdini Engine plugin used temporary Landscape Actors during cooking, but this is no longer support as it does not work with World Partition.

After cooking, the plugin generates an Edit Layer for data found during cooking. During Baking, these temporary layers are removed and the final layer is generated. The name of the Baked Edit Layer can be specified with unreal_landscape_editlayer_name.

The name of each Target Layer is taken directly from the name of each Primitive in Houdini. height is used to specify the height layer,visiblitycontrols the visibility layer and other layers are assumed to be paint layers.

Note

For the holes to be visible in editor, you need to use a landscape material that uses the Landscape visibility mask node as its opacity mask.

Unreal requires all Landscape Layer Info Object to be saved to a file, by default the generated layers for a landscape will be saved in the HoudiniEngine/Temp folder in the content browser. When saving your level, make sure that these landscape layer asset are saved as well.

You can specify/assign an existing Landscape Layer Info Object by using the unreal_landscape_layer_info string attribute, with the value set to an existing layer info asset’s reference.

Locking and Unlocking Edit Layers

By default the plugin will not write to locked Edit Layers and leaves modified Edit Layers unlocked after cooking and baking.

If the attribute unreal_landscape_write_locked_layer is present and set to 1 then the plugin will write to locked layers.

If the attribute unreal_landscape_lock_layer is present and set to 1 then the plugin with lock edited layers after pocessing.

Both attributes can be specified for a single layer.

Properites & Tags

If the heightfield has unreal_uproperty_tag_X primitive attributes, these attributes' values are used for the resulting landscape Actor’s Tags.

Note

If you are using time-dependent nodes like Heightfield Erode, make sure to use a timeshift node after it to set the time properly. The plug-in won’t let you set the frame used by an HDA. Since the frame parameter of the timeshift node has its default value set to $F, make sure to remove the keyframe on it. Use CTRL) or by selecting remove keyframe in the channels and keyframes context menu as Houdini Engine has its frame value set to 1.

If the heightfield has unreal_uproperty_X detail attributes, it applies to Tile Actors and Shared Landscape actors. If the height field has point or primitive unreal_uproperty_X attributes, it only applies to the respective landscape tile actor. Point/primitive attributes has to be on the _heightfield_ primitive in Houdini. UProperty attributes on non-heightfield primitives will be ignored.

Data conversion

As Unreal uses 16-bits integers for Landscapes and Houdini uses 32-bits floats to represent the height values, the data needs to be converted. This results in a small precision loss when creating Landscape from a Heightfield.

By default, Landscapes generated by Houdini Engine uses 3/4 of the available 16 bits range for conversion. This allows you to sculpt the landscape past its min/max values afterwards in Unreal.

If you would rather use maximum precision for the data conversion, activate the Marshalling Landscapes Use Full Resolution setting in the Geometry Marshalling section. For example, a 4km high landscape will have a precision (on the Z axis) of 8.13 cm by default, or 6.10 cm if that option is activated.

You can also use the default unreal conversion values in the plugin settings, by enabling the Use default Unreal Scaling option in Geometry Marshalling. This likely results in a precision loss during the conversion and may clip the heightfield values if they are too high. This creates a landscape that has a “standard” scale factor on the Z axis.

When converting heightfield data to landscapes, you can specify the min and max values used for the conversion by adding the unreal_landscape_layer_min and unreal_landscape_layer_max float attributes. This works on the height data, but also on any masks that converts to a landscape layer. This is useful when outputing tiled landscapes to ensure that all tiles are converted in the same manner.

Target Layers are converted from Houdini’s 32-bits float to Unreal 8-bits unsigned int. Values are converted from Houdini’s (min, max) to (0, 255) in UE.

By default, Height Field masks converts to weight-blended landscape layers. If you want some of the Height Field masks to be exported to Unreal as non weight-blended layers, you must add a Primitive String attribute to your heightfield named unreal_landscape_layer_nonweightblended. Set this attribute values to the names of the masks separated by spaces (ie: mask water debris).

Alternatively, each heightfield mask can have a Primitive Int attribute named unreal_landscape_layer_noweightblend which can be used to explicitly set the No Weight Blend property to unchecked (0) or checked (1).

Note

unreal_landscape_layer_noweightblend takes precedence over unreal_landscape_layer_nonweightblended.

Landscape size

Unreal Engine requires specific sizes for its landscapes, as they are broken up in sections and components for LOD / optimisation purposes. The recommanded sizes are:

  • 8129 x 8129

  • 4033 x 4033

  • 2017 x 2017

  • 1009 x1009

  • 505 x 505

  • 253 x 253

  • 127 x 127

If your heightfield data doesn’t match one of these recommended size, Houdini Engine automatically resamples the data so that the generated landscapes fit the size requirements.

This will likely causes issues due to the unwanted conversion and happens when splitting Height Fields to tiles. Also, using non-standard size results in an excessive amount of components used and causes severe performance degradation. It’s recommended you ensure the generated tiles’s volume size match the sizes recommended by Epic in their Landscape Technical Guide.

Upon cook, the generated landscape’s transform will be automatically set up so that its dimension, altitude, scale and position in Unreal are the same as in Houdini.

When importing a Landscape into Unreal the plugin will automatically choose values for Section Size and Setions Per Component. However these can also be set by using the attributes unreal_landscape_section_size and unreal_landscape_sections_per_component. Both attributes must be set; if only one is set, it will be ignored. If both are set the plugin will not attempt to resize the landscape, the landscape size will be used exactly.

Transforming landscapes

Landscapes can be transformed in Houdini and the Unreal Editor. Landscape actors are transformed relative to their parent actors.

Note

While heightfield _translation_ from Houdini is supported, heightfield _rotation_ from Houdini is not supported.

Tiled Landscapes

Splitting Height Fields into tiles in Houdini using the Height Field Tile Split SOP node. By default, each Landscape tile imports into UE as a standalone Landscape. Unlike previous versions of the plugin the target of a tile must be a Landscape Actor, not a Landscape Streaming Proxy.

Refer to Output Attributes for more information.

Details Panel

Since you can’t make landscapes into a component of another actor and Unreal now forbids Landscape Actors being parented to other actors, the generated landscape isn’t listed in the component list of your Houdini Asset. Instead, it is placed directly at the root of the World Outliner.

It also appears in the detail panels of the asset under the Houdini Generated Meshes section.

This section gives you the option to override the landscape’s main and hole materials.

You can automatically assign an existing material by using the unreal_material and unreal_hole_material attributes.You can override the physical material via the unreal_physical_material attribute.

You can also automatically generate material instances for the landscape material and hole material by using the unreal_material_instance and unreal_material_hole_instance attributes. For more details on this, see Material Instances

Even if it’s not listed in the Houdini Asset’s components, generated Landscape Actors or Streaming proxies remain linked to it. Recooking the asset will overwrite the generated landscapes, and deleting the asset also deletes its landscape.

To separate the generated landscape from its Houdini asset, you need to bake it by using the corresponding button in the details panel.

World Partition (Unreal Engine 5 Only)

Generating landscapes with World Partition works similarly to non-World Partitioned Levels.

The unreal_landscape_partition_grid_size attribute controls the World Partition Grid Size used during landscape creation. The default value is 4.

When modifying landscapes inside of World Partitioned Levels you should not change the enitre landscape when only modifying small sections. Therefore, using tiles to make isolated edits is preferable to modifying the entire landscape.

Note

If an HDA only modifies the area covered by a single Landscape Streaming Proxy the neighbouring Landscape Streaming Proxies may also be modified to ensure correct seams between the two.

Some landscape operations, such as creating new Edit Layers or Clearing Layers, will cause Unreal to mark all Streaming Proxies as dirty causing them to be saved and/or checked out from source control. However, Unreal will only try to dirty Streaming Proxies which are loaded. You should only load the parts of the landscapes currently being worked in using data layers or the World Partition editor; doing this means Houdini Engine will only modify the loaded parts of the level.

Note

By default, the Houdini Plugin creates a Landscape Edit Layer during cooking, which will cause the entire landscape and its loaded streaming proxies to be marked as dirty (if loaded). This can be disabled in the Houdini Asset Component by unchecking Temp Landscape Layers and will cause the HDA to cook directly to the baked layer. When working with World Partition levels is may be preferable to create these baked layers once, save them, and then iterate on small sections without recreating the layers.

If an HDA only modifies the area covered by a single Landscape Streaming Proxy the neighbouring Landscape Streaming Proxies may also be modified to ensure correct seams between the two.

Editable Landscape Layers

HDA Inputs

If a Landscape with edit layers is used as an HDA input, the landscape imports its (final) heightfield and paint layers and to import the heightfields of the individual edit layers using the layer names, prefixed by landscapelayer_.

Note

The imported landscape layers are hidden during import, make sure to use the Visibility SOP to unhide them.

The incoming landscape layers can then be selectively used to generate a new a (additive) landscape layer.

World Composition

World Composition is no longer supported in the Unreal 5 version of the plugin. Epic recommends transitioning to World Partition.

The following Hoduini Attributes were used to control World Composition and are deprecated:

unreal_landscape_streaming_proxy, unreal_landscape_editlayer_target, unreal_landscape_shared_actor_name are now treated the same as unreal_output_name.

unreal_level_path is also deprecated.

Unreal

Getting started

Basics

Using Houdini Engine

Reference