On this page |
The Houdini Niagara plugin can be found in your Houdini install directory, next to the Houdini Engine plugin: HoudiniXX.Y\engine\unreal\5.Z\HoudiniNiagara. You can also download the Houdini Niagara plugin at SideFX Houdini Niagara GitHub page.
The latest version supports Unreal 5.4. Similar to the Houdini Engine plugin, the Houdini Niagara plugin’s source code is intended to be compatible with all previous version of UE5. That plugin can be found under the FX category, and requires the Niagara plug-in to be activated.
This plugin adds an additional type of asset: Houdini Point Cache Assets that contains various point attributes exported from Houdini. It also provides the custom Houdini-Niagara Data interface for parsing and processing those assets in Niagara.
Installation ¶
-
Download the latest release from GitHUb.
-
Unzip the downloaded file.
-
Copy the HoudiniNiagara folder into _Your_Unreal_Project/Plugins_ folder.
-
To confirm the plugin is installed, load your project and navigate to Edit ▸ Plugins.
-
Search for Houdini Niagara in the Project section of the Plugins window.
You can also build the plugin from source by following the instructions on the GitHub page.
Getting Started ¶
The plugin includes a configured emitter, 1HoudiniNiagaraBasic1, that can be used as the basis for most Niagara Systems that utilise an Houdini Point Cache. The required modules for reading an Houdinin Point Cache can be found below.
For a quick introduction to the workflow and various assets:
Modules ¶
Module |
Description |
---|---|
Init Houdini Point Cache |
Emitter Spawn Group - This module tracks spawning info and ensures unique point ID’s for each emitter |
Spawn Particles from Houdini Point Cache |
Emitter Update Group - This module reads an Houdini Point Cache and spawns particles based on their age attribute relative to SpawnGroup can be set if multiple caches need to be accessed in the same emitter |
Sample Spawned Houdini Point Cache |
Particle Spawn Group - This module reads an Houdini Point Cache and sets the default attributes in the Houdini namespace. It only set the attribute for each particle once at spawn time. The Set Parameter module can then be used to set attributes like SetLifetime sets SetVelocity sets |
Sample Houdini Point Cache |
Particle Update Group - This module reads an Houdini Point Cache and updates the default attributes in the Houdini namespace based on The Set Parameter module can then be used to set attributes like UseCustomAge when on allows the user to specify a custom attribute to control the time index used for reading point cache attributes |
Default Attributes ¶
The sample modules will attempt to read the following attributes from an Houdini Point Cache. If an attribute does not exist the particle attribute will be set to 0
.
-
Particles.Houdini.Position
is set fromP
-
Particles.Houdini.Normal
is set fromN
-
Particles.Lifetime
is set fromlife
-
Particles.Houdini.Color
is set fromCd
-
Particles.Houdini.Alpha
is set fromAlpha
-
Particles.Houdini.Impulse
is set fromimpulse
-
Particles.Houdini.Force
is set fromforce
-
Particles.Houdini.Type
is set fromtype
-
Particles.Houdini.Velocity
is set fromv
-
Particles.Houdini.Pscale
is set frompscale
-
Particles.Houdini.Orient
is set fromorient
Custom Attributes ¶
Custom attributes can be read by creating your own module.
This video shows how to do that.
Houdini Point Cache Asset ¶
You can import .hbjson
, .hjson
and .hcsv
files generated by the Niagara ROP in Houdini. hcsv has been deprecated in favor of the ascii and binary json file formats. The plugin supports float
, vector
(including color) and int
values.
If vector or tuple values are exported, they will be expanded upon being parsed by the plug-in (so P
will become P.x, P.y, P.z
).
If you select a Houdini Point Cache Asset, it shows you the following properties on the file:
This can be useful for checking the header info of the file - number of points, number of frames, etc. It will also list the array of attributes stored in the file.
Hover over a Houdini Point Cache Asset in the Content Browser to display the following information on the available data:
Special Attributes ¶
The header of the point cache file contains the names of all the attributes exported. Certain attributes have built-in functions for getting their values:
-
Position
values should be stored asP
-
Time
values should be stored astime
. The Niagara ROP will add this attribute automatically or it can be set by the user. -
Point IDs
should be stored asid
-
Normal
values should be stored asN
-
Velocity
values should be stored asv
-
Color
values should be stored asCd
-
Alpha
values should be stored asAlpha
-
Life
values should be stored aslife
-
Type
values can be stored astype
-
Impulse
values should be stored asimpulse
If you want to update point position over time, Point IDs
and time
values are required.
The spawn time for a given point in the file is calculated in the following way:
-
if the asset has an
age
attribute, the spawn time is calculated by comparingage
totime
. -
if the asset does not have
age
, whentime==0
, a particle will be spawned.
If the asset has a life
attribute, this will directly set the lifetime of a particle. This can be disabled on the sample modules and set in the Emitter stack as well.
The type for a given point is set to its first type
value. If the file doesn’t contain type values, all points will have a type set to 0.
Houdini-Niagara Data Interface ¶
To access the point cache data contained in the Houdini Point Cache Asset, the custom Houdini-Niagara Data Interface
provided by the plug-in should be used.
The Data Interface can be accessed by adding a Houdini Point Cache Info
parameter to your module/emitter/system in Niagara, and selecting a Houdini Point Cache Asset for it.
All the functions that get attributes from an Houdini Point Cache Asset require:
Attribute |
Description |
---|---|
|
A reference to the Houdini Point Cache Asset |
|
A unique particle ID, usually |
|
An integer value of the index in a series of attribute values over time. Use the Get Sample Indexes for Point at Time or Get Last Sample Index function to get this value |
|
The current time of the emitter, usually |
Data Interface ¶
The Data Interface will expose the following functions:
Function |
Description |
---|---|
Get Sample Indexes for Point at Time |
Returns the sample indexes for a given point at a given time. The previous index, next index and weight can then be used to Lerp between values |
Get Last Sample Index at Time |
Returns the index of the last sample in the point cache that has a time value lesser or equal to the Time parameter |
Get Point IDs to Spawn at Time |
Returns the count and point IDs of the points that should spawn for a given time value. Refer to the Spawn Particles From Houdini Point Cache module for an implementation. |
Get Number Of Attributes |
Return the number of attributes in the cache |
Get Number Of Points |
Return the number of points in the cache |
Get Color |
Returns the color value for a given Sample Index in the point cache |
Get Float Value |
Returns the float value in the point cache for a given Sample Index and Attribute Index |
Get Float Value by String |
Returns the float value in the point cache for a given Sample Index and Attribute name |
Get Impulse |
Return the impulse value for a given Sample Index in the point cache |
Get Normal |
Return the normal value for a given Sample Index in the point cache. The returned Normal vector is converted from Houdini’s coordinate system to Unreal’s |
Get Point Alpha at Time |
Returns the linearly interpolated alpha for a given point at a given time |
Get Point Color at Time |
Returns the linearly interpolated color for a given point at a given time |
Get Point Impulse at Time |
Returns the linearly interpolated impulse for a given point at a given time |
Get Point Life |
Returns the life value for a given point when spawned. The life value is either calculated from the alive attribute or is the life attribute at spawn time |
Get Point Life at Time |
Returns the remaining life for a given point in the point cache at a given time |
Get Point Normal at Time |
Returns the linearly interpolated normal for a given point at a given time. The returned vector is converted from Houdini’s coordinate system to Unreal’s |
Get Point Position at Time |
Returns the linearly interpolated position for a given point at a given time. The returned Position vector is converted from Houdini’s coordinate system to Unreal’s |
Get Point Quat Value at Time |
Returns the linearly interpolated quaterion value in the specified attribute index for a given point at a given time The 1DoHoudiniToUnrealConversion1 parameter indicates if the vector4 should be converted from Houdini’s coordinate system to Unreal’s |
Get Point Quat Value at Time by String |
Returns the linearly interpolated Quat value in the specified attribute (by name) for a given point at a given time. The |
Get Point Type |
Returns the integer type value for a given point when spawned |
Get Point Type at Time |
Returns the integer type value for a given point at a given time |
Get Point Value at Time by String |
Returns the linearly interpolated float value in the specified attribute (by name) for a given point at a given time |
Get Point Vector4 Value at Time |
Returns the linearly interpolated Vector4 value in the specified Attribute Index for a given point at a given time. The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Point Vector4 Value at Time by String |
Returns the linearly interpolated Vector4 value in the specified attribute (by name) for a given point at a given time. The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Point Vector Value at Time |
Returns the linearly interpolated Vector value in the specified Attribute Index for a given point at a given time.The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Point Vector Value at Time by String |
Returns the linearly interpolated Vector value in the specified attribute (by name) for a given point at a given time. The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Point Vector Value at Time Ex |
Returns the linearly interpolated Vector value in the specified attribute index for a given point at a given time The The |
Get Point Vector Value at Time Ex by String |
Returns the linearly interpolated Vector value in the specified attribute (by name) for a given point at a given time The The |
Get Point Velocity at Time |
Returns the linearly interpolated velocity for a given point at a given time. The returned vector is converted from Houdini’s coordinate system to Unreal’s |
Get Position |
Returns the position value for a given sample index in the point cache file. The returned Position vector is converted from Houdini’s coordinate system to Unreal’s |
Get Position and Time |
Returns the position and time values for a given Sample Index in the point cache. The returned Position vector is converted from Houdini’s coordinate system to Unreal’s |
Get Quat Value |
Returns a Quat in the point cache for a given Sample Index and Attribute Index. |
Get Quat Value by String |
Returns a Quat in the point cache for a given Sample Index and Attribute Name The DoHoudiniToUnrealConversion parameter indicates if the vector should be converted from Houdini’s coordinate system to Unreal’s |
Get Time |
Returns the time value for a given Sample Index in the point cache |
Get Vector4 Value |
Returns a Vector4 in the point cache for a given Sample Index and Attribute Index. The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Vector4 Value by String |
Returns a Vector4 in the point cache for a given Sample Index and Attribute name. The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Vector Value |
Returns a Vector in the point cache for a given Sample Index and Attribute Index. The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Vector Value by String |
Returns a Vector in the point cache for a given Sample Index and Attribute name. The returned Vector is converted from Houdini’s coordinate system to Unreal’s |
Get Vector Value Ex |
Returns a Vector3 in the point cache for a given Sample Index and Attribute Index The DoSwap parameter indicates if the vector should be converted from Houdini’s coordinate system to Unreal’s The DoScale parameter decides if the Vector value should be converted from meters (Houdini) to centimeters (Unreal) |
Get Vector Value by String |
Returns a Vector3 in the point cache for a given Sample Index and Attribute name The DoSwap parameter indicates if the vector should be converted from Houdini’s coordinate system to Unreal’s The DoScale parameter decides if the Vector value should be converted from meters (Houdini) to centimeters (Unreal) |
Get Velocity |
Returns a Vector3 in the point cache for a given Sample Index and Attribute name. Returns the velocity value for a given Sample Index in the point cache. The returned velocity vector is converted from Houdini’s coordinate system to Unreal’s |