On this page |
Houdini Engine Plugin for Unreal supports both the Input and Ouput of Landscapes. It also includes support for Edit Layers, Paint Layers, and World Partition.
Input From Unreal ¶
Landscapes can be imported to Houdini as a World Input on the Unreal Houdini Asset Compononent.
The landscape’s height and layer data is imported into Houdini as a Height Field. It can also be a point cloud or mesh if you select the world in put opiton.
If the landscape is exported as a Height Field, all the landscape layers are masks on the Height Field 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 Height Field back to Unreal.
See Landscape Inputs for more information.
Output ¶
Landscapes can be generated by your HDA if the output node contains Height Field primitives.
Each Height Field primitive 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.
See Landscape Outputs for more information.
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 separate 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 supported 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,visiblity
controls 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.
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.
Height 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 Height Field.
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 Height Field values if they are too high. This creates a landscape that has a “standard” scale factor on the Z axis.
When converting Height Field 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 Height Field named unreal_landscape_layer_nonweightblended
. Set this attribute values to the names of the masks separated by spaces (ie: mask water debris).
Alternatively, each Height Field 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
.
Target Layer Data Conversion ¶
Unreal stores target (paint and visibility) layers as 8-bit unsigned values. Houdini Volume layers (masks) are automatically converted to the range Unreal expects and should be in the range 0 to 1.
By default, values outside the range 0 to 1 are clamped. However, setting the attribute unreal_landscape_layer_normalize
to 1 on a layer inside Houdini will cause the plugin
to normalize the values in the layer to fit in the expected range. Negative values are set to 0.
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 Height Field 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.
Properties & Tags ¶
General Workflows ¶
Transforming landscapes ¶
Landscapes can be transformed in Houdini and the Unreal Editor. Landscape actors are transformed relative to their parent actors.
Note
While Height Field _translation_
from Houdini is supported, Height Field _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.
Attributes ¶
Houdini to Unreal ¶
This table lists special attributes to set in an HDA and the plugin recognizes when you translate the Houdini data to Unreal outputs. You can setup these attributes on your assets to control and override some properties and behaviours of the generated Unreal outputs. See Attributes and Groups for more information.
Landscapes ¶
Attribute Name |
Owner |
Type |
Description |
---|---|---|---|
|
prim, detail |
string |
Unreal path of a Material asset used for Landscape holes |
|
any |
string |
Name for the main/shared landscape actor when using landscape streaming proxies. The name for landscape tile actors will be read from |
|
any |
float |
Specify the minimum values to be used for when converting heightfield layers/height values to landscapes. This is especially useful to ensure all tiles are converted in the same manner |
|
any |
float |
Specify the maximum values to be used for when converting heightfield layers/height values to landscapes. This is especially useful to ensure all tiles are converted in the same manner |
|
any |
int |
Allows the layer’s data to be written to a locked Landscape Edit Layer |
|
any |
int |
Locks the Edit Layer after writing |
|
any |
int |
Specifies section size for landscapes. unreal_landscape_sections_per_component must also be set |
|
any |
int |
Specifies sections per component for landscapes. unreal_landscape_section_size must also be set |
|
prim, detail |
int |
If set to 1, indicates that a heightfield mask’s value should be considered in |
|
prim, detail |
string |
Names of heightfields masks, separated by spaces, that should be created a non-weight blended landscape layers |
|
prim |
string |
Unreal path of an existing LandscapeLayerInfo object to be used when converting a given heightfield mask to a landscape layer |
|
prim, detail |
int |
Set the |
|
any |
int |
Set landscape output mode to Generate Landscape |
|
any |
string |
Name of target edit layer |
|
any |
string |
(deprecated) use |
|
any |
string |
Type of layer being output. |
|
any |
int |
Whether to clear the whole editor layer before drawing the output heightfield (Default: |
|
any |
string |
After which layer on the target landscape this output layer should be placed |
|
prim, detail |
int |
This attribute can be set on heightfield masks to set the Subtractive Blend property to unchecked |
|
prim |
int |
This attribute controls the world partition grid size when creating landscapes. Only apply in levels that have world partition enabled |
|
prim |
int2 |
Used to indicate the total landscape size when importing a single tile |