PopcornFX v2.5 is released!

PopcornFX v2.5

The PopcornFX v2.5 build is now available!

Make sure you upgrade your runtime / plugins before switching to this version.

You can also check out the changelog on the wiki, where you’ll find all download links and updated patch nodes.
Looking for version 1 of popcorn ? Go to the latest v1.x editor



Changelog 2.5.5 patch

Builds (May 29th 2020)

  • Fixed #4584: Crash when unpinning a Mesh Attribute bound to backdrop
  • Fixed #4576: Nodal editor: Crash when selecting a “local position to world” node followed by a “transform” node. In that order.
  • Fixed #4577: Curve editor: Moving multiple control-points at the same time is broken, messes-up everything when moving too quickly
  • Fixed #4602: Project launcher: When a more recent editor version is installed, opening a project tries to open it with the most recent editor by default
  • Fixed #4601: Project launcher: When a more recent editor version is installed, allows to “upgrade” to that version, but cannot apply upgrades and messes-up entire project by effectively skipping all upgrades.
  • Fixed #4569: Editor cache: When opening/building assets, the editor will recursively rebuild the cached asset onto itself, until the baked path becomes too long for the OS, causing unnecessarily deep cache folders
  • Fixed #3918: Content browser save on close: Does not pop warning dialog about writing corelib files
  • Fixed #4599: UE4: SpecularTexture isn’t assigned on ribbons/billboards materials when LegacyLit is enabled
  • Fixed #4592: UE4: GPU simulated effects crash on UE4.25 when running on D3D12


Changelog 2.5.4 patch

Builds (May 14th 2020)

  • Fixed #4554: Renderers: Crash when using custom-sort values
  • Fixed #4559: Project launcher: Crash when creating a new project from a readonly project file, or a non-existing path
  • Fixed #4547: Script node: “float” and “bool” are inverted in script node drop-down buttons
  • Fixed #4564: Effect editor: Effect repeat mode: Going from a 0 to a nonzero repeat delay instantly spawns lots of effect instances.
  • Fixed #4456: Effect editor propertygrid: Doing a Ctrl+X into a numeric inputbox and unfocusing it keeps it to the value that was just cut instead of resetting it to 0
  • Fixed #4558: All 3D viewports: Grid backdrop is broken when hot-switching coordinate systems in the project settings
  • Fixed #4553: JPG loader: Incorrect loading of Grayscale JPEG files, entire image shifted 2 texels to the left
  • Fixed #4470: UE4 plugin: Add UE4.25 support
  • Fixed #4469: UE4 plugin: Assert when reimporting UE4 effect


Changelog 2.5.3 patch

Builds (Apr 30th 2020)

  • Windows: PopcornFX-Editor_v2.5.3.63923_x64.exe
  • macOS: PopcornFX-Editor_v2.5.3.63923_x64.pkg
  • Linux: PopcornFX-Editor_v2.5.3.63923_x64.tgz
  • Fixed #4525: Crash when closing an effect editor when multiple other effect editors are opened, and rendering is using D3D12
  • Fixed #4524: Crash when hovering timeline tracks in effects where a layer exports an invalid output pin (a pin which is not an event)
  • Fixed #4518: Content browser: Cannot specify filename with non-ascii characters: Says “Invalid filename”
  • Fixed #4518: Propertygrid: When an asset path points to a non-existing asset, opening the browse window to pick a new asset makes it start in a garbage location (usually program files)
  • Fixed #4519: Mesh importer window: Settings icon opens rendering settings instead of mesh editor settings as advertised by the tooltip
  • Fixed #4515: Script properties: type dropdown of inputs & outputs have an inconsistent ordering of the types
  • Fixed #4351: Project launcher doesn’t refresh its project list when a .pkproj is removed
  • Fixed #4529: Nodal editor: “Clone template locally” does not work properly when cloning templates that contain layers
  • Fixed #4372: Sim GPU / Rendering : cannot render material that does not have the feature ‘enabled’
  • Fixed #4186: Light Renderers are not axis-system independent
  • Fixed #3730: Image sampler: BGRA4 linear clamp: Incorrect colors returned, slightly yellowish
  • Fixed #4411: Effect editor: Capturing a thumbnail shows all billboard particles as unlit in the captured thumbnail
  • Fixed #4417: Export to package: Treeview shows directory contents with files first then subfolders at the very end. Should show subfolders first
  • Fixed #4520: UE4: Skeletal mesh attribute samplers are always rebuilt when attribute sampler is destroyed/created
  • Fixed #4527: UE4: Profiler displays nans when no effects are active
  • Fixed #4537: UE4: FloatRGBA (hdr) image formats are not correctly supported
  • #4495: UE4: Add LLM markers
  • #4526: UE4: Add particle count per effect to the profiler
  • #4528: UE4: Add config option to enable PopcornFX profiling markers


