PopcornFX v2.24 is released!

The PopcornFX v2.24 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.24 release highlights livestream, where a few members of the team dive into some of the new features:

YouTube player

 

Changelog 2.24.7

Builds (Oct 15th 2026)

  • #16173: GPU sim D3D12: Shape sampler tangent sampling missing
  • Fixed #16133: Runtime: memory leaks on linux
  • Fixed #16153: Particle debugger: Effect with spatial layer crashes when selecting particles on the first frame
  • Fixed #16186: Bytecode compile: Compilation commandlines could stall to the full timeout duration on windows + jobs waiting on the lock file were waiting for the exact lock duration with no margin, causing false failures.
  • #16174: Editor: spaces get removed in text descriptions even inside code formatted blocks (<c> and ‘`’)
  • Fixed #8225: Moving a input or output node inside a template causes a recompilation of the layers the template is used in.
  • Fixed #14339: Editor: Vulkan renderer crash on wayland
  • Fixed #16121: Content browser thumbnails: Textures using BCn_sRGB compression display darker than they actually are.
  • Fixed #16137: MacOS: Viewport not rendering
  • Fixed #16139: MacOS: Crash when opening the effect editor
  • Fixed #16148: Crash reporter: Crash descriptions typed by the user are not properly escaped when passed into a curl commandline to send the crashreport, can break the report upload.
  • Fixed #16155: MacOS: Editor not released for arm64
  • Fixed #16169: Curve editor crash with curve huge values range
  • Fixed #16178: Editor: When the OS audio device changes (ex: wireless headphones connect). the sound playback of the editor stays on the old device and doesn’t switch to the new one.
  • Fixed #14269: Unreal Engine: packaged effects get baked with incorrect dependency asset path
  • Fixed #15991: Unreal Engine: changing the data type of a SetAttribute BP node result in a invalid, unusable one
  • Fixed #16118: Unreal Engine: cast shadows does not work on default materials
  • Fixed #16127: Unreal Engine: grid attribute samplers can’t modify Volume Render Targets pixel format to a supported format anymore, which makes them unusable
  • Fixed #16135: UnrealEngine: Plugin does not compile as engine module
  • Fixed #16157: Unreal Engine: in the PopcornFX project settings preset for UE, collision filters PhysicsBody, Vehicle and Destructible are invalid
  • Fixed #16195: Unreal Engine: promoting a GetAttribute blueprint node’s output to a variable causes a crash

 



Changelog 2.24.6

Builds (Sep 10th 2026)

  • #16098: ARM NEON: Various small performance improvements.
  • #16101: ARM: NEON SIMD bug causing buggy results in the following: Or+Not operators in the particle graphs, Wavelet image density sampling, Capsule shape sampling, and scene.orientation() in a rare degenerate case.
  • Fixed #16069: Micro-updates always active on ARM
  • Fixed #16071: AssetBaker / Effect compiler: Rare random crash between parallel baking tasks
  • Fixed #16079: FBX Importer: Temporary directories are not cleaned up on linux and mac
  • Fixed #16097: ARM NEON builds: doing a float -> float3 .x00 swizzle in a particle sim is broken, returns incorrect values.
  • Fixed #16099: ARM: Sampling float2 curves in anything but ‘Exact’ mode produce sampling artefacts
  • Fixed #16103: NEON builds accidentally always use the software scalar fp16 <-> fp32 converters, never the vectorized or HW one.
  • #16095: AssetBaker: Add a ‘CacheHashSalt’ string property to the BakeConfig ParticleCompiler objects, allowing to hash the shader compiler version alongside the rest of the shader so the compile-caches get properly rebuilt
  • Fixed #16078: Editor: Rare random freeze when opening a project using procedural textures
  • Fixed #16084: AssetBaker: Some of the baked assets diff depending on if they were baked on an Intel or AMD CPU
  • Fixed #16085: AssetBaker: baked effects containing GPU-sim layers contain a couple of bytes that come from uninitialized memory and get random values on each bake, causing the baked effects to diff from one run to the next.
  • Fixed #15984: Editor: Crash when ungrouping twice the physics node content without altering the selection
  • Fixed #16052: Node Editor: horizontal backward wires are (nearly) invisible
  • Fixed #16061: Curve editor: Cursor coordinates display in toolbar is broken
  • Fixed #16062: Content-browser: Details view: When sorted on a column in descending order, sort order gets randomly reset by any change in a file of that folder (Ctrl+S in an opened effect, asset changed on-disk, etc)
  • Fixed #16063: Nodal editor: Wire portal creation shortcut (Ctrl+Alt) is broken
  • Fixed #16100: ARM AssetBaker: Baking LA16F textures with mipmap generation enabled produces broken mipmaps
  • Fixed #16093: Unreal Engine: some grid attribute samplers read/write functions don’t read/write in the correct component
  • Fixed #16094: Unreal Engine: grid attribute samplers using a render target don’t rebuild when their height has changed
  • Fixed #16096: Unreal Engine: cloth sampling is broken

 


