Houdini > UE4

HDA Parameters

Verify that parameters are input into the HDA's Operator Type Properties by accessing the gear icon and selecting Type Properties to input the parameters that are to be exposed; not the option Edit Parameter Interface.

Integration with Megascan Assets

By default, the assets are imported into UE without collision geometry, but the following depicts the quick process by which to enable a simple collision for geo.

HDA with Megascan Assets

Test 1

Initial pass of HDA development for simple walkway lined with vegetation.

Unreal Instance Point Attribute

Point wrangle specified with VEX to attribute different variations of Megascan asset with corresponding points.


Reference for additional special attributes recognized for use in an HDA with UE:

Test 2

2nd iteration documentation some more features and parameter controls.

Blockout Geo Test


  1. Object Merge blockout geo from inside HDA to separate Geo.
  2. Uniform scale to 100 for conversion to Maya later.
  3. File Cache and export to .obj.


  1. Drag/drop .obj from Houdini to scene.

Export Geo

  1. Freeze Transform and Delete History.
  2. Game Exporter to .fbx.


  1. Verify that Hou Engine session is running in UE4. If not, restart via File > Restart the Houdini Engine Session.
  2. Verify Scale
  3. Project Settings > Houdini Engine

Archived Work

Test of HDA generated in Houdini with assigned attributes and basic controls for use in UE4.



Copy the HoudiniEngine directory to the UE4 Plugins > Runtime directory.


Niagara ROP


  • Keep Attributes: Add pscale; not included by default.


Point Cache Asset

This is the file exported from Houdini via the Labs Niagara ROP.


  • Max Sample Time: Value identifies the duration of the point cache system. This needs to be correlated with the Loop Duration in the Niagara system, namely under Emitter Update.

Niagara System

Enable Show Engine Content & Show Plugin Content in the Content Browser to access the Houdini Niagara Content. This can be used as starting points for newly created Niagara systems. This can also be accessed within a new system via Add Emitter.

Emitter Properties

  • Emitter State
    • Loop Duration: Coordinate this duration with the available Max Sample Time in the point cache asset.
    • Spawn Particles From Houdini Point Cache: Assign point cache asset.
  • Particle Spawn
    • Sample Spawned Houdini Point Cache: Assign point cache asset.
  • Particle Update
    • Sample Houdini Point Cache: Assign point cache asset.
    • External forces can be applied here to vary dynamics even further than defined by point cache.

Particle Attributes

This is the outline of available attributes carried over from Houdini into UE4 via the point cache asset. Note that there are instances where data types need to be configured in the Niagara system to accommodate incoming data. The following instance highlight these strategies.

  • Color
    • Particle color updates seek vector4 data types, which include an alpha channel, but this is not included in the incoming point cache asset's vector3 color. To address this, use the drop-down menu next to the parameter input and select an option that allows for splitting the vector4 into a vector3 + float as separate values.
    • Example: The Color module added to the Particle Spawn section has an option to Make Linear Color From Vector and a Float. With this setting reassigning the vector via the drop-down menu will access the Houdini color attribute as a vector3.
  • Scale & pscale
    • The scale factor in a sprite size update seeks a vector2, but in the same way as the color property, there is an option to convert the vector2 to a Vector 2D from Float, which can then accept the float pscale attribute in the point cache asset.

Scrub FX in Sequencer Timeline

By default, FX actors will only play when the sequencer is played, but will not show up when scrubbed backwards. Steps are as follows:

  1. Add Niagara System to Sequencer as a track.
  2. Add Niagara Component to Niagara System Actor track.
  3. Add Niagara System Life Cycle Track to Niagara Component.
  4. Edit System Life Cycle Properties and change Age Update Mode to Desired Age.




Plugin Repository

Niagara System Component



Emitter Categories




The lifetime of the emitter

Particle Spawn

Properties when particles are initially spawned.

Particle Update

Properties after particles have spawned.

Emitter Modules

Particle Spawn


The particle lifetime is different than the emitter lifetime.

Particle Update

Spawn Rate

Particles / second


Accepts Emitter, which can then be placed into Scene.



  • Landscape Material used to define the layers within the landscape tool for painting different materials.
  • Landscape Hole Material set up as a Mask with an Opacity Mask to define holes created by the 'visibility' attribute; from Hou.
    • Use 'Landscape Visibility Mask' for 'Opacity Mask' to read the 'visibility' attribute.

Substance > Redshift3D

Workflow for utilizing Substance Material (.sbsar) in a Houdini COPnet and linking to a Redshift3D Material


Geometry With UVs

The following assumes the geometry to which the Redshift material is applied has properly mapped UVs.

Compositing Network (COPnet)

Labs Substance Archive

Set File Path to .sbsar file to access parameters for the specified Substance material.


Material Network (MATnet)

RS Material Builder

Link RS Texture for each diffuse, roughness, metallic, and normal maps.


RS Texture

Set Filename to COPnet reading .sbsar file, and specify Layer Name for respective texture map.


RS Bump Map

For normal, route through Bump Map to specify scale/intensity.



Geometry Without UVs

The following variation of the aforementioned setup allows for the textures to mapped to geometry without preset UVs.

