|On this page|
The pyro source instancing workflow in Houdini 19.5 provides a wide variety of possibilities, but also introduces new terminology, new nodes, and attributes.
This workflow requires you to package each individual pyro source into a packed source set, which contains source volumes and merging operations (or source rules) that describe how to apply the source to a simulation. You can merge several packed source sets together to form a source library. Given the library, Pyro Solver can then apply the desired sources at its instance points. To create and control instance points, you can use spawn points; these timeless recipes for instances expose control over timing and looping through their point attributes. Essentially, pyro source instancing gives you the means to create a source library, then put elements from this library into simulations, either by manual placement or with controlled randomization. Pyro source instancing also works in Minimal OpenCL mode, where it greatly increases the sourcing flexibility.
This page explains the aforementioned components for simulating with source instances. Detailed workflow instructions can be found here
Packed source set
A packed source set is a packed primitive containing volumes that are to be
sourced into a pyro simulation, along with instructions about how to apply the
source to a simulation. You can feed source volumes to the
Pyro Source Pack SOP to package them into a packed
source set. At a low level, the core attributes of a packed source set are its
name, frame length, and source rules that specify how to merge the contained
volumes with simulation fields. These properties are stored in
source_rules primitive attributes, respectively.
A collection of packed source sets can be merged together to form a source library. A source library is much like an asset library, and pyro source instancing allows you to place individual entities from the library into a simulation. This is done by creating instance points, whose attributes control which source goes where and how.
A spawn point is conceptually a recipe for an instance point that enables more intuitive control over the timing. In particular, spawn points store some basic animation data, such as when the source is to engage, when it should cease sourcing, how quickly it should play back, and how frequently it should repeat. These properties are stored in point attributes, which are listed below.
Name of the packed source set that we want to instance.
Location of the instance in world space.
Orientation of the instance in world space.
The local pivot point for this instance.
The instance is activated on this playbar frame.
If greater than
startframe, the instance will not be active beyond this
If this value is no smaller than
1, then the source sequence will loop.
The looping sequence starts at
startframe and is
looplength frames in
When the instance first engages (on
startframe), it starts sourcing at
this offset within the packed source set’s frame range.
Length of the subsequence to use from the packed set’s full frame range.
For example, if
5, then only
0-5 will be used for sourcing. If
offsetlength is smaller than
0, then all frames from the packed set can be used.
Playback speed of the source once it engages. For instance, if
2, then offset
1 of the packed set will be
sourced when it first engages, followed by offsets
3, 5, ... on subsequent
frames. This speed can be negative.
You can use the Pyro Spawn Sources node to generate spawn points.
An instance point is a point that identifies which packed source set to apply, which frame of the source to use, as well as where and how to merge the volumes with simulation fields. In contrast to spawn points, an instance point only exists when it is meant to be actively sourcing; additionally, each instance point stores the sourcing rules for it. Point attributes that affect sourcing behavior are given below, along with where they come from if the instance point is generated from a spawn point.
Name of the packed source set that should be applied. This is copied from the spawn point.
Location of the instance in world space. This is copied from the spawn point.
Orientation of the instance in world space. This is copied form the spawn point.
The local pivot point for this instance. This is copied from the spawn point.
Offset into the relevant packed source set’s sequence. A value of
indicates that the very first frame of the packed source set should be
used. This is calculated using the current frame and the spawn point’s
This dictionary array attribute stores the sourcing rules that govern how the volumes of the packed source set will be merged into the pyro simulation. Each entry in the array stores an individual rule, containing all the data that comes with a single entry under the Source Volumes section of the Pyro Solver SOP. Of special importance here are Source Volume and Target Field. Former identifies the volume within the packed source set that will be merged, while Target Field corresponds to the DOP field that will be sourced into.
The instance’s rules are copied from the corresponding packed source set and modified to incorporate any relevant overrides.
Although a packed set comes with its source rules, the actual rules used for
sourcing will be read from instance points. This allows different instances for
the packed set to vary how they apply the same source volumes. Imagine a
simulation where you want to create hotter and cooler smoke from the same
source, to influence how fast it rises; to achieve this, you would set different
scale multipliers for rules that affect the
To introduce such variations, you can specify overrides on both Pyro Spawn Sources and Pyro Source Instance SOPs. In either case, you can modify rules by identifying their target field; then, you can select the numerical rule property that you want to tweak, whose base value will be multiplied by the adjustment. When done on Pyro Spawn Sources, you can set the adjustment value for the spawn points directly. Since input to Pyro Source Instance consists of many unconnected spawn points, it doesn’t allow for direct adjustment value control; instead, you can register a point attribute to be used as the adjustment value on a per-instance basis. This also enables you quickly randomize rule adjustments by simply randomizing attribute values (using Attribute Adjust Float, for example).
When merging packed source sets into a library, it is very important that they are all available on the same frame. This can be ensured by setting the same value for the Reference Frame parameter on all Pyro Source Pack nodes that were used to create the packed source sets. Leaving this parameter at its default value of
1 is sufficient; this value indicates that the source sets will be timeshifted to start at frame
1. The timeshift does not affect the timing of these sources when they are applied to a pyro simulation: spawn points and instance points can be used to precisely time the activation of sources.
The library’s reference frame must also be matched by the Reference Frame parameters on the Pyro Source Instance and Pyro Solver nodes. As mentioned above, all these parameters default to the same value of
1, so everything should work if you simply ignore their existence.
However, this default value is not ideal if your timeline does not start at frame
1, in which case the packed sets will be timeshifted to a frame that’s hard to reach in the timeline. It’s recommended to save a new default value for these parameters if that is your situation. For instance, if your timeline starts on frame
1000, then it’s best to have Reference Frame parameters default to
1000. This will ensure that newly-created packed source sets will be visible on the first frame of the playbar.
The Pyro Solver SOP has two such Reference Frame parameters: one for sources and one for colliders.