Changelog 2.5.2 patch

Builds (Apr 16th 2020)

  • Windows: PopcornFX-Editor_v2.5.2.63604_x64.exe
  • macOS: PopcornFX-Editor_v2.5.2.63604_x64.pkg
  • Linux: PopcornFX-Editor_v2.5.2.63604_x64.tgz
  • Fixed #4458: Timeline payloads: Orientation payloads produce garbage when used
  • Fixed #4460: Timeline payloads: Cannot edit keyframe “Time” value
  • Fixed #4479: When determinism is forced in the timeline user configuration, effect editor recompiles entire effect twice when switching compilation mode from editor to shipping, or the other way round
  • Fixed #4464: effect.orientation sometimes returns NaN, depending on what transform nodes are already present in the current layer.
  • Fixed #4483: Crash when enabling CustomSortKey + Slicing
  • Fixed #4477: AssetBaker recompiles every effect twice: takes twice as much time to bake as it did in 2.4.x
  • Fixed #4463: Animtrack backdrop: Produces incorrect effect.velocity values
  • Fixed #4465: AnimTrack backdrop: Switching back and forth between different tracks messes up transforms
  • Fixed #4474: IR Panel: “Events” tab does not show event rate for root event when viewed from inside a layer
  • Fixed #4473: ‘orientation’ types produce warnings when used with discretization paths (for example using the “PreviousFrameValue” template)
  • Fixed #4498: User can create “Output Node” for input value, followed by a crash
  • Fixed #4459: Payload extract node: When extracting an orientation payload, if the payload presence could not be determined at compile time, and the layer was triggered without the payload, would output a invalid orientation instead of the identity orientation.


Changelog 2.5.1 patch

Builds (Apr 9th 2020)

  • Fixed #4451: Editor crashes when cross-referencing asset are unloaded: Can happen when deleting nodes, closing effect editor, and other operations…
  • Fixed #4405: Nodal editor: Crash when deleting a template while the nodal editor is viewing one of its child graphs more than 1 level deep
  • Fixed #4415: Renaming an asset in the content browser and choosing to patch references misses some refs in files when the uppercase/lowercase mismatches with the filename ondisk
  • Fixed #4419: Timeline: Editing timeline keyframe payloads when paused sometimes updates the sim and resims (as you would expect), sometimes doesn’t.
  • Fixed #4422: Timeline: Payload warnings in layergraph do not show actual timeline track name when the event comes from a root event node, says “layer “Track””, instead of “timeline track “ActualTrackName””, which doesn’t help
  • Fixed #4454: Nodal editor shows many false-positive info messages “Event … sends payload … which is not used by any of its targets”
  • Fixed #4423: VersionControl: Incorrect command-lines called when assets are saved by the dialog-box when closing the last editor window
  • Fixed #4424: SDK: FOV assertion when calling mediumCollection->UpdateView(), with Z-Up worldspace but Y-up viewspace.
  • Fixed #4452: SDK: Runtime asserts when loading effects which declare attributes without using them
  • Fixed #4109: Constant-fold chained XForms calls: w2l+l2w -> w2w
  • Fixed #4455: Content browser: Always display folder full names even if they contain dots in their filenames
  • Fixed #4367: Sampling normals from mesh sampler does not work when D3D12 GPU sim is enabled
  • Fixed #4363: Release assert when copy pastin ShapeSample node and D3D12 GPU sim is running
  • Fixed #4364: Shape samplers do not refresh until effect is restarted when properties are edited and GPU sim is enabled
  • Fixed #4338: Ribbon renderers do not support atlas blending


Changelog 2.5.0

Builds (Mar 30th 2020)