Changelog 2.24.5

Builds (Aug 06th 2026)

  • #16033: Compiler: Reduce optimizer passes count because of 2 ICB optimizations fighting each other
  • Fixed #15989: GPU Sim: Texture sampling with atlas yields a shader backend error on d3d12
  • Fixed #16026: Compiler: fast rcp produces full-range in value-range-propagation
  • Fixed #16032: Editor: Crash when opening an effect that uses a texture that fails to load in the graphics API (for ex because it’s too big, like a 32k-wide texture)
  • Fixed #15988: Editor: Unable to right click a node if it is contained in a currently selected annotation
  • Fixed #16038: Editor: Crash reporter window no longer shows up (Qt6 regression)
  • Fixed #16044: GPU sim D3D11: Using the scene wind in the GPU sim, causes shader compilation errors in D3D11, and fallback to CPU sim
  • #15697: Unreal Engine: add support for 5.8
  • Fixed #15990: Unreal Engine: asset depencencies of effects draw calls are empty if the asset dep is imported for the first time during the asset import.
  • Fixed #16015: Unreal Engine: crash when you select an emitter with an effect of a different PopcornFX version than your plugin
  • #15412: Godot: Implement Sound Renderers
  • #15981: Godot: Curve Attribute Sampler
  • Fixed #15980: Godot: transform mode property isn’t shown on PKEmitter3D
  • Fixed #15968: LOD (box and sphere queries) always returns zero on Retail builds

 


Changelog 2.24.4

Builds (Jun 18th 2026)

  • #15714: Marketplace: Add the corelib as a PopcornFXCore package
  • Fixed #15935: CPU sim: Effect time scales do not work as intended when there are multiple effect instances, the time scale of one instance might leak onto other instances.
  • Fixed #15944: GPU Sim D3D12: Remove-device when sampling mesh collections
  • Fixed #15902: Image Sampler: density profile ignoring density Power
  • Fixed #15912: Image density sampling: Adding a sampling profile setup to use wavelets instead of lattice lookups, will fail building if the image is of an uniform color (constant density)
  • Fixed #15931: Effects using UV-mesh sampling or texture-atlas sampling fail to run on GPU
  • Fixed #15907: view.project: Incorrect projection value if value is shared by particles (does not vary per-particle)
  • Fixed #15901: Texture Viewer: density profiles names not updating
  • Fixed #15914: Image density profiles are limited to 15 characters but mentioned nowhere, and editor UI allows to specify more than 15 chars without complaining. Gets silently clamped when image gets baked, without any error or warning.
  • Fixed #15913: Editor: Sometimes freezes when rebuilding image density sampling lookups
  • Fixed #15938: Project launcher: Don’t display older projects orange when they have the proper editor version installed
  • Fixed #15937: Project launcher: Cannot open a project from an older already installed version by double-clicking on it in the project list
  • #15569: Godot: add a sprite to PKEmitter3D to allow selecting them from the 3D view
  • #15900: Godot: use property system to expose emitter attributes

 


