A particle system is first and foremost driven by attributes. Here are some of the attributes understood by the solvers.
The attributes are listed with the @
style prefix to give the full type. No prefix means float.
There are two suggested methods for creating attributes: POP VOP and POP Wrangle.
In a POP VOP, you can use a Bind Export VOP to write out your desired attribute.
In a POP Wrangle you can use a prototype to specify the attribute and default.
int @id = -1; point @orient = {0, 0, 0, 1};
Note
The expression after the equals must be a simple constant expression.
Attributes
Houdini will use the Cd
(diffuse color) point attribute to color particles.
State
|
float |
Time in seconds since the particle was born. To get the relative time, useful for fading effects, use |
|
float |
|
|
float |
Time in seconds the particle is allowed to live. When |
|
int |
A unique id for the particle that remains the same throughout a single simulation. Always use |
Linear Physics
The particle solver uses the standard v
(velocity) attribute as the direction of the particle. Use length(@v)
to get the speed of the particle.
|
Forces on the particle for this frame. |
|
|
float |
Inertia of the particle. |
|
vec3 |
This is multiplied by |
|
float |
How much the particle is dragged by any wind effects. |
|
float |
A value from 1 to 2. An exponent of 1 means that a particle is dragged to the wind velocity by an amount proportional to the difference in speeds. A value of 2 makes it the square of the speeds. The latter causes fast moving particles to be crushed faster, and has less influence on particles already near the wind speed. The default is set by a parameter on the solver. This is used for both angular and linear drag. |
|
vec3 |
How much the particle is dragged in each of its local axes. Should be proportional to the cross section of the particle as seen down each axis. |
|
vec3 |
If specified, drag forces will also generate torques on the particle based on the difference between the center of drag and the center of mass. The center of mass is always taking to be the particle position. This provides a local offset to the particle. |
|
float |
The local wind speed. Thought of as the goal, or target, velocity for the particle. |
|
float |
How important it is to match the wind speed. This differs from the drag in that it is measuring a property of your wind force, which likely varies by space, rather than a property of the particle which remains the same as the particle moves. |
|
float |
Limit of the speed, in units per second, that a particle can move. Particles can temporarily exceed this due collision effects, this acts as a hard clamp every timestep after force computation. |
Angular Physics
|
vec4 |
The orientation of the particle. This is used for stamping onto particles and for figuring out "local" forces. A particle with an orient attribute no longer is considered to be facing in the direction it is traveling. This is a quaternion. |
|
vec3 |
Angular speed of the particle. This can be thought of as a vector giving the rotation axis with its magnitude being the spin rate. Spin rate is in radians per second. |
|
vec3 |
The equivalent of force for spins. No inertial tensor (the equivalent of mass) is currently supported. |
|
vec3 |
The goal spin direction and speed for this particle. |
|
float |
How important it is to match the |
|
float |
Limits on the speed in radians per second that a particle can spin. |
State
|
int |
Whether a particle is living (0) or dead (1). A dead particle is deleted in the Reaping stage. This is done as the final stage of the solver and after the post-solve nodes, so you normally do not see any dead particles unless you turn off Reaping. |
|
int |
Whether a particle is moving (0) or stopped (1). It preserves its velocity, but no longer integrates its position, velocity, orientation, or angular velocity. Note that direct changes to these can still be performed - such as a Look At POP altering the orientation. |
|
int |
Whether a particle is free (0) or stuck (1). A stuck particle will be teleported to the position path every frame. It will inherit the velocity of the surface it is stuck to. |
|
int |
Whether a particle is free (0) or sliding along a surface (1). A sliding particle is allowed some motion, but it then tries to re-project itself to its position path object. It can’t transfer between objects, but it can change which primitive/uv coordinates it is on in this process. |
|
float |
Sliding particles apply a force inwards (according to surface normal) to the object they are attached to. This helps them stay on around bends. |
|
string |
This string stores a path to the object that the particle is interested in. It is the path to a file on disk or an absolute |
|
int |
Default: -1. Which primitive in the path geometry whose position we wish to refer to. |
|
vec3 |
Where on the primitive. This is NOT texture uvs, but parametric uvs. The |
Collisions
|
int |
The cumulative total of all hits for the particle. Corresponds to the
A particle may collide multiple times within a substep, giving
a Additional POP Collision Behavior nodes may double count collisions if their Compute Hit Total is on. |
|
int |
This attribute is 1 if |
|
vec3 |
Stores the position of the particle on the previous frame. This is used in collision detection to ensure collisions can be registered regardless of how the particle moves. |
|
int |
The number of times the particle collided in the last POP Collision Detect. |
|
string |
The path to the object that was hit. A path to a file on disk or an op: path. |
|
int |
The primitive hit. This could be -1 if it the collision detector couldn’t figure out which primitive owns the collision. The POP Solver tries to recover from this with |
|
vec3 |
The position on the primitive. This is in parametric UV space, not texture UV. |
|
vec3 |
Where the hit actually occurred. Usually a |
|
vec3 |
The normal of the surface at the time of the collision. |
|
vec3 |
The velocity of the surface at the time of the collision. |
|
float |
When the collision occurred, that could be within a frame. |
|
float |
Created by the Gas Impact to Attributes node, this records how much of an impulse was needed for the collision resolution. The Add Impact Data has to be enabled on the POP Solver as well. This varies with timestep. |
|
float |
When particles bounce off another object, this controls how much energy they keep in the normal direction. A value of 1 will keep all the energy, a value of 0 will come to a stop. It is multiplied with the bounce value of the other object. The default is controlled by a parameter on the POP Object. |
|
float |
When particles bounce off another object, this controls how much energy they keep in the tangential direction. A value of 1 will cause the particle to keep moving tangentially, ie, a perfect bounce. A value of 0 will bring the particles to a stop relative to the collision object in the tangential direction. A value of -1 will cause the particles to retro-reflect. A value of 2 will cause them to gain energy with every collision. It is multiplied by the bounce forward value of the other object. The default is controlled by a parameter on the POP Object. |
|
float |
When particles bounce off other objects, they are slowed down in the tangential direction proportional to how hard they hit the object. A value of 0 will bounce off with no momentum transfer. Higher values will increase how much the particles will stick to the collision object’s speed. This is multiplied by the friction of the other object. The default is controlled by a parameter on the POP Object. |
|
string |
Objects that match this pattern will not be collided during the POP Solver collision stage. This does not affect the POP Collision Detect, just the implicit collisions during solve. Both object names and object ids can be matched by the expression. Therefore, |
Misc
|
string |
Geometry to copy onto each particle. This is either a path to a file on disk or an |
|
int |
|
|
float |
Distance to the nearest particle. -1 if nothing in range. Created by the Proximity POP. |
|
int |
Number of particles within the specified range. Created by the Proximity POP. |
See also |