Material Network (MATnet)

RS Material Builder

As before, the RS Texture for each diffuse, roughness, metallic, and normal maps is linked but with an RS TriPlanar to account for the lack of UVs.

Side Note: The RS Point Attribute in the following is solely included to vary the spheres with their own @Cd point attribute in tandem with the Substance material.


Python Automation Functions

RS Material with Substance Presets

Function to populate RS Material with texture format specific to Substance Painter output:

Substance Material (COP) Link To RS Material

Function to nest COPnet and MATnet in GEOnet to encapsulate relative links, including preset for Substance Material/s in COPnet linked to Redshift Material in MATnet:


RS Material Coordination


Geometry transitioned into LOP network, exported to USD, then to USDz.



Universal Scene Description
Local, Inherits, Variant Sets, References, Payload, Specializes
Strength ordering for opinions and namespace composition in USD


Layer: File on disk

Primary Container: Primitives are the primary container object in USD

Stage: Resulting composition of layers

Primitives and computed indices are the only persistent scene graph (SG) objects kept in memory

Composition Arcs: Combination methods for layers of layer parts

Sublayer: Fixed graph locations

Uses Sublayer

Namespace: Path to prims in graph

Primitives are the primary namespace object

Can contain other primitives creating a namespace hierarchy on a stage

Attributes are second to Primitives

Opinions: Atomic elements defining value resolution

Defined by LIVRPS Strength Ordering

References: Pointers to content in memory

This is distinguished from packed prims on disk

Payload: Load applicable content as necessary to manage memory and processing

Instancing: Creates 'Prototypes', which are the objects being instanced

Each instance is the same

Cannot override beneath root prim

Can be 'broken' if necessary

Utilizes Instancer

SOP geometry defined as packed prims enter LOPs as instance-type prototypes

Variant Set: Set of alternatives

Non-destructive hierarchy

Uses Set Variants

LODs can be stored as variants

Uses Create LOD

Can be configured relative to camera position

Uses Auto LOD

Transition SOP to LOP (lighting operators)

Uses SOP Create

Modifications applied within a SOP Modify

Workflow Logic


Use output node as outgoing node in SOP geo to manage consistent output from geometry object, which can link to SOP Import in LOPs. SOP Import can have path set to object since output node defines consistent output. This strategy applies to all SOP import strategies within LOPs.

SG Hierarchy Definition

  • Use shop_materialpath (SOP) to define hierarchy (LOP/SG)
  • Use path / name attributes translated to kinds (LOP/SG)
  • Use primitive groups (SOP) translated to sub-components (LOP/SG)

Attribute Editing

  • USD Configure
  • This SOP allows for the configuring the attributes intended for the SG from SOP context, before data is passed into LOPs.

  • SOP Create / SOP Modify
  • On the other hand, attributes can be configured after data has entered into LOP context with these LOPs.

Composition Structure

This is the structure visualized by the Scene Graph (SG) depicting the composition arcs and their corresponding layer stacks (LIVRPS).

Cache Directory Structure

This is the structure in which the actual .usd, .usda, and .usdc files are stored and read in by the composition structure.

  • Standardize structure; follow Pixar's example.
  • Variants / layers can be used to accommodate ongoing edits.
  • Explicitly define .usda and .usdc files.
  • Example Directory Structure
  • Assets/



    Material_Assignments (.usda)



    Geo Cache (.usdc)

    Geo Variants (.usda)

    Base Reference (.usda)




Model Viewer - Web 3D

Export .glb content from Houdini and deploy to website with interactive elements.

Export .usdz content from Houdini and accompany the web content for use in iOS AR.


IFC > FME > Houdini

I've used FME to get some IFC content into Houdini via glTF and CSV files. The glTF (processed from the IFC in FME) carries the geometry as primitives nested within meshes and are imported as packed primitives into Houdini. At the same time, the CSV (also processed from the IFC in FME) brings in the rest of the IFC data aligned to each mesh, either by sorted order or mesh centroid. The Attribute Transfer SOP in Houdini then allows the IFC data to be realigned with its corresponding mesh/packed primitive. This was a process that I used only a few times here and there, so I was okay with running it through a for-loop in Houdini to get large building elements like the shell without dealing too much about the smaller details.


Unity Toolbox HDA > Unity


Test & Analysis

Test 1: Setup and implementation in Unity

Test processed volume SDF and point cache from Houdini using the Unity Toolbox HDA and exported. Assets imported into Unity and integrated with Visual Effects Graph in Universal Rendering Pipeline. Particle counts tested successfully up to 10 million particles.

Test 2: Setup and implementation in AR via Unity

Test of VFX Graph from Test 1 applied into AR with Unity and Vuforia tracking. 1,000,000 particles at ~60fps. Jittering in AR is from slightly unstable tracking and my grasp of the iPad.

ZBrush > Houdini

Subtool Resolution

Note that GoZ exports the subtool with the lowest subdiv setting, so if necessary, delete all lower ones to export the highest res subtool.

Individual v. All Subtools

Select 'All' to export all subtools in project to Houdini rather than individually selected subtools.

Houdini > ZBrush


Use Name SOP to identify geo to be treated as separate subtools.