Changelog 2.24.3

Builds (May 21st 2026)

  • Fixed #15482: Script noise functions : fastnoise doesnt return the same values on CPU and GPU
  • Fixed #15660: Crash in shipping when using gpu events when using payloads
  • Fixed #15716: GPU crash when instancing GPU Spatial Layers
  • #15673: Comparison nodes: Add search keywords “less” / “above” / “below” in addition of existing ones (“lower” / “greater”)
  • #15715: Effect export dialog: auto-focus OK button (Enter confirms)
  • Fixed #15542: Editor: Invalid bounding box for a single mesh renderer particle rotating in CPU simulation
  • Fixed #15580: Editor: Layouts setting a window spanning over multiple screen get clamped back to one screen
  • Fixed #15585: Editor: Over saturation with ACES tone mapping in highlights
  • Fixed #15618: Attribute sliders: sets values to ‘inf’ when not setup with Min or Max values
  • Fixed #15726: Editor: Text descriptions get truncated after 3194 characters
  • Fixed #15727: Nodal editor: Graph stats & texts are displayed at the wrong location on 4k / high-DPI screens with a device pixel ratio above 1.0
  • #15559: Unreal Engine: add an option to make emitters loop, scale their speed and pause
  • #15619: Unreal Engine: remember deactivated renderers setup so they are not reset to default when users re active them

 


Changelog 2.24.2

Builds (Apr 23rd 2026)

  • Fixed #15610: GPU Sim: Work graph effects using payloads would sometimes crash due to binding mismatch
  • Fixed #15609: GPU Sim: inactive kernel threads could read & write to samplers
  • Fixed #15598: GPU Sim: GPU event would sometimes spawn more particles than intended, creating uninitialized particles
  • Fixed #15581: Editor: Big lags when browsing textures using the explorer browse button that pops the windows explorer window
  • Fixed #15586: Nodal Editor: Extreme lag when opening layers
  • Fixed #15587: Editor: 3D Viewports open with wrong size and rendering is either cropped, or too small and part of the viewport is black until they are resized, on High-DPI screen setups with different scaling factors for each screen
  • Fixed #15588: Editor: Freeze when two GPU layers (linked by GPU Event) are disconnected from Root node
  • Fixed #15593: Effect editor: dragging a wire while holding alt both cuts wires and creates a wire
  • Fixed #15602: Unreal Engine: RHI crashes during shadow pass
  • Fixed #15583: Unity: Alpha remap cursor is broken with materials using default.pkri

 


Changelog 2.24.1

Builds (Apr 9th 2026)

  • Fixed #15574: Missing upgrader to patch all shape & mesh sampling nodes to set the new ‘Dimensionality’ field to ‘LegacyAuto’
  • Fixed #15577: GPU Events were spawning more particles than intended after an effect reload
  • Fixed #15578: Particles spawned from gpu events would behave incorrectly after a storage grow.
  • Fixed #15579: Event generation nodes in GPU layers triggers backend errors when using multiple exec frequencies in the layer
  • Fixed #15573: Editor: Weird color clipping with ACES tone mapping
  • Fixed #15572: Unity: Emissive alpha is not properly applied in some billboard materials
  • #15566: Project Launcher: Add Godot plugin repository links
  • Fixed #15575: Godot: emissive only works if diffuse is enabled too

 


Changelog 2.24.0

Builds (Apr 1st 2026)

Templates & Corelib

  • #9137: Grid placement template: Add “GridCoords” to address the grid coordinates
  • #14473: Scripts & corelib: Add debug.enabled, outputting a bool when the in-editor debug draws are enabled (same as debug.drawValue, debug.drawLine, …)
  • #15519: Corelib: shape.project/contains/sampleDistanceField: Add translation/orientation/scale inputs to allow easily transforming the shape without having to add extra nodes
  • Fixed #15549: Corelib: Event multiplier burst (rig) drops a regular event multiplier preset to make a burst, instead of the actual event multiplier burst node.

