The PopcornFX team honored me recently by including content I’ve created as part of the official 2.10 release. As they work towards a version in which user content can be uploaded and shared freely, the team approached me knowing I had a pack of templates and example projects I was intending to share out to other users. I was flattered and pleased to share this content out via an official release like this.

It’s worth noting that PopcornFX is free to download and use for personal learning, as is this content pack. https://www.popcornfx.com/ The content I’ve contributed can be downloaded directly from the editor and is among the “official” learning content and examples.


By including this content in the 2.10 release they have a demonstration and first test of how new nodes and files can be created by a third party and shared among users.
The content is a collection of 31 “templates” or custom nodes I originally created for myself as I worked with PKFX. The nodes are documented and tested and vary widely in both their usage and usefulness. A few are so helpful I use them in practically everything I do now, while others are very specific in their use cases.

In addition there is a small suite of “example” files showing various effects, each cleanly presented, commented and documented.

I tend to clean and document files for myself as part of my creation process so it didn’t take much effort to prep these files for the public. Hopefully they will spark interest and prove useful as examples of one user’s workflow, in tasks both simple and advanced.

Read more for descriptions of each of the nodes included:
New nodes
Random Spherical Vector |
Produces a pure random vector from a unit sphere. |
Random Value In Cone |
Generates a random vector in a conical arc with the center by default oriented in the positive Y axis. |
Test If Points Intersect Plane |
Tests point position to determine if it intersects an infinite plane. |
Spring Force |
Plug into acceleration. Updated position is the particle position on current frame. Rest position is the point the spring seeks to reach. Spring constant is a measure of the “tightness” of the spring. |
Wander Around Position |
Randomly moves offset around center point position. Two methods available, with their own strengths and weaknesses. Keep seed values low. |
Normalized ID |
Applies a unique ID ranging from 0 to 1 for all spawned particles. Only works when there is a total (fixed) number of particles spawned. |
Time Based Rand |
Instead of a unique value per-point this random function delivers a single random value at spawn or per frame. |
Animated Noise |
Noise function animated over the effect age. |
Linear Probability |
Produces a boolean and optional values based on a random probability between 0 and 100. |
Spiral Trails |
When used in a “trail” layer this template causes resulting trail to be a spiral around the parent particle’s path. |
Spin on Axis |
Animates an incoming vector (position) to rotate around axis over time. |
Point Visibility By Facing |
Outputs a number 0 or 1 based on whether a point is on the front, back or edge of the sphere of the point normal. |
Sparkle Color |
Flickers colors over the particle’s lifespan. |
Flicker Value |
Flips between two values based on a random noise. |
Position On Circle |
Outputs a vector which lies on a circle defined by input values. |
Oscillator |
Oscillate between two values. User can choose between several waveforms via a dropdown on the node. Speed is in seconds. |
4 Pole Switch |
Choose between 4 inputs via a dropdown list on node. |
3 Pole Switch |
Choose between 3 inputs via a dropdown list on node. |
2 Pole Switch |
Choose between 2 inputs via a dropdown list on node. |
Value by Distance To Camera |
Sets a range of values based on each point’s distance to camera. |
Kill by Camera Distance |
Deletes particles closer or further than a set distance from the camera. |
Identify Single Point |
“Tags” a single point or range of points and returns true when graph evaluates them. Use with billboard “enable” to render a single point. |
Newtons Universal Gravitation Force |
Simple implementation of universal gravitation. Plug into acceleration. Position should be discretized (updated per frame.) Values are arbitrary, not real-world. |
Set Circular Orbital Velocity |
Calculates velocity needed to place point into a circular orbit when using a universal gravitation force. Normal vector is typically the effect.up vector. |
Position On View Axis |
Outputs a position along the axis of the camera into the scene, with distance 0 being the camera position. Useful for defining focal planes etc. |
Color Turbulence |
Defines a color based on the location of a point within a vector field. |
Spatial Basis Rand |
Returns random values based on position in a vector field. Must have a “turbulence” node added to sampler input. |
Generate Ring |
Distributes all spawned points in a ring or arc. Requires a static (total) number of points. |
Generate Cyber Rings |
Distributes spawned points into a series of circular arcs. Total spawned points must be static, though they can be animated in the layer. |
Generate Line |
Distributes spawned points on a line between two input locations. Unlike the debug “draw line” this line is made up of spawned points which can be further animated. Requires a static (total) number of points spawned. |
Random Static |
Useful for “glitch” effects. Offsets positions by a random value at random intervals. Spatial mode requires a turbulence sample. |