The Temporal Smooth operator can be used to smooth out the trajectories of moving particles over time.
The Temporal Smooth operator does in 4d space what the Relax modifier in 3ds Max does in 3d space - it applies a laplacian filter to the sequence of transforms which represent a particle’s movement over time. By smoothing out the sequential changes between those transforms, jittering and other artifacts can be reduced. This reduction of jitter is especially useful for cloth or rigidbody simulations.
In order to perform a temporal smooth, a complete sequence of particle trajectories must be computed and then processed by the algorithm. For complex setups (ex: high resolution cloth) this can take a huge amount of RAM. For that reason, temporal smooth data is not saved to disk. If you open a file with a Temporal Smooth operator, you must manually re-compute the smooth operation following the steps described below. For that same reason, if you want to render the result of a temporal smooth on a render farm, you must cache the result of the smooth and render the cache instead. The Temporal Smooth operator does not operate like a passive operator in a flow which automatically recomputes its data when the inputs of an underlying simulation are loaded or modified. It requires manual activation each time an underlying flow is changed, and is meant to be something a user manually applies before exporting particle data to a disk cache (ex: exporting to a tyCache). In other words, if you want to make a change to your simulation, after you make the change you must click the cache button in the Temporal Smooth UI again to apply proper smoothing.
Although the Temporal Smooth operator can be added to any type of flow, you should avoid adding it to a flow with any post-operator solvers. For example, a flow with PhysX operators, bind operators, actors, etc - basically any type of setup where particle data can be modified by internal solvers which process particle data after all operators have completed their steps. This is because the Temporal Smooth operator should be treated as a post-effect applied to particles, and not an operator which could potentially influence the simulation it is meant to be smoothing. In those situations, the Temporal Smooth operator should instead be added to a “reference” flow (a flow consisting of Birth Flow and Flow Update operators which import particle data from a separate flow or cache) which references the flow that contains the post-operator solvers. That way, the Temporal Smooth operator won’t inadvertently influence any other solvers.
If you want to temporally smooth a deforming mesh (like a cached cloth simulation), import the mesh into a flow with a Birth Objects operator, convert to cloth with a Cloth Bind, deactivate the cloth particles with a Particle Switch and finally bind the cloth particles to the original deforming input mesh with an Object Bind operator set to surface bind mode. This will generate a new deforming mesh in your flow which follows the motion of the input deforming mesh exactly. A Temporal Smooth operator can then be added to that setup and it will not interfere with any internal post-step solvers (due to the de-activation of the cloth particles using the Particle Switch operator).
If the only settings you’re changing in a flow are these smoothing settings, you can avoid having to re-cache the data of the underlying flow (in order to update the temporal smooth result) by simply clicking the “re-smooth particle data” button below. If any other settings change, the “cache and smooth particle data” must be pressed instead, so that the cache of the underlying flow remains up to date.
Amount: the amount to smooth each individual particle transform along its overall trajectory.
Iterations: the number of successive smoothing iterations to apply.
Higher iterations can lead to smoother overall trajectories, at the cost of speed.
In some situations, you may not want to smooth all transform data. For example, in a PhysX simulation where a rigidbody hits the ground and jitters on the ground, you may want to smooth the jittering, but not smooth the hard impact. By adjusting these thresholds you can control which parts of a particle’s overall trajectory are smoothed.
Position: the maximum distance a particle may travel across time steps in order for the position data at that time step to be smoothed. Position changes across time steps larger than this value will not be smoothed.
Rotation: the maximum angle a particle may rotate across time steps in order for the rotation data at that time step to be smoothed. Rotation changes across time steps larger tha nthis value will not be smoothed.
Scale: the maximum amount a particle may change in scale across time steps in order for the scale data at the time step to be smoothed. Scale changes across time steps larger than this value will not be smoothed.
When you are satisfied with the result of an underlying simulation, click this button to activate the temporal smoothing algorithm. First it will re-simulate the flow within the bounds of the specified frame range and collect all relevant particle transform data. Then it will process the data and smooth it using the specified smoothing values. Once smoothing is complete, the flow can be simulated once again but this time the Temporal Smooth operator will assign the smooth transform values to relevant particles that enter the event, overriding their existing values.
If you have only adjusted the smoothing settings of the operator, you can click this button to re-smooth the cached data without having to re-cache the data again.
When a flow is updated or resimulated, the internal Temporal Smooth cache is not automatically re-computed. You must manaully activate the smoothing algorith with the provided UI buttons to re-cache and re-smooth the particle data. That is why you should treat the Temporal Smooth operator only as a post-effect manually applied to particles immediately prior to export. The reason for requiring manual activation is due to the fact that the temporal smoothing algorithm can be quite slow in certain circumstances, and it requires a complete re-simulation of the desired frame range each time it is computed. To avoid constantly interrupting the user with these slow re-simulations, activation of the algorithm is left to the user to do manually at a time of their choosing.