PopcornFX v2.22 is released!

PopcornFX banner v2.22

The PopcornFX v2.22 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.


Note: UE4 & UE5 plugin archives are provided as 7z archives for better compression. They can be extracted using 7zip.

Highlights

Check out the PopcornFX 2.22 release highlights livestream, where a few members of the team dive into some of the new features:

YouTube player

Changelog 2.22.6

Builds (Dec 4th 2025)
  • Fixed #14758: Editor/Shipping discrepancy with effect transforms
  • Fixed #15214: Image density profiles: Lattice density lookup with ‘F16’ packing mode is broken, causes crashes when sampling
  • Fixed #15188: Grid attribute samplers: Resetting the effect doesn’t clear the grid contents
  • Fixed #15206: Animtrack backdrops: At lower framerates, effect start at world origin after reset, before snapping to animtrack location, mostly visible when used to drive trails
  • Fixed #15132: Unreal Engine: using FName to search for PopcornFX strings is unsafe
  • Fixed #15237: UnrealEngine: Disabled decals keep rendering their last state
  • Fixed #15137: RenderHelpers: having multiview enabled with ribbons that need sort trigger an assert
  • Fixed #15139: Attributes: min and max numeric values are not correctly used for colors and when HasMin or HasMax arent checked
  • All v2.20.12 LTS fixes
  • Fixed #15230: Undo stack can become frozen and unusable after doing some specific actions
  • Fixed #15270: Nodal editor sometimes crashes when doing Ctrl+X to cut nodes out of a graph and the selection contains some passthroughs
  • Fixed #15178: Unity: Macos dylib is not correctly signed

 


Changelog 2.22.5

Builds (Oct 9th 2025)

  • Fixed #14997: Curve step interpolation always ignores last control-point @ t=1.0 (or beyond if HasTimeBounds is unchecked)
  • Fixed #14923: Attribute sliders always clamp to the specified minmax even if ‘HasMin’ or ‘HasMax’ is not checked.
  • Fixed #14999: Crash when creating a new project from a marketplace package
  • Fixed #14801: Nodegraph: Creating an input node named “Spawn” inside a layer, with a type different from “event” will brick the layer builtin “Spawn” pin, even after deleting the manual input node.
  • Fixed #14797: Curve step interpolation produces visible linear interpolation between each step. Always on GPU, and on CPU as well unless curve quality is set to ‘Exact’
  • Fixed #14716: Unreal Engine 5.5/5.6: GPU sim doesn’t always work
  • Fixed #15002: Unreal Engine: Sound renderers don’t work
  • Fixed #15003: Unreal Engine: PK_ASSERT(IsInRenderingThread()) always trigger at launch in CParticleScene::GatherSimpleLights() on UE >= 5.5
  • Fixed #15009: Unreal Engine: Ribbons flip uv is broken without correct deformation
  • Fixed #15030: O3DE: PopcornFX asset builder conflicts with the builder of the custom asset example gem
  • All v2.20.12 LTS fixes
  • Fixed #15031: Attributes: Enabling ‘HasMin’ without ‘HasMax’ and setting a min value above the max value (even though it’s grayed out), causes the min value to use the max value, and appear to not clamp the attribute value at all
  • Fixed #15000: GPU sim: self.lifeRatio has the value at the start of the frame instead of the value at the end of the frame as it should be. Works as expected in CPU sim.

 


Changelog 2.22.4

Builds (Sep 26th 2025)

  • Fixed #14825: Effects with broadcasted events & unused timeline tracks fail to load once baked, trigger asserts
  • Fixed #14819: Private attribute samplers are exported in baked assets
  • Fixed #14818: Particles are invisible when materials fail to be created
  • Fixed #14683: Unreal Engine: Some effects that reference .exr files fail loading them once in unreal
  • Fixed #14808: Unreal Engine: Decals have rotated scale, too agressive batching, sometimes don’t get removed
  • Fixed #14811: Unreal Engine: effects with private attributes fail to load in packaged builds

 


Changelog 2.22.3

