PopcornFX v2.20 is released!

PopcornFX banner v2.20

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

https://www.youtube.com/watch?enablejsapi=1&autoplay=0&cc_load_policy=0&cc_lang_pref=&iv_load_policy=1&loop=0&rel=0&fs=1&playsinline=0&autohide=2&theme=dark&color=red&controls=1&disablekb=0&" class="__youtube_prefs__ epyt-facade no-lazyload" data-epautoplay="1" >YouTube playerhttps://www.youtube.com/watch/maxresdefault.jpg" />

Changelog 2.20.13

Builds (May 7th 2026)

  • Fixed #15642: Occasional crash when multiple effects using different spatial layers are loaded into a scene
  • Fixed #15468: Random crash when loading/unloading effects with GPU layers on PS5
  • Fixed #15406: Incorrect d3d12 binding of mesh attribute samplers when loading from a baked effect. Resulting in broken behaviour when overriding mesh attribute samplers.

 


Changelog 2.20.12

Builds (Dec 19th 2025)

  • 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 #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.
  • Fixed #14800: GPU Sim: Rare corruption only with the effect compiled in Shipping (or baked)
  • 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 #15178: Unity: Macos dylib is not correctly signed
  • Fixed #14788: O3DE: Unhandled exception in realloc
  • Fixed #14787: O3DE: Address Sanitizer Error on effect load

 


Changelog 2.20.11

Builds (Aug 27th 2025)

  • 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 instruction combining “optimization” that can remove used instructions and leave uninitialized registers
  • Fixed #14497: Orientations exposed as layer properties in the layergraph do not properly recompile layer when changed in the propertygrid
  • 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 #14681: Unity: Node Effect.scale don’t get applied
  • Fixed #14734: O3DE: Crash on android in sleep mode
  • Fixed #14733: O3DE: Link error on 25.10

 


Changelog 2.20.10

Builds (Jul 17th 2025)

  • Fixed #14653: Texture sampler: SampleDensity is broken for images that have a wavelet density profile setup in their bake settings
  • Fixed #14435: 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 #14627: Release assert (sometimes seen by users as a crash) when loading corrupt TIFF files
  • Fixed #14671: Project Launcher: Freeze for a couple seconds when project launcher appears AND a lot of projects are in the project list AND the threadpool settings have been changed from the defaults in the editor user settings
  • 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 #14552: Editor: Crash when changing threadpool settings and some background tasks are running
  • Fixed #14546: Crash when stopping the instrumentation driver on Windows
  • Fixed #14598: Unity: PS5NGGC renderer crash
  • Fixed #13897: UnrealEngine: Default Materials: Implement Basic TransformUVs

 


Changelog 2.20.9

Builds (Jun 5th 2025)

  • Fixed #14506: The effects baked on some AMD vs some Intel machines sometime produces different binary outputs
  • Fixed #14494: AssetBaker: add –max_threads=%d commandline option, to specify how many threads should be spawned in the default threadpool.
  • Fixed #14488: Instant crash when launching editor on a machine with 128 or more processors.
  • Fixed #14504: Editor: Add effect right-click menu entry in developer mode to rewrite binary-baked effect as text
  • Fixed #14505: Add effect right-click menu entry in developer mode to dump the bytecode disassembly of a baked effect
  • Fixed #14472: Unreal Plugin: Havok: Particle collisions are now 2x faster when using Havok instead of Chaos, by using havok raycasts on projects that use Havok physics.

 


Changelog 2.20.8

Builds (Mar 27th 2025)

  • Fixed #14385: Grids: Lowering the dimension of a grid still outputs the old dimension in the higher-order components when using a grid.dimensions node
  • Fixed #14387: Mesh importer: Viewport is black when opening a mesh with no valid geometry, or where all the vertices are located in a single point, producing a zero-size bbox
  • Fixed #14357: Index asset content of files created or modified by external applications sometimes fails
  • Fixed #14356: Opening a pkma while not in developer mode throw an internal error message
  • Fixed #14355: Opening a pkri while not in developer mode does not open the experimental error message box
  • Fixed #14353: Drag/dropping external files inside the content-browser is not working with buttons other than left click
  • Fixed #14352: Refusing to save the changes when closing the mesh importer does not discard them
  • Fixed #14386: Content browser right-click menu: Expand all folders & Collapse all folders menu items have no icon
  • Fixed #14375: Linux: Incorrect glslangValidator path on linux
  • Fixed #14354: Linux: Drag/dropping external files inside the content-browser is not working on linux
  • Fixed #14337: Linux: Vulkan fatal error when closing an effect editor on linux
  • Fixed #14410: O3DE: Missing shaders in gem seed list
  • Fixed #14409: O3DE: Product asset dependencies are not correctly set

 


Changelog 2.20.7

