PopcornFX v2 is released!

PopcornFX v2

The PopcornFX v2.0.0 release build is now available !

Release patch:

You need to upgrade your existing projects in order to use it.
We updated the ‘Tutorials’ and ‘Samples’ online packages.
Select the ‘Online Packages’ tab in the project selection window and download the latest ones.

First time using PopcornFX v2.0? Take a look at the Getting_Started wiki page.


This version will upgrade your beta-4 projects. Some important changes have been made, and some manual steps might be required (please note that we only considered this exceptional and acceptable because we were still in beta, not in production, all builds from now on will have, like v1.x, strict upgraders that will ensure effects made in a previous version run the same way in a new version)

1 – Default names shown on some nodes

All templates and template export nodes now automatically show a default name if they are not named explicitly (#1903 & #1905)


PopcornFX v2 - Release note - Default Node Names
Default Node Names

2 – Data nodes in the layergraph

You can now use data nodes in the layergraph and wire their results inside data pins exposed from layers (#1845)

This is especially useful to customize the ‘SpawnCount’ of multiplied nodes with dynamic values coming from attributes or curve samplers.

PopcornFX v2 - Release note - Data Nodes In Layergraph
Data Nodes In Layergraph

3 – Angles in degrees

By default, all nodes and script functions expecting angles are expecting them in degrees instead of radians, and expose an ‘AngleUnit’ property set to ‘Degrees’ by default, which allow you to revert back to the old behavior if you prefer working with radians.

Scripts expose new degrees and radians namespaces, and all functions working with angles now exist in those namespaces as well as the default namespace.


float a = sin(MyAngleInDegrees);
float b = degrees.sin(MyAngleInDegrees);
float c = radians.sin(MyAngleInRadians);

IMPORTANT: There is still one exception left that we will update in a later build: Billboard renderers still expect their ‘Rotation’ input pin to be given an angle in radians.

4 – New color picker

We started reworking the color picker, there’s still much work to be done on it, but it should already be much more usable than the old one.

PopcornFX v2 - Release note - Color Picker Old
Old Color Picker
PopcornFX v2 - Release note - Color Picker New
New Color Picker

Additionally, you can pop the color picker in the curve editor by selecting a keyframe and hitting the ‘C’ key.

5 – D3D12 GPU simulation: Implemented samplers

The D3D12 GPU simulation backend now implements the shape, texture, curve, and turbulence samplers. (#1836)

6 – Import/export packages

Can right-click on a selection of assets & folders and pick ‘Export To Package’ to generate a .pkkg archive containing those assets and all their dependencies, and import such packages in a project through the File > Import Package menu

PopcornFX v2 - Release note - Export Package
Export Package

7 – New asset picker widget in propertygrid

Added a new asset picker widget that shows a preview of texture assets, and details of texture and mesh assets such as resolution, compression format, ondisk size, triangle count, etc..

PopcornFX v2 - Release note - Asset Picker
Asset Picker

8 – File save performance improvements

Vastly improved performance of file saving (~4x faster), mitigates framerate spikes when autosave kicks in on large files (#2073)

9 – True support for ‘bool’, ‘bool2′, bool3’, ‘bool4’ types added

Compiler now handles real ‘bool’ types (#1144).

Can use those inside scripts, and all boolean operations such as compare nodes are now typesafe.

IMPORTANT: If you had effects doing integer arithmetic on the result of a compare operation, you will need to patch them by hand to get the same behavior in v2.0.0 as you had in beta-4 and below.

Beta-4 and previous:

int x = a < b; // x is either 0 for 'false', or -1 for 'true'

v2.0.0 release and later:

int x = a < b; // x is either 0 for 'false', or 1 for 'true'

10 – Edit multiple nodes at once in propertygrid

Multiple nodes can now be selected and edited simultaneously in the propertygrid (#1182)

Only properties present in all selected nodes are displayed.

Properties that have different values will be highlighted in red for emphasis.

PopcornFX v2 - Release note - Property grid Multiselect
Property grid Multiselection

11 – Improved nodegraph search

Ctrl+F Search in nodegraph can now focus prev/next node matching the search

PopcornFX v2 - Release note - Find Next
Find Next

12 – And also

  • New view mode for determinism (#1938)
  • Skinned mesh backdrop (#1714)
  • Draw call sorting method (#1998)
  • Documentation generator improvements (#2002#1956#1957)
  • Renderer atlas source is now set to ‘Procedural’ by default
  • Many optimizer improvements
  • Various editor UX improvements
  • lots of bugfixes

13 – New templates & template-library changes

  • New ‘CurveOverTime’ template, allowing to sample a curve over different time-varying presets, as well as repeat & time-scaling options
  • New ‘Color’ template, allowing to create or modify a color

The core template library has also been reorganized:
Legacy v1 templates were renamed & split into v2 versions.
Split into more subfiles:

  • Core
  • Events
  • Legacy
  • Color
  • Dynamics
  • Trails
  • Placement
  • Utils

14 – Stabilization & bugfixes

PopcornFX v2 has seen a pretty large number of bugfixes and stabilization fixes.

Read the full changelog here


Important bugfixes

Fixed #2219: Curve editor: Bad tangent input-box behavior.
Fixed #2223: Simulation seems to sometimes fallback to default turbulence inside Physics template. Caused by false-positives when merging resources in effect optimization pass.
Fixed #2235: Backend: integer ‘sign’ function always returns ‘0’ for positive numbers, instead of returning ‘1’, when given a compile-time constant input value.
Fixed #2242: Package import stalls on computers with low processor counts.
Fixed #2213: Texture sampler hot reloading doesn’t work with photoshop.
Fixed #2200: Rendering: Linear atlas blending doesn’t work in editor
Fixed #2256: GPU: crash in D3D12 with too many particles
Fixed #2257: Editor: crash when rendering too many particles


Fixed #2221: Timeline Events are only taken into after saving the effect and launching it again.
Fixed #2236: GPU sim: ‘sign’ function has different behavior than CPU backend.
Fixed #2228: Optimizer: Bad constant-folding function hooked to spatial layer’s ‘closest2’ function, causes incorrect simulation results when the inner-radius of the query is a constant zero.
Fixed #2229: Constant folding of null turbulence sampler coming from an unplugged template pin does not work anymore.
Fixed #2145: Content browser treeview: Selection tracking glitches.
Fixed #2245: Occasional project launcher crash when trying to import package into project.
Fixed #2246: Occasional crash when creating link from pin.
Fixed #2248: Crash when effect file deleted while opened in effect editor.
Re-enabled D3D11 GPU simulation in editor.
Fixed #2190: Multiple SetLife nodes running at the same rate will conflict without warning, and behavior will be unpredictable: Now displays a warning.
Fixed #2244: Nodal Editor: crash when undoing creation of a node contained in an annotation while moving annotation.


Important bugfixes

  • Fixed #2285: Corelib templates: “EventDelay” node insta-kills events when set to zero
  • Fixed #2278: Nodal Editor: crash when right clicking a pin while dragging a link
  • Fixed #2194: Determinism is broken when spawning large amounts of child particles in a single frame (any kind of event multiplication: multiplier nodes, trails, custom generator node in a layer…)
  • Fixed #2149: Viewport : Messed-up camera zoom controls at low framerate / bad management at low framerate
  • Fixed #2113: High editor CPU usage even when no effect editor opened & no sim running


  • Fixed #2284: Corelib templates: “Trigger Once” node contains a cast from int to bool and emits a warning whenever using it
  • Fixed #2261: Nodal Editor: Annotation doesn’t move contained nodes after undo
  • Fixed #2214: Particle selection broken in viewport if there are non finite renderer positions in the effect
  • Fixed #2212: Wrong filename shown at the end of the package export process
  • Fixed #2319: Curve editor: bad UI update when toggling/untoggling curves
  • Fixed #2315: Curve sampler constant folding asserts and fails when the curve comes from a property.

Content examples update

The “Tutorials” online package has a new example effect 038_Events_Library.pkfx, which showcases some the event nodes & helpers available in the core template library:

  • Event multiplier
  • Event divider
  • Event delay
  • Event random pick
PopcornFX v2 - Events Library
Events Library


IMPORTANT: previous installers created a “.gitignore” file in your project’s “Library/” folder.
This patch fixes the issue (#2343). If you are using git, make sure you delete this .gitignore to avoid problems.

Important bugfixes

  • Fixed #2343: PopcornFXCore Library contains a .gitignore
  • Fixed #2380: Nodegraph: Crash when grouping a node that has its panel open
  • Fixed #2338: Opening new windows through double-click places them behind existing windows


  • Fixed #2365: Rare crash when opening effect
  • Fixed #2329: Bounding box computations only take into account a single renderer when a particle has multiple renderer (regression since v2.0.1)
  • Fixed #2317: Nodegraph: Layers output events default visibility is invisible by default
  • Fixed #2364: BaseObject: Loading a PKBO file does not set the proper value to CBaseObjectFile::GeneratorTag
  • Fixed #2322: Package Import: Improve user feedback when a package is upgraded on import
  • Fixed #2334: Project launcher: “Open with v1” button is broken, editor doesn’t find v1.x installs anymore