Builds (Aug 28th 2025)

  • Fixed #14742: self.kill not working when the condition comes from a fenced sub-graph
  • Fixed #14756: D3D GPU sim: onLodChange triggers incorrectly
  • Fixed #14772: Spatial layer from layers with SimLocation to Auto and CPU never matches
  • Fixed #14775: Image conversions: Incorrect BGRA8 -> Fp16Lum conversion, produces corrupt image (whole image, all image sizes), and incorrect BGRA8 -> Fp16LumAlpha & Fp16RGBA for a small number of texels for non-power-of-two textures
  • Fixed #2296: Curve sampler: Color gradient is showing linear colors as if they were sRGB, causes colors displayed in the curve to mismatch actual colors rendered afterwards when using the curve as particle color
  • Fixed #14709: Curve editor is messed up if a value is set to inf
  • Fixed #14713: Curve editor color picker: Clicking ‘Cancel’ or closing the window without validating does not revert the color to the value it had before.
  • Fixed #14720: Editor: Crash when selecting particles that sample the PCoords of a mesh in ‘Vertex’ mode
  • Fixed #14740: Mesh generator: PKGO files ignore the KdTree, sampling accel, & uv2pcoords build settings
  • Fixed #14743: Various crashes when opening an effect that has been partially corrupted, yet where parts of it are still salvageable.
  • Fixed #14745: Asset Generators (Mesh & Texture): it is possible to set an asset as its own input source, causing a crash
  • Fixed #14746: Mesh Generator: hovering the asset’s thumbnail does not show the correct amount of triangles and vertices
  • Fixed #14748: Editor & Baker: Converting a BGRA8 texture to RGBA16F only converts the first quarter of the texture.
  • Fixed #14752: Editor texture viewer: Bake config is ignored in viewer if ‘AppendExportExtToOriginalExt’ is checked in the texture’s bake settings panel
  • Fixed #14760: Editor: Text sampler: Kerning doesn’t work in-editor, always fails to load the font file and get the kerning metrics.
  • Fixed #14779: Effect editor: Timeline: Shortcuts to step to prev/next frames do not work
  • Fixed #14705: Spatial query node: Irrelevant properties/pins stay visible when changing the query type (ex: NeighborIndex, only valid for ‘Closest’ and ‘GetFromCell’ queries), should show/hide dynamically
  • #13905: UnrealEngine: Add support for Decal renderer
  • Fixed #14514: UnrealEngine: Binding broadcasted event in blueprint don’t trigger the callback
  • Fixed #14698: UnrealEngine: GPU Billboards crash in Unreal Builds
  • Fixed #14774: Unreal engine >= 5.5: many warnings when building
  • Fixed #14773: Editor: relevant nodes are filtered out when dragging a typed wire
  • Fixed #14769: Unity: Android standalone Crash on startup caused by LogSystem
  • All v2.20.11 LTS fixes
  • Fixed #14741: Occasional crash when interesecting with a mesh that does not have the KdTree serialized, and has it lazy-built at runtime.
  • Fixed #14744: Optimizer: bad ICB that can remove used instruction and have uninitialized register
  • Fixed #14771: Linux Editor: trying to move the camera in the effect viewport only works half of the time
  • Fixed #14770: Linux Editor: Crash when editing some values like sliders
  • Fixed #14751: Linux Editor: Crash when trying to link two nodes
  • Fixed #14734: O3DE: Crash on android in sleep mode
  • Fixed #14733: O3DE: Link error on 25.10

 


Changelog 2.22.2

Builds (Jul 24th 2025)

  • Fixed #14605: Autosave recovery dialog is not explicit enough when recovery file is potentially corrupt (due to BSOD, disk error, etc..)
  • Fixed #14607: Import package: Do not auto-check package thumbnail when importing
  • Fixed #14622: Editor: Portal node outputs can be duplicated without duplicating the portal entrance
  • Fixed #14626: Editor: Cannot bake to PKSON
  • Fixed #14647: Opening a project on some machines is unexpectedly slower in 2.22 than 2.21
  • Fixed #14685: Material interfaces: Cannot rename properties in a render-feature that are in the ‘General’ category. Appear as if it’s renamed, yet not saved, changes disappear when reopening the file.
  • Fixed #14689: Material interfaces: Renaming a render-feature property does not properly patch material adapter graphs in the material files that use this render-feature
  • Fixed #14687: Editor: Rendering crashes when a render-feature property category name differs between the .pkri and the .pkfx files that use it.
  • Fixed #14603: Unreal Engine: Effect thumbails are broken
  • All v2.20.11 LTS fixes
  • Fixed #14497: Orientations exposed as layer properties in the layergraph do not properly recompile layer when changed in the propertygrid
  • Fixed #14681: Unity: Node Effect.scale don’t get applied

 


