The Particle SOP is used for creating and controlling motion of "particles" for particle systems simulations. Particle systems are often used to create simulations of natural events such as rain and snow, or effects such as fireworks and sparks. In Touch, the points of the input geometry are used as the starting positions of the particles. Each point of the input can be affected by external force (gravity) and wind. Particles can collide and bounce off another object, set by the Collision Source. They can also bounce off, or die at, limit planes set in X, Y and Z.
Particles have various attributes that regular geometry do not have, such as velocity, life expectancy and age. These attributes must be carried with each point in order to carry out the simulation.
The fourth input is Surface Attractors that cause the particles to be attached to areas of a surface. Each particle's id is used to determine a random target primitive, and random u,v on that primitive. That target position is used to modify the current velocity.
Parameters - State Page
/prtype - Selects how the particles are rendered.
- Render as Lines
/lines- Each particle will be rendered as a 2-point line, with the length determined based on the particles velocity. If the particle has no velocity it will just be a single pixel in size.
- Render as Point Sprites
/pointsprite- For use with the Point Sprite MAT. Each particle is a square of pixels that always face the camera. The size of the square is determined by parameters in the Point Sprite and the
pscalevertex/point attribute. The point sprites will have texture coordinates generated for them automatically also ((0,0) in the bottom left and (1,1) in the top right)
- Particle System
/psystem- Act like a particle system, where particles are born from the input points.
- Modify Source Geometry
/modify- Deforms the source input geometry.
Tip: You can also instance geometry to particles. Use a SOP to CHOP to get the particle positions into CHOPs, and on the Instance page of the Geometry COMP to position any geometry at each particle positions. This is by far the most efficient way of animating many copies of geometry with a particle system.
/normals - Creates normals on the geometry. Only used when Behaviour is set to Modify Source Geometry.
/ptreuse - Decide how the internal memory for points is reused when a point needs to be created or when a point dies.
/timepreroll - How many seconds of the simulation to bypass, after the reset time is reached. For example, if you put the number
33 into this field (and reset is at
Tstart), frame one will show the simulation that was at a time of 33 seconds. In other words, the first thirty-two seconds have been bypassed, and the time at thirty-three seconds is shifted to frame one. The first thirty-two seconds must still be calculated in order to compute the status of the points, so you will notice some delay upon reset.
/timeinc - The Time Inc parameter determines how often to cook the SOP. By default, this parameter is set to
1/$FPS. This means that the SOP will cook once for every frame. When complex dynamics are involved, the SOP may require more frequent cooking for increased mathematical accuracy. To get sub-frame accuracy in the cooking, set the Time Inc to something smaller than
For example: Setting the Time Inc to
0.5/$FPS will mean that the SOP gets cooked twice for every frame.
Note: Never set this parameter to be greater than
/resetcondition - Determines how the Reset parameter is interpreted.
/reset - Resets the particle system. A value of 0 means 'Off' (for the Reset Condition) and a value > 0 means On.
/maxsteps - limits how far back in time TouchDesigner calculates particle positions for proper interactions. If frame rates are slow this computation back in time can become high, this parameter limits that effect.
/jitter - This allows you to jitter the location pixels of each particle as they are born.
/accurate - This option makes the particles move more accurately between frames by calculating their trajectories for fractional frame values.
Remove Unused Points
/rmunused - Removes all unused points from the input geometry. This is provided as an explicit option instead of automatically because it saves the time needed to purge the points from memory during the simulation. This prevents unnecessary slowdowns during the simulation.
- All Points - All point attractors affect all particles (or points).
- Single point per particle - When enabled, each particle is assigned a single attractor point, and is affected by only that point. Assignment is done by point number modulo the total number of attractor points.
Parameters - Forces Page
/externalx /externaly /externalz - Forces of gravity acting on the particles. When drag is zero, the particles can accelerate with no limit on their speed.
/windx /windy /windz - Wind forces acting on the particles. Similar to External Force. Using Wind (and no other forces, such as Turbulence), the particles will not exceed the wind velocity.
Discussion - Wind vs External Force
The application of External Force directly affects a particles' acceleration, the rate of which is determined by the mass (F = Mass Acceleration). Wind is an additional force, but one that is velocity sensitive. If a particle is already travelling at wind velocity, then it shouldn't receive any extra force from it. This implies a maximum velocity when using Wind on its own.
An increase in mass impedes acceleration for a given constant force. Drag is a force opposing the direction of motion which is velocity sensitive, i.e. the larger the velocity, the greater the effect of drag. Its useful for limiting the velocity of particles.
/turbx /turby /turbz - The amplitude of turbulent (chaotic) forces along each axis. Use positive values, if any.
/period - A small period means that the turbulence varies quickly over a small area, while a larger value will cause points close to each other to be affected similarly.
/seed - Random number seed for the particle simulation.
Parameters - Particles Page
Add Particle ID
/doid - Adds an ID number to each particle as it is born.
Add Mass Attribute
/domass - When selected, calculates the mass of the particle, as specified in the Mass field.
/mass - The relative mass of each particle. Heavier particles take longer to start moving, and longer to slow down.
Add Drag Attribute
/dodrag - When selected, calculates the drag coefficient of the particle, as entered in the Drag field.
/drag - Drag of each particle.
/birth - The number of particles born each second. Particles are not released in clusters. They are born at random times during the first frame of their existence. Their birth time is set randomly during the first frame.
/life - How long each particle will exist, in seconds. The default is
3 seconds. You may want to adjust this number based on the length of your animation.
/lifevar - Variance of a particle's life expectancy in seconds. If life expectancy is one second, and the variance is zero seconds, each particle will live exactly one second. If variance is set to 0.5, then some particles will live only a half second, while others will live a second and a half. The rest will live some time in-between. This randomness gives a more natural look to the particle births.
/alpha - As a particle goes faster, it should become more transparent. The Alpha Speed parameter defaults to 0, which doesn't change alpha as the speed increases. A typical value of 0.5 causes the particle to be 70% opaque when it's going 1 unit/second. Increasing the Alpha Speed parameter makes it more transparent at a given speed. At zero speed, a particle is always 100% opaque.
Parameters - Limits Page
+ / - Limit Plane
/limitposx ... /limitposz /limitnegx ... /limitnegz - The particles will die or bounce off the limit planes when it reaches them. The six limit plane fields define a bounding cube. The default settings are
1000 units away, which is very large. Reduce the values to about one to see the effect.
/hit - Control over what happens when a particle hits either the six collision planes or the collide object. The options are:
- Die on Contact - The particles will disappear when they collide with the Collision input.
- Bounce on Contact - The particles will bounce upon contact with the Collision input.
- Stick on Contact - The particles will stick to the Collision input.
Gain Tangent / Normal
/gaintan /gainnorm - Friction parameters which can be regarded as energy loss upon collision. The first parameter affects the energy loss (gain) perpendicular to the surface. 0 means all energy (velocity) is lost, 1 means no energy is lost perpendicular to surface. The second parameter is the energy gain tangent to the surface.
- 1 and 1 means nothing is lost or gained.
- 0.1 and 1 cause the particles to strike the surface and dribble along it, like rain atop a roof.
- 1 and 0 makes them bounce perpendicular to the surface, no matter what angle they came in at.
- -1 and 1 makes the particle bounce back from whence it came.
- Gains greater than 1 cause energy gain (like a pinball machine bumper).
- No Splitting - The default setting, this keeps the particles intact.
- Split on Contact - The particles will split upon contact with the Collision Source.
- Split on Death - The particles will split when they die.
/splitmin /splitmax - When a particle splits, it splits into a number of other particles. The number of particles is randomly set between this range.
/splitvelx /splitvely /splitvelz - Each split particle is given this base velocity.
/splitvarx /splitvary /splitvarz - This is a random amount that is added to the split velocity. When creating fireworks, the variance is large while the velocity is low. When rendering raindrops splashing, the split velocity is large in Y, and the variance in X and Z causes the particles to bounce up - but randomly - in the XZ plane.