Simulation

  • #15259: GPU Events: Implement events without the need for D3D12 Ultimate
  • #15405: View frustum script functions : Optimize isVisibleX functions
  • #15396: CPU VM: More efficient loads of `float2` or `int2` attributes
  • #15502: Improve CDF curve computation to obtain a better sampling distribution
  • Fixed #6056: CPU & GPU sim have different implementations of ‘noise’ & ‘fast.noise’ functions, causing effects to not be seamlessly transposable without changing how they look
  • Fixed #6851: Shape ‘sampleNormal’ does not properly scale the normals with non-uniform scales (Mesh & ComplexEllipsoid), normals end up being the naively scaled normals instead of the true surface normals
  • Fixed #15350: CPU sim: Curve CDF sample (curve.probabilitySample node) ignores the curve quality hint, always samples as ‘Exact’

Rendering

  • #15385: Editor: Implement ACES tonemapping and allow to use it in project settings to better match the HDR glow intensity of some engines (for ex Unreal)

Compiler & Optimizer

  • #12762: Compiler backends: Add andnot and ornot instructions
  • Fixed #15131: Compiler: Range of ‘bitwise or’ and ‘bitwise xor’ are not computed when both of the input values are variable
  • Fixed #15226: Compiler: round() range can be wrong during value-range analysis

Nodal Editor

  • Fixed #15175: Nodal editor: Selecting an annotation does not allow to solo the layers inside

Effect Editor

  • #15509: Editor GPU sim: Mesh backdrops have uninitialized positions for sampling when not using animtracks
  • Fixed #15508: Editor GPU sim: Mesh attribute samplers have missing bindings & uninitialized constant buffer when using projection or uv2pcoords
  • Fixed #15510: Editor GPU sim: Mesh backdrops don’t bind the uv2pcoords buffer when bound as attribute samplers
  • #13253: LOD: Add view frustum containment helpers, useful to combine with existing LOD functions
  • #15424: Spatial Layers: Use native location in CountInCell and GetFromCell spatial-layers queries
  • Fixed #15533: Incorrect mesh & animtrack sampling on d3d with different attribute sampler bindings.
  • #15501: Effect interface: When adding a float4 attribute whose name contains “color”, automatically set the ‘color’ semantic when creating it, and set the initial value to white and alpha=1

Asset baker

  • #15493: Asset-Baker: Allow generation of mesh tetrahedrons, to use in volume sampling (Experimental)

Editor

  • #15553: Editor: Switch UI from Qt5 to Qt6
  • #3523: Tetrahedral interior mesh generation (experimental)
  • #13250: New project presets: Add appropriate post-fx settings for the different engine presets (UE/Unity/Godot/O3DE/AfterEffects)
  • #14316: Editor: Use openssl 3 instead of 1.1.1
  • #15274: Editor: Add an “Eco mode”, to consume less CPU resources when not needed.

UnrealEngine Plugin

  • #15384: Unreal Engine: add a blueprint function SetAttribute() that takes an attribute name instead of an index to avoid the need to call FindAttributeIndex() every time
  • #15392: Unreal Engine: rework effect asset material UI
  • #15518: Unreal Engine: add support for multi select enum attributes
  • #15531: Unreal Engine: Implement material graph “ParticleRandomValue” node for renderers that can
  • Fixed #13890: UnrealEngine: Effects do not cast shadow even with “Cast Shadows” parameter active
  • Fixed #15467: Unreal Engine: UI code can enter an infinite loop
  • Fixed #15515: UnrealEngine: Plugin does not compile with havok enabled

Godot Plugin

  • #15554: New Godot plugin, integrating PopcornFX in the Godot game-engine