Changelog 2.22.1

Builds (Jul 3rd 2025)

  • Fixed #14604: Linux Editor: Crash when opening effect editor using vulkan on linux
  • Fixed #14599: Texture generator: Crash when switching output image format to Fp16RGBA
  • Fixed #14600: Texture generator: Setting output image format to Fp32RGBA produces empty texture preview in the texture editor. However texture is still properly baked.
  • Fixed #14623: Texture generator does not work on non-Y-up axis systems
  • Fixed #14615: Content browser: Creating some assets pop an error message saying the asset cannot be created, but the asset is in fact properly created.
  • Fixed #14602: Project launcher: Marketplace: Opening a package shows folders as assets inside the asset list.
  • Fixed #14274: Unreal Engine: scrolling in Details window is broken when a panel is open
  • All v2.20.10 LTS fixes
  • Fixed #14598 Unity: PS5NGGC renderer crash

 


Changelog 2.22.0

Builds (Jun 25th 2025)

Templates & Corelib

  • #14574: ‘uv.transforms’: Add Translate, Rotate, Scale, & Pivot controls
  • #14564: ‘Local to World’ nodes: Add an option to use effect instance transforms at spawn instead of payload transforms
  • #14343: Add linear mode to the ‘EaseToTarget’ node
  • #14264: Add horizontal vector math helpers: Horizontal min & Horizontal max
  • Fixed #14573: ‘text.properties’ node has all outputs hidden by default when first created
  • Fixed #14569: The ‘ColorLerp’ node does not accept float3 inputs
  • Fixed #14540: Grids: Add missing ‘grid.IDToCoords’, ‘grid.IDToUV’, and ‘grid.CoordsToUV’
  • Fixed #14471: The ‘ClampVector’ node is limited to vector3s
  • Fixed #14393: Nodes ‘IsInf’ & ‘IsNan’ have their output named ‘IsFinite’ instead of ‘IsInf’ and ‘IsNan’ respectively
  • Fixed #14342: ‘getdim’ template is broken

Simulation

  • #7536: GPU Sim: Implement animtrack sampler
  • #13334: CPU sim: Image sampler: Optimize ‘texelUVToID’
  • #14291: Add safe-mode on DuDv node (keep derivative value with dt=0 frame)
  • Fixed #14351: Script ‘all’ & ‘any’ functions force a cast to int when given ‘bool’ vectors

Rendering

  • Fixed #14543: Materials: Atlas Subdivs accepted 0 or negative values, should have a min of “1,1”
  • Fixed #14432: Rendering: Textures always repeat on Mesh and Ribbon Renderers, regardless of the TextureRepeat input checkbox
  • Fixed #12306: Editor Shadows: CSM cascades are fitted to the view but incorrectly snapped to closest projected texel, causes horrible shadow jittering when camera moves
  • Fixed #14549: Editor: ribbons have noisy artifacts when using atlas blending with integer textureIDs

Compiler & Optimizer

  • #14263: Compiler: Add horizontal vector functions: hmin / hmax
  • #14360: Optimizer: Allow to catch more optimizations of x * x
  • #13455: Optimizer: allow lowering dot-product dimension when vector inputs have components which are proven to be 0 and do not contribute to the final result
  • #13344: Optimizer: Merge multiple calls to ‘sampleChannel()’ or ‘readChannel()’ into a single call to ‘sample()’ or ‘read()’ when more efficient
  • #13343: Optimizer: Simplify image sampling calls that only keep one component into a ‘sampleChannel()’ or ‘readChannel()’ call
  • #13537: Optimizer: Better factorization of dependent multiplications
  • Fixed #14578: Script grid.atomicAdd, atomicMin and atomicMax all get replaced with grid.write by compiler