Nodal editor

  • #4313: Improved error message when a non-existing submeshID is used
  • #4262: Templates: When disabling node, allow specifying which input should passthrough into which output.
  • #4183: Nodal editor search: Keep a list of recent searches & save settings from one editor launch to another
  • #3996: Auto-exporting a property which other properties depend on now makes those other properties visible regardless of the current visibility rules, so you can auto-export them as well if needed.
  • Fixed #4370: Picking colors in nodegraph UI & color-picker is not gamma-correct (fix does not change existing effects, but the colors shown in the color picker now match the colors injected in the graph)
  • Fixed #4396: Renderers: Picking a new feature-set in any renderer node always pops file browser window at project root
  • Fixed #2423: Hard to resize annotate box

New script functions

  • #4232: Expose script function to extract side, up, and forward axes from an orientation: ‘orientation_axisSide’, ‘orientation_axisUp’, and ‘orientation_axisForward’, as well as corresponding corelib helper nodes: ‘orientation.axisSide/Up/Forward’, and ‘orientation.basisVectors’, which outputs all 3

Graph compiler & optimizer

  • Fixed #4321: Compiler: incorrect constant-folding and instruction-combination with ‘log’/’log2’ math functions
  • Fixed #4286: Layergraph payload optimizer: hitting the max iteration count on certain FXs
  • #4240: Optimizer ICB: detect basis vector extraction from effect orientation and combine into simpler effect axis getter
  • #4239: Optimizer ICB: detect rotation of a basis vector by an orientation and simplify into a basis vector extraction from the orientation + a mul


  • Fixed #4303: Curve integral in “Spline” mode is incorrect when control-point segments do not have the same length, produces broken CDF curves.
  • Fixed #4401: Curve probability sampling / CDF: When two curve keyframes have the same ‘x’ coordinate, breaks the CDF and makes it uniform
  • Fixed #4400: Texture sampler: Texture specified through an inline template property are always converted to BGRA8 at runtime and loose all HDR information
  • Fixed #4399: Texture sampler: Cannot sample the density of a texture specified through an inline template property, only works with an actual texture node.
  • Fixed #4391: view.distance() and view.unprojectedAxis() return an incorrect value when no camera views are registered in-engine. They should return +inf
  • Fixed #4390: Curve sampler: Crashes on x86-SSE machines when sampled with a NaN value
  • Fixed #4294: Some orientation helper nodes with nothing wired in produces a NaN orientation (orientation from forward, from up, from forward up, and from axis angle)
  • Fixed #4403: Mesh sampler: Always reformats vertex-buffer when loading effect, even when format is fine. Wastes time for no reason
  • #4172: Sim interfaces: Allow “partial” binding of sim interfaces when not all inputs are needed by the actual implementation

Simulation: GPU

  • Fixed #3997: GPU simulation glitches when starting some effects


  • #3967: Unify meaning of “Size” property between planar-aligned billboards and other billboard types: “Size” is now the particle radius for all billboard types. Was previously radius for all except planar, where it was the diameter.
  • #3940: Add GPU particles support for vertex shader billboarded particles
  • #3939: Add slicing support for vertex shader billboarded particles
  • #1523: Editor viewport: Add default renderer/material/shader to avoid invisible particles
  • Fixed #4326: Default material does not work with vertex shader billboarded particles
  • Fixed #4323: Rotation is inverted for planar aligned billboard with vertex billboarding
  • Fixed #4306: Incorrect display of editor cubemaps in overdraw view
  • Fixed #2005: Incorrect display of debug shapes in overdraw view
  • Fixed #4119: Particles disappear when modifying renderer properties
  • Fixed #4235: CPU-billboarding: normals and tangents are not rotated for screen-aligned billboards
  • Fixed #4288: Useless texture fetch for alpha when using an AlphaTest Opaque material


  • #4407: Image loaders: Add support for .hdr files
  • #4292: Add experimental version-control settings to make life with perforce easier
  • Fixed #4349: Hot reload: Meshes hot reload doesn’t work until assets are manually built
  • Fixed #4347: Hot reload: Samplers do not refresh when used resource is removed/renamed
  • Fixed #4348: Hot reload: D3D12 Rendering API crash when removing/renaming texture used by rendering
  • Fixed #4346: Hot reload: Renaming a file outside editor does not trigger a refresh of the resource
  • Fixed #4327: Hot reload: Render system does not pick up deletion notifications
  • Fixed #4296: Crash when importing package from an older version with different library directory setup than target project