Builds (Feb 13th 2025)

  • Fixed #14305: Crash or release-asserts in events because of bad IR generation when appending payloads from different rates / sim stages into the same event wire
  • Fixed #14279: GPU Sim: Bad payload-extract (and possibly crash) when some payloads are not used
  • Fixed #14278: Crash when importing vector-field with non-equal dimensions and that needs to be transposed in a different axis system
  • Fixed #14275: RenderHelper: Crash when billboarding opaque multi-plane ribbons
  • Fixed #14268: Crash when using shape.intersect when ‘Enabled’ pin varies per-particle
  • Fixed #14262: CPU sim: hadd nodegraph & script function is bugged for float2 & float4 values when running on AVX-capable CPUs
  • Fixed #14293: Nodal editor: Can swap node inputs in readonly graphs using the ‘X’ shortcut
  • Fixed #14334: Linux Editor: Content browser freeze on linux
  • Fixed #14338: Linux Editor: Particle texture are messed-up when using OpenGL on linux
  • Fixed #14335: Linux Editor: Crash when opening effect editor using vulkan on linux
  • Fixed #14301: Editor: File already exists message while creating or renaming a file on linux and macosx even if it doesn’t
  • Fixed #14267: Unity: HDRP Material factory references deleted members
  • Fixed #14255: UnrealEngine: animtrack assets don’t get imported in unreal when used only inline in the nodegraph.
  • Fixed #12621: UnrealEngine: texture sampling does not work in packaged games

 


Changelog 2.20.6

Builds (Jan 16th 2025)

  • Fixed #14176: GPU sim: Spatial layers: Wrong value returned from GPU implementation of Spatial Query SumDirectional with a kernel curve
  • Fixed #14231: GPU sim: Mesh sampler: PCoords referencing out-of-bounds triangles do not clamp to the last triangle like in the CPU sim, causes behavior divergence.
  • Fixed #13403: Rendering: GPU Skeletal Meshes shadow flicker
  • Fixed #14180: Skeletal skinner: Crashes when source mesh has no tangents
  • Fixed #14201: Effect editor IR Panel: Some constants at 0 are displayed as ‘None’, ends-up confusing for everyone.
  • Fixed #14257: Material editor: Crash when opening material and the old ‘Default_*.pkma’ files were still present in the project (should have been removed by the upgrade to v2.20.0)
  • Fixed #14256: Material editor: Does not properly take into account #include timestamps when considering if shader should be rebuilt, if #include path contains “..” parent dir markers
  • Fixed #14198: Content Browser: Asset-registry does not pickup file & directory casing changes made while the editor wasn’t running
  • Fixed #14197: Content Browser: On windows, cannot rename a file or folder just to change the casing of some of its letters, says asset “Already exists”
  • Fixed #14195: Content Browser: ‘Edit > Rewrite All Assets To Current Version’ does not work for assets whose editors are still marked as “experimental”, dumps lots of errors by default for users that did not enable Developer mode
  • Fixed #14179: Mesh importer: Crash when importing skinned mesh that has no UV channel, causing no tangents to be generated.
  • Fixed #14181: Mesh importer: Release-assert when importing FBX animations written in a non-EulerXYZ order
  • Fixed #14205: Unreal Engine: Ribbon renderer “SideAxisAlignedMultiPlane” crashes unreal in VR

 


Changelog 2.20.5

Builds (Dec 12th 2024)

  • Fixed #14092: VectorField sampler: Always tries to load a resource if the resource path is not empty even when set to ‘Procedural’
  • Fixed #14099: Compiler: invalid range computation when Nan appears from constant-folding
  • Fixed #14085: Grid attribute data is lost when editing an effect or gets overridden when modifying other attributes values
  • #14086: User settings: Allow disabling filesystem watcher in content-browser & project-launcher user settings
  • Fixed #14091: Unity: Crash on UnloadSceneAsync on certain platforms
  • Fixed #14090: Unity: NullReference preventing to import an effect
  • Fixed #14096: Unity: Billboards with no diffuse but with emissive create degenerated geometry
  • Fixed #14088: Unity: Index buffer is not reallocated correctly when the index count changed
  • Fixed #13979: Unity: D3D12 support isn’t working

 


Changelog 2.20.4

Builds (Nov 21st 2024)

  • Fixed #14064: Visual glitches with multiple GPU mesh renderers
  • Fixed #14062: Graph compiler: Incorrect range analysis with toInt node
  • Fixed #14061: Graph compiler: Incorrect range analysis with BitWise_And operator
  • Fixed #14059: Rare crash caused by invalid IR generation with a layer using fences and dudv nodes
  • Fixed #14076: Nodal editor: Crash when hovering some event wire loops
  • Fixed #14063: Effect editor: Unhelpful warning in viewport: “Failed sampling mesh: no data”, does not say which data is missing
  • Fixed #14042: Effect editor stalls on each graph modification in effects that use animtrack samplers, makes it close to unusable
  • Fixed #12934: UnrealEngine: Add spectrum & waveform sampling support for UE’s native audio engine

 