Nodal Editor

  • #14579: Nodegraph: Inserting a node which only take integers as input can result in an error due to compiler filling second argument as a float
  • #14325: Nodegraph: Add Instruction count to node tooltip.
  • Fixed #14400: Nodal Editor: Duplicating nodes with Ctrl+Shift+Drag keeps all the previous selection when Ctrl+Shift+Dragging on a new unselected node, annoying, prevents quick duplication of multiple different nodes in succession

Effect Editor

  • #14391: Color picker: Hex color inputbox is confusing, specified as ARGB. Add an RGBA box right next to it and explicitly mention “ARGB” & “RGBA” next to those boxes
  • #8371: Background backdrop: HDRI map processing: Store processed envmaps to the cache folder To avoid expensive recomputations every time user re-uses the same envmap or opens the effect editor with an HDRI envmap
  • #14551: Add a setting in ‘project settings > Features’ to set the default pkma used when creating a renderer node
  • Fixed #14346: IR Panel: D3D11 GPU sim shader disassembly not working

Asset generators

  • #13568: Texture generator: New tool to author texture generation with a nodegraph
  • #13565: Texture generator: Add Support for substance format
  • #14584: Mesh generator: Generate procedural mesh assets using predefined parametric geometries and an optional procedural vertex graph

Editor

  • #14480: Content browser: Support for external file formats to be listed, and included into package exports
  • #14545: Export package: Allow selecting empty folders to be included in the .pkkg, helps embedding directory structures in .pkkgs as new project templates
  • #14413: Editor texture thumbnails: When building the thumbnail of a volume (3D) texture, display the middle Z slice instead of the first slice, usually more useful as a preview of the volume contents
  • #9355: Editor: Add support for wildcard in search boxes
  • Fixed #14395: Exporting/converting textures to BC5_UNorm or BC5_SNorm formats output garbage texels. BC5 compressor is not implemented in the runtime, yet says it is, then proceeds to do nothing and leave output texels to uninitialized memory.
  • Fixed #6372: Content browser: Multiple asset indexing/build requests can pile up and cause unnecessary lags in the editor.
  • Fixed #14557: Editor auto-translate: Does not properly translate & display input/output pin names in their tooltips
  • Fixed #14556: Project Launcher: Vault: pkkg files that were zipped manually with empty directories are not displayed properly

UnrealEngine Plugin

  • #14570: Add Unreal engine 5.6 support
  • Fixed #14511: Unreal Engine: PopcornFX Project path is reset after restart of the engine

All v2.21.5 fixes

  • Fixed #14544: Rendering crash when a GPU layer is failing to run and it contains triangle-renderer
  • Fixed #14539: Nodegraph & Simulation: Improve performance of integer bitshifts on AVX2-capable CPUs
  • Fixed #14358: Nodegraph: Using a pow node with a negative integer exponent causes the optimizer to produce incorrect instructions, resulting in incorrect values.
  • Fixed #14542: Nodal Editor: Searching for ‘Bill’ in node will put ‘BillboardScreenControls’ before ‘Billboard Renderer’
  • Fixed #14536: Nodal editor: Significant UI lags when layers get recompiled, even though it’s supposed to be fully async. Most visible when tweaking curves, in layers that have large textures referenced in renderer nodes.
  • Fixed #14538: Unity plugin: Custom Materials get reset on reimport with Unity 2022.1+

All v2.20.10 LTS fixes

  • Fixed #14435: Nodal Editor: Propertygrid: Unsigned integer properties will not properly take min/max into account when typing a negative value directly or using Ctrl+click+drag in the inputbox to go below zero, wrapping the unsigned value to 4.2G
  • Fixed #14552: Editor: Crash when changing threadpool settings and some background tasks are running
  • Fixed #14546: Editor: Crash when stopping the instrumentation driver on Windows
  • Fixed #14555: Project launcher: Vault: Typing something in the search bar before scanning has finished displays “Vault is Empty” message instead of saying it is still scanning.
  • Fixed #13897: UnrealEngine plugin: Default Materials: Implement Basic TransformUVs