Effect editor

  • #2383: Viewport: add color saturation in the post-FX parameters
  • Fixed #4369: crash when two renderers are compatible feature-wise, but have mismatching billboarding modes, and are rendered using vertex shader billboarding

Mesh importer

  • #4298: Mesh importer: Add “Import” button to manually reimport after having changed some settings
  • #4293: Add support for Granny’s .gr2 meshes (if you have a granny SDK and want to use your .gr2 meshes in popcorn, you will need to tell the editor where to find your Granny dll, drop us a line)

Material editor

  • Fixed #4389: Material editor takes a long time to open
  • Fixed #4322: Material editor: huge stall on main thread when launching async shader compilation
  • Fixed #4319: Material editor: huge performance hit when shaders are compiling

Content browser

  • Fixed #4275: Occasional crash on editor startup during asynchronous effect analysis
  • Fixed #4300: Baking/importing assets ignores the list of allowed asset extensions setup in the project settings


  • New upgrader @ v2.5.0.62099: Renamed corelib templates. (ex: ‘OrientationFromForward’ -> ‘orientation.fromForward’, ‘SceneProperties’ -> ‘scene.properties’)
  • New upgrader @ v2.5.0.62233: Unify meaning of ‘Size’ property between planar-aligned billboards and other billboard types: Change ‘Size’ to always mean the radius
  • New upgrader @ v2.5.0.62501: User configuration file: Reorganized/renamed some settings
  • New upgrader @ v2.5.0.63107: Upgraded corelib files

Assets & core-lib

  • #4105: Added scene wind support in Physics node
  • Fixed #4162: Templates corelib: ‘Collision’ template: Particles fall through the floor
  • Fixed #4320: Templates corelib: ‘PreviousFrameValue’ node doesn’t work with ‘bool’ types
  • #4398: Templates corelib: New ‘Timer’ template, that counts the elapsed time since started, with ‘Start’ and ‘Stop’ bool inputs
  • #4397: Templates corelib: New ‘Counter’ template that counts the number of times an input condition is ‘true’
  • #4297: Templates corelib: New ‘PivotMesh’ helper template to specify a pivot to a mesh renderer
  • #4249: Templates corelib: New autoinlined templates: Suffixed with “(rig)”: sampling helpers that drop the sampling node AND the resource node, spatial layer helper rigs, simple emitter rigs, rand float, rand float2, rand float3, and rand float4 helpers.
  • #4230: Templates corelib: ‘TimeBasedCursor’ is now available as a public template
  • #4228: Templates corelib: Add ability to rotate vector-field in physics node and vector-field sample node
  • #4227: Templates corelib: Add ‘transform inverse’ node to complete existing ‘transform’ node
  • #4225: Templates corelib: ‘effect.orientation’ : Add static orientation offset like in ‘OrientationFromXXX’ nodes
  • #4224: Templates corelib: ‘OrientationFromEuler’ template is not axis-system independent, and inconsistent with OrientationFromXXX templates
  • #4242: Templates corelib: ‘EventMultiplier’ adds new payloads to its output event
  • #4395: Fork ‘SmallPointAA’ to ‘SmallPointAA_Attribute’, and make original ‘SmallPointAA’ not automatically expose an attribute
  • Fixed #4394: ‘SmallPointAA’ template: Behaves badly when no camera views are registered in-engine: produces infinite sizes
  • Fixed #4226: Templates corelib: ‘OrientationInvert’ node cannot be used without an input: Produces compile error



  • #4361: UE4: Improve auto scene actor creation
  • #4332: UE4: Add support for volumetric fog particles
  • #4055: UE4: Hook onto scoped profile nodes so PopcornFX profiler nodes appear in UE Insights
  • Fixed #4362: UE4: Vertex shader billboarding mismatch with PK-Editor rendering
  • Fixed #4334: UE4: ParticlePosition, ParticleSize, ParticleRadius are incorrect when using vertex shader billboarding
  • Fixed #3875: UE4: Enabled pin not supported for light and sound renderers


  • #4011: Unity: Support exported events
  • #4010: Unity. Add Option to enable localized pages
  • #4005: Unity: Implem DX12 RenderAPIData
  • #4002: Unity: Make distortion work with GPU billboarding

Content examples update

New “Tutorials” effects