Changelog 2.20.3

Builds (Oct 24th 2024)

  • Fixed #14033: animtrack.transform returns garbage positions when TrackID changes per-particle
  • Fixed #14021: Editor freezes when opening a mesh whose path contains an unicode character
  • Fixed #14008: Effect Editor: Scene properties panel: F1 / right-click show documentation does not work on any of the backdrops
  • Fixed #13992: Effect Editor: Missing billboarding timings
  • Fixed #12146: Effect Editor: Effect backdrop’s grid resolution isn’t axis system independent
  • Fixed #14002: FBX Mesh Codec can randomly delete files/directories on Windows
  • Fixed #14000: Serialization viewer fails to open binary files, should be able to open them at least when they are from the same runtime version.
  • Fixed #14027: UnrealEngine: Materials are incompatible with Unreal Engine 5.1/5.2/5.3
  • Fixed #14001: O3DE: Incorrect package id for linux aarch64

 


Changelog 2.20.2

Builds (Oct 3rd 2024)

  • Fixed #13942: GPU Sim: Instant crash when fences produce empty sim-stage
  • Fixed #13973: Animtrack backdrop: Setting a negative animation speed clamps the animation cursor at zero and does not properly wrap the backward animation
  • Fixed #13982: When opening a project and the upgrade dialog pops for some out-of-date assets, unchecking them and clicking OK still upgrades them
  • Fixed #13985: Unity: NullReferenceException when EditorCamera is enabled and the scene view is closed
  • Fixed #13986: O3DE: Support new materials
  • Fixed #13967: O3DE: GeometryView Class API Changed #80

 


Changelog 2.20.1

Builds (Sep 12th 2024)

  • Fixed #13937: ‘within’ node is broken for ‘int1’ inputs, returns garbage results
  • Fixed #13938: Corelib: ‘within’ legacy template does not work with vectors. ‘Within’ builtin node is fine.
  • Fixed #13915: New materials: Emissive remap wrongly discards the color when the emissive-cursor is zero
  • Fixed #13882: Custom materials that reference corelib .vert or .frag files are not properly upgraded after v2.20 corelib shader renames
  • Fixed #13881: Incorrect used-shader for materials with features that are enabled by default after baking
  • Fixed #13914: Incorrect behavior of grid atomic-add when the index and the add-value are constant
  • Fixed #13934: Using grid.atomicAdd node in GPU layers sometimes fail to compile the shader & cause a fallback to CPU sim
  • Fixed #13912: GPU layer fails to compile when the graph has dot-product for integer types
  • Fixed #13880: Bad simulation CPU dispatch on effects with multiple exec-rates and fences
  • Fixed #13887: Editor: VATs materials emit an invalid drawcall
  • Fixed #13839: Editor: Crash when enabling Atlas and undoing “Set Atlas”
  • Fixed #13707: Renderer Properties not updating properly
  • Fixed #13886: UnrealEngine: Particles with emissive color don’t render properly
  • Fixed #13885: UnrealEngine: GPU Billboards assert on resources creation
  • Fixed #13884: Unity: Standalone build won’t compile due to EditorCamera being used outside editor guard
  • Fixed #13883: Unity: Decal renderer don’t have any material assign when importing
  • Fixed #13913: O3DE: FindMatchingPkproj scans all files across the entire project directory #79
  • Fixed #13906: O3DE: Shaders hot reload does not work

 


Changelog 2.20.0

Builds (Aug 29th 2024)

Templates & Corelib

  • #13809: Corelib: Add local <-> world and view <-> world orientation helpers
  • #13768: Corelib: Projection, Containment, & LimitDistance nodes: Allow specifying custom transforms for the shape
  • #13452: Corelib: Add ‘grid.safeRead’ helper node, that gracefully handles out-of-bounds conditions and provides wrap & clamp modes
  • #13449: Corelib: grid.coordToID & grid.UVToID: Add wrap modes
  • #13448: Corelib: Timer node: Allow specifying initial value & reset value
  • Fixed #13515: Corelib: sim.wave.at only accepts bool-bool4 inputs

