This node will make either a mesh, volume or particle effect loop.
The general idea is that it will offset the animation by half of the timeline and then do a sinewave to blend between the two animations.
This will work with meshes with constant topology or volumes, or with particles coming out of a popnet with the right attributes.
Mesh sequence before looping applied
Mesh sequence after looping applied
If you set the time range too short for particles, all particles will be removed before looping; You will therefore have to modify their lifespan settings accordingly. You need the following point attributes from an input particle system to get it to work: “id”, “age”, “life”, and “pscale” (it will be created for you if it is missing).
First frame of the input animation.
Last frame of the input animation.
Num. of Double-Loops
The loops are always created in pairs of two, e.g.: if this paramater is set to 1/2/3, you will see 2/4/6 visually repeating cycles. This is due to how the looping effect is achieved. For instance, let’s say this parameter is set to N (and N is 2) and the animation duration is 200 frames:
first, the base animation is divided into N sections (2 sections); only the first section is retained and it is repeated for N times (2 times);
then, the repeated first sections (100 frames per section) are copied and shifted by half the section length (50 frames);
finally, the base sections (repeating 100-frame sections) and the shifted sections (repeating 100-frame sections with a 50-frame offset) are blended or added together, creating seamless transitions. As a result, in the length of a single base section (100 frames), the visuals actually repeat twice (once every 50 frames). Hence the loops are more appropriately called “double-loops”.
Born Before Loop Start
Sets how to handle particles born too early. For the looping to work, the birth and death of a particle must be within the range of the first double-loop, e.g.: if Num. of Double-Loops is set to 2, the end of the first double-loop is half-way between Start Frame and End Frame.
Dead After Loop End
Sets how to handle particles dying too late. For the looping to work, the birth and death of a particle must be within the range of the first double-loop, e.g.: if Num. of Double-Loops is set to 2, the end of the first double-loop is half-way between Start Frame and End Frame.
It is recommended to reduce the life expectancy of your particles to fit within the range of a double-loop. But if you have to clamp particle lives at the end of the double-loop, it may result in a sudden drop in particle count as a lot of particles die at once. You can counter this with Fade Out Pscale.
Prevent Loops from Repeating Particle IDs
Offsets the point IDs from different loops to avoid repeated ID values. It is recommended to leave this on. Please note that this will not fix already repeated IDs on the input geometry.
Particle Wrap Mode
Particles still alive at the end of the whole animation (from Start Frame to End Frame) will have the rest of their lifespans wrapped to the start of the animation.
Stay Alive …: is best suited for Houdini; it keeps the IDs consistent and ages the particles naturally.
Die at the End …: is suited for Niagara; it offsets the ID, age, and life attributes to create two distinct groups of particles for the end and the start of the animation; it will often result in a few mismatched particles during emitter loop transitions, which can be countered with Fade In Pscale.
Spawn at the Start …: is suited for Niagara; instead of wrapping particles, it spawns them at the start, keeps them alive throughout the animation, sets their pscales to zero when they should be invisible, and then lets them reappear near the end of the animation; it does not create mismatched particles during emitter loop transitions, but it will waste some resources moving invisible particles.
Never Spawn …: premptively removes the particles that need wrapping; it sidesteps the problem, but it will result in noticeable drops in particle count during emitter loop transitions.
Fade In Pscale
Linearly scales the “pscale” attribute from 0% to 100% at the start of each particle’s original lifespan (unaffected by any modifications to the age and life attributes from particle wrapping). This is particularly helpful when Particle Wrap Mode is set to “Die at End and Respawn …”, as this obfuscates the minor glitches that may happen during emitter loop transition.
In seconds, the absolute duration of each particle’s pscale fade-in effect.
Fade Out Pscale
Linearly scales the “pscale” attribute from 100% to 0% towards end of each particle’s original lifespan (unaffected by any modifications to the age and life attributes from particle wrapping).
In seconds, the absolute duration of each particle’s pscale fade-out effect.
Output Preview Geometry
Outputs preview geometry with primitive spheres. The pscale attribute affects the scales of the spheres. Turning this on overrides the output of this node, so turn it off to output the actual particles.
Color by Normalized Age
Colors the preview spheres using the age attribute divided by the life attribute. The 0-to-1 value is mapped to the violet-to-red color gradient.