Simulation

  • #13657: Simulation: New “Micro-Updates”, allowing to subdivide a frame into multiple simulation steps
  • #13664: Atlas sampler: Allow sampling atlases in the simulation graph.
  • #13340: Image density sampling: Use wavelets as a more efficient way to encode density mapping for remapDensity()
  • #13690: Bake texture sampling lookup data into dedicated file instead of recomputing it on-load at runtime
  • #13760: Collision & Physics nodes: When using shape collisions, allow specifying custom shape positions & orientations
  • #13647: Text sampler: Not all functionalities are exposed as nodes in the template core-library: Add ‘text.sampleAtLine’, and ‘text.properties’ nodes
  • #13510: Grid atomics: Remove useless vector versions, only keep scalar: no platforms support atomics on vectors anyway, so will be limited to int1 grids for the foreseeable future.
  • #13508: grid atomicAdd: Make it able to return the previous value: atomicFetchAdd
  • #13509: Add sim.wave.prefixSum()
  • #12353: LOD: Add ‘sim.lodQuerySphere’, cheaper than a box query
  • #12468: Add ‘sim.particleCount’ to access the number of live particles in the current layer
  • Fixed #13845: Crash or incorrect behavior when fencing some spatial nodes or event nodes together
  • Fixed #13851: Simulation crash when using fences and spatial-layers at spawn and evolve

Rendering

  • #13487: Material: New material with scrolling noises
  • #13458: Materials: Make experimental materials the new default, move old materials to Legacy
  • #13769: Materials: Add a Fast Lit render feature
  • #13692: Materials: Implement per particle V sampling of diffuse and emissive ramps.
  • #13616: Materials: Add a rotation center property for TransformUVs
  • #13593: Materials: Implement Basic transform FlipU and FlipV for triangles, decals and meshes
  • #4782: Materials: Allow tagging render-features to be ‘ON’ by default
  • #7598: Editor Viewport: Allow customizing the overdraw color range
  • Fixed #13592: Materials: The Atlas feature makes decals disappear
  • Fixed #13544: materials: Triangles with distortion don’t compile with the formerly named experimental materials

Graph Compiler & Optimizer

  • #13456: Compiler & CPU backend: Implement dot-product for integer types
  • #13468: Compiler: Add horizontal vector functions: hadd / hmul
  • #13454: Optimizer: Move swizzles across select instructions, allows for greater simplifications to take place
  • #12715: Optimizer: remove redundant min/max expressions
  • #13085: Curve optimizer: Gaussian fitting appears to be bugged, very unpredictable
  • #13077: Curve optimizer: Implement a lerp+select folding type as well as the existing poly/fourier/gaussion fittings
  • #12316: Add compiler introspection helpers. Useful for development to write compiler unit-tests and anti-regression checks

Nodal editor

  • #13470: Improve node search result
  • #13606: Nodegraph: When auto-exporting graph inputs or outputs, allow overriding their properties by using an explicit export node for that property.
  • #13605: Nodegraph: Allow using multiple input nodes across the graph that represent the same pin/property
  • #13446: Warning/Error/Assert nodes: allow to specify a custom message ID like the builtin compiler messages, that can be modified or ignored with -Werror and similar effect-compiler flags when baking
  • Fixed #13713: Nodal editor: Can’t plug a ‘float’ wire into an ‘int’ pin. Would work & compile properly and auto-insert a silent float -> int cast without complaining, but the nodal editor forbids it. Annoying.
  • Fixed #13824: Editor: Sometimes a rogue undo action ‘Removed CParticleNodePinIn’ appears in the undo-stack, which looses all the redo actions above it.
  • Fixed #13823: Node creation dialog: When shown via the drag of a wire, does not properly filter suggested node list based on wire type: Shows a lot of unrelated nodes that cannot be plugged into the wire
  • Fixed #13821: Node creation dialog: When creating a node from or on a wire, ignores the ExportedTypeMask specified in template pins
  • Fixed #13834: Nodal editor: Debugger: attributes are not captured

Effect editor

  • #12176: Effect interface: allow attributes re-ordering
  • #13683: Frame exporter: In StaticImpostor_3D mode, allow specifying start & end pitch angles
  • #10478: Curve editor: Add a snap-to-grid, with a hotkey to temporarily disable snapping when pressed down

Editor (General)

  • #13495: Localized text edit window: Clearing the text of the current language removes the language entry and partially bugs the UI.
  • #12681: Editor UI: Add shortcut to snap-to-grid when scrubbing sliders
  • Fixed #13792: User settings: Typos in some shader compilation settings properties

Unity plugin

  • #13844: Unity: crash if modifying max camera support while playing
  • #13837: Unity: Renderers with atlas and TransformUVs stops rendering when the shader is reloaded
  • #13836: Unity: Effects hot reload on play not working
  • #13831: Unity: effect instances are not correctly released in the native code
  • #13829: Unity: Expose timescale on emitter component
  • #13804: Unity: Allow to set LOD Min and Max distance
  • #13780: Unity: Allow to drag and drop effect assets into the scene, the hierarchy and the inspector
  • #13553: Unity: Attribute sampler grid support.
  • #12645: Unity: Add decal renderer support
  • #13847: Unity: Billboarding for editor camera

O3DE plugin

  • #13842: O3DE: Development Branch Compilation error #77