PopcornFX v2.7 is released!

PopcornFX v2.7

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



Changelog 2.7.5 patch

Builds (Dec 10th 2020)


  • Fixed #5844: Editor sometimes corrupts files, making them un-bakeable and un-loadable in the editor.
  • Fixed #5902: Editor: default purple mesh isn’t displayed anymore when mesh renderer is incorrectly setup
  • Fixed #5856: Nodal editor: Constant nodes cannot be given the ‘Angle’ semantic
  • Fixed #5817: Nodegraph: the warning ‘The pin … is plugged but is not present in the material …’ persists even after unplugging it
  • Fixed #5801: Unchecking a renderer’s ‘Enabled’ property doesn’t remove the renderer from the final graph
  • Fixed #5795: Editor: incorrect resource load failures printed in editor log file when effects are reindexed
  • Fixed #5794: Editor: crashes when effects are being analyzed async and resources are being modified on disk and hot-reloaded
  • Fixed #5789: Editor: crash when mesh used by an effect as mesh backdrop is auto-reimported or manually imported
  • Fixed #5755: Editor: crash when opening effect with corrupt timeline track
  • Fixed #5754: Editor: Package importer doesn’t correctly handle paths with mismatching casing
  • Fixed #5744: Crash when using using ‘remapDensity’ with NaN input UVs and no texture atlas
  • Fixed #5731: Using the ‘scene.sweepSphereExt()’ function does not work, produces a backend linkage error.
  • Fixed #5728: Compiler: Optimizer hangs in storage optimization pass, freezes asset baking and asset analysis of some effects
  • Fixed #5659: Compiler: VRP pass incorrectly computes output range of ‘select’ operation where selector is a scalar but selected values are vectors
  • Fixed #5832: Compiler: Long compilation-time when a layer contains a physics-node with low-drag and a trail
  • Fixed #5709: GPU sim: layer containing several turbulence samplers fallback to CPU sim
  • Fixed #5751: Nodegraph: Spawn nodes with ‘Exec Frequency’ set to ‘Low’ or other color the nodes while they should keep the spawn color
  • Fixed #5747: When a debug.assert/error/warning/info is triggered at particle spawn, the editor never shows it, and there’s no way to know it was triggered.
  • Fixed #5746: Using debug.assert/error/warning nodes with a dynamic input condition that does not vary per-particle (but instead per-wave) causes the assert/warning/error to be ignored
  • Fixed #5748: In-editor sphere sweeps: Sometimes return incorrect normals
  • Fixed #5732: In-editor sphere sweeps: scene.sweepSphereExt() does not return correct distances
  • Fixed #5729: Crash when trying to select particles when a layer has backend compilation errors
  • Fixed #5606: Editor: assets being checked out in perforce get analyzed even though they were not modified yet
  • Fixed #5406: Editor: light particles debug/wireframe view doesn’t work anymore
  • Fixed #5178: Editor: 3D viewports become grey after changes in editor layout
  • Fixed #5804: Editor, MacOS: instant crash when opening any effect on Mac
  • Fixed #5806: Editor, MacOS: some shortcuts do not work in the effect editor viewport on Mac
  • Fixed #5842: Editor, MacOS: grey viewport when opening an effect editor and Metal graphics api is selected
  • Fixed #5825: Editor, MacOS: Metal graphics API cannot be used unless XCode is installed
  • Fixed #5805: Editor, MacOS: default graphics API on Mac is OpenGL instead of Metal
  • Fixed #5840: Editor, MacOS: graphics APIs unsupported on current OS are displayed first in list
  • Fixed #5890: Editor, MacOS: hovering displayed draw calls doesn’t work on Mac
  • Fixed #5809: Editor, MacOS: crash when selecting a new cubemap on Mac when Metal is selected as a graphics API
  • Fixed #5781: AssetBaker: Allow remapping graph execution frequencies (ex: Force all layers to run at most a “High” rate max, instead of “Full” rate max)
  • Fixed #5680: UE4: When PopcornFXSceneActor settings are set to ‘GPU if possible’, the plugin tries to load all layers on GPU, generating tons of errors in output log
  • Fixed #5679: UE4: Particles do not render correctly when Instanced Stereo is enabled in a VR project
  • Fixed #5678: UE4: Particles are incorrectly rendered in both eyes in VR
  • Fixed #5677: UE4: Crash when quitting VR preview
  • Fixed #5674: UE4: Plugin doesn’t compile on linux
  • Fixed #5613: UE4: Distortion billboard particles are culled when billboarding mode is ScreenAligned or AxisAlignedCapsule
  • Fixed #5681: AE: Handle copy pasting emitters


Changelog 2.7.4 patch

Builds (Nov 19th 2020)


  • Fixed #5626: Installer: doesn’t install ‘vulkan-1.dll’ dependency, prevents the editor from launching on machines where vulkan has not been previously installed.
  • Fixed #5619: Editor: Occasional hangs when opening a project
  • Fixed #5627: Bad upgrade @ corrupts effects that were using physics surface types
  • Fixed #5585: Importing a package resets project’s global constants to the ones defined in the package
  • Fixed #5584: Nodal editor: Passthrough nodes are very hard to pick
  • Fixed #5582: Color picker: HDR screen color pick from texture viewer shows HDR color when hovering, but lowers to LDR when clicking to pick the final color
  • Fixed #5580: Color picker: Cannot pick HDR screen color from a curve-editor window.
  • Fixed #5431: Crash reporter: Restart PopcornFX Editor doesn’t do anything
  • Fixed #5638: Crash reporter: Cannot cleanly skip sending crash reports
  • Fixed #5592: Crash when closing effect editor with pending changes after having renamed the effect in explorer while the window was opened.
  • Fixed #5408: UE4: Add support for 4.26 preview
  • Fixed #5635: UE4: Distortion particles do not affect scene
  • Fixed #5612: UE4: Crash when an effect using a triangle renderer is started
  • Fixed #5631: AE: UI displays not updating correctly
  • Fixed #5629: AE: First frame is black when launching after effects
  • Fixed #4784: AE: “Reset” on attribute needs to get the default value set in pkfx editor, not 0
  • #5622: AE: Added reset button for Backdrop Mesh and Environnement Map
  • #5621: AE: Added Button to reset attribute to default value.
  • #5620: AE: Changed baked effect extension to ‘pkfx’


Changelog 2.7.3 patch

Builds (Nov 5th 2020)


  • Fixed #5557: Crash when querying spatial layers at spawn in a GPU-sim layer
  • Fixed #5563: D3D11 GPU sim: Crash when resetting scene with multiple GPU effect instances
  • Fixed #5570: Crash when opening a layer of an effect opened after some of its dependencies have been patched following an asset move/rename
  • Fixed #5566: Effect doesn’t run when opened after some of its dependencies have been patched (after moving textures or meshes it used and telling the editor to patch the dependencies)
  • Fixed #5554: Crash when unfocusing the annotation text edit window.
  • Fixed #5561: Occasional crash when opening assets with the PopcornFX editor from the explorer
  • Fixed #5558: Occasional crash when copying nodes
  • Fixed #5555: Rare crash when opening a graph containing a curve node
  • Fixed #5526: Capturing a thumbnail causes the write to happen after the call to the file-write “end transaction”, when source-control transactions are configured.
  • Fixed #5525: Cannot force the capture of a thumbnail if the thumbnail file is read-only
  • Fixed #5519: Export to package: Sometimes ignores some asset dependencies and does not package them
  • Fixed #5515: Asset paths with multiple contiguous slashes or backslashes as directory separators will cause the asset-dependency scanning of the editor to fail.
  • Fixed #5508: AssetBaker: Add $(BakeKey) as a recognized token in command lines, allowing integration code to specify -Fe option to GPU simulation bake config command lines
  • Fixed #5152: File watcher does not pickup notifications through symbolic links
  • Fixed #5549: Debugger shows wrong values from spatial layers Nth-neighbor query
  • Fixed #5059: Scripts: multi-linecomments “/* … */” mess-up debug line mappings
  • Fixed #5575: UE4: Crash on linux when loading a scene containing a medium collection and GPU simulation is contained in the plugin
  • Fixed #5548: UE4: Performance spikes when world is shifted


Changelog 2.7.2 patch

Builds (Oct 22nd 2020)


  • Fixed #5478: Effect editor: crash when removing an attribute sampler in an effect containing several attribute samplers and D3D12 GPU sim is enabled
  • Fixed #5432: Effect editor: crash when disabling a layer in an effect containing several attribute samplers and D3D12 GPU sim is enabled
  • Fixed #5480: Effect editor: removing an attribute sampler in an effect containing several ones messes other attribute sampler instances (CPU sim)
  • Fixed #5328: Effect editor: When first opening an effect, the effect editor sometimes spawns it multiple times, leading to 5 to 10 times the number of particles, until Ctrl+R is hit
  • Fixed #5402: Effect editor: Viewport memory stats do not work anymore
  • Fixed #5416: Nodal editor: Annotations: When the annotation edit window auto-closes, the text is lost if it hasn’t explicitly been applied before
  • Fixed #5505: Cannot drag & drop assets from the content-browser or OS explorer onto the asset-picker widget
  • Fixed #5420: Occasional crash when closing asset windows
  • Fixed #5412: GPU sim: crash when a texture sampler uses an atlas texture (D3D12)
  • Fixed #5411: GPU sim: Some view.axis*() functions are not implemented in the GPU sim
  • Fixed #5410: GPU sim: view.axis*() functions are flipped on some axis systems
  • Fixed #5407: Importing a package will pick-up the wrong package version if it had been previously downloaded with a more recent editor version
  • Fixed #3868: Allow controlling viewport camera rotation sensitivity
  • Fixed #5417: Content browser: Selecting multiple assets and showing their dependencies only shows the dependencies of the last clicked asset, not of the entire list of selected assets
  • Fixed #5403: Sample effects baked with D3D12 GPU simulation on desktop are massive
  • Fixed #5245: Timeline: Timeline & prev/next buttons are not disabled when the debugger is active
  • Fixed #2967: Compiler: IR’s constant storage never get compacted by removing unused entries, leaves overhead in final compiled IRs and baked effects
  • Fixed #5375: Materials: ShaderInput1.Input1 particle pin does not work in integration code
  • Fixed #5392: Project constants: Adding a new constant while an effect is opened recompiles the effect as many times as there are constants.
  • Fixed #5507: Hitting ‘Esc’ on the save confirmation dialog when closing an window with pending changes doesn’t cancel the closing of the window, instead, does as if the ‘No’ button was clicked
  • Fixed #5496: Trying to use “select” or “if” nodes on non-numeric values does not show any error in the graph, even though it is not a legal operation
  • Fixed #5485: UE4: Game/editor sometimes freezes when GPU simulation is enabled & game is stopped, or PopcornFXSceneActor is destroyed
  • Fixed #5374: UE4: Dynamic Parameter nodes do not work anymore since UE4.23
  • Fixed #3389: UE4: Effect preview viewport queues emitter restarts indefinitely when UseLessCPUWhenInBackground is actived, leading to crashes
  • Fixed #5359: UE4: crash when unloading scene & D3D11 GPU sim is enabled


Changelog 2.7.1 patch

Builds (Oct 8th 2020)


  • Fixed #5329: When a layer uses an attribute sampler and doesn’t compile, editor crashes after making it compile again
  • Fixed #5279: script function ‘scene.ea_from_orientation()’ is broken, returns ‘orientation’ instead of returning ‘float3’ (broken since 2.0.0)
  • Fixed #5269: User settings shortcuts: Cannot bind some keys to shortcuts (for example the “Return” key)
  • Fixed #5319: Color-picker: Slider are not clamped in the [0,1] range, annoying when you want to bump a slider to max range
  • Fixed #5311: Resource nodes: Don’t show the “Asset > Show in Explorer” or “Asset > Show in Content Browser” menu on resource nodes that have no assets (for example curves)
  • Fixed #5321: Nodal editor: Allow setting curve preset by right-clicking on curve node directly
  • Fixed #5322: Propertygrid: When multiple curve nodes are selected, setting a curve preset using the right-click menu on the inline curve widget only updates the first selected curve node
  • Fixed #5326: Mesh backdrop: Animation stops when the effect instance dies, even if ‘Mesh Backdrop Follows Instances’ is unchecked
  • Fixed #5327: Mesh backdrop: Seeking back in the timeline with the effect paused messes up the backdrop animation
  • Fixed #5335: Mesh backdrop: Seeking back in the timeline with a mesh backdrop skeletal animation is super slow, even slower with multiple instances of an effect
  • Fixed #5336: Skinned mesh backdrop bound as attribute sampler: When backdrop is scaled, normals are also scaled. They should not.
  • Fixed #5297: GPU sim: editing turbulence sampler Global scale, Strength, .. does not refresh simulation until a graph rebuild is triggered
  • Fixed #4329: GPU sim: D3D11 shader compilation failing: max sampler register index
  • Fixed #5364: Nodegraph compiler: regression in discretization path detection: ‘TriggerOnce’ template is broken
  • Fixed #5350: UE4: Various crashes when UE garbage collect is forced using gc.CollectGarbageEveryFrame
  • Fixed #5316: UE4: Shadow rendering artefacts when billboards are generated on GPU, and stateless collect is disabled
  • Fixed #5315: UE4: Shadows flicker when billboard particles are generated on CPU and stateless collect is disabled
  • Fixed #5313: UE4: PopcornFX stats are unreadable when bRecordProfileMarkers is enabled for project
  • Fixed #5369: Upgrader: Upgrade v2.7.0.70 unnecessarily clone shaders when pins from different pkri share the same name


Changelog 2.7.0

Builds (Sep 17th 2020)

Assets & core-lib

  • #5207: New “IsInEditor” node, which tells whether or not the effect is running inside the editor. Useful to switch off things used for debugging purposes.
  • #5070: ‘Color’ node: Add “AlphaShift”, “AlphaVar”, and “AlphaBias”
  • #5005: ‘ShapeSample’ node: Add outputs for all possible ‘Color’ and ‘UV’ channels
  • #5255: ‘Projection’ node: Hard to use, requires using explicit discretization nodes on Position and Velocity outputs to have something usable
  • #5004: Add a ‘RandomStartFrame’ checkbox to the ‘Flipbook’ node
  • #4816: Add missing ‘view.velocity’ node
  • #4561: Add ‘VersionTest’ node returning true/false
  • #4279: Add layergraph ‘Version’ node to block events based on the build version
  • Fixed #5065: ‘SmallPointAA’ node doesn’t work properly if a value evaluated at spawn is wired into its ‘Position’ input.
  • Fixed #4068: ‘self.age’ template doesn’t work properly if forced at evolve
  • Fixed #4793: ‘Trail’ node: ‘Color’ input does not have the color semantic


Nodal editor

  • #5079: Display previews on resource (sampler) nodes
  • #5038: When double-clicking on a Sampler/Resource node, open an asset viewer on the corresponding asset
  • #5153: When hovering a wire or a pin, highlight the entire wire across multiple nodes, allows to quickly see where the value originates from and where it goes to
  • #5257: Export input nodes: Allow setting up dropdowns as “multi-selection” / “bitfield” dropdowns
  • #5258: Export input nodes: Allow auto-populating dropdowns with project constants
  • #5263: Annotations: Detect & auto-expand builtin tags “$(Graph.Description)” and “$(Graph.Name)”
  • Fixed #5244: Node creation menu: Node names which are larger than the popup cause a broken horizontal scrollbar to appear
  • Fixed #5184: Script editor: Syntax highlighting isn’t properly refreshed when the input list is changed
  • Fixed #5183: Template pin rules work for output pins, but the “Visible Outputs” category in the propertygrid is still populated with all checkboxes of all outputs, regardless of the pin rules.
  • Fixed #5222: Annotations do not support rich-text formatting available in node & pin description tooltips
  • Fixed #5221: Node creation dialog does not properly format template descriptions in the tooltips.
  • Fixed #5159: Scripts: Editing existing pins when multiple scripts are selected does not apply the change to all selected nodes (same goes for spatial layer storage & timeline track payloads)
  • Fixed #5158: Selecting multiple EventPayloadExtract nodes removes the “PayloadName” dropdown and converts it to a regular text field
  • Fixed #5157: Selecting multiple nodes of the same type hides some properties
Display previews on resource nodes (4 min 52 sec)

Graph compiler & optimizer

  • #3757: Renderers: remove them completely in the final effect when the pin ‘enabled’ gets constant-folded to false
  • #5021: dxdt node: Implement analytical time-based derivative of ‘effect.position’
  • #5018: dxdt node: Implement analytical time-based derivative of ‘view.position’
  • Fixed #5072: Optimizer VRP: Replace ‘clamp’ by ‘max’ or ‘min’ if the range of the input is proven to not intersect the upper or lower bounds, respectively
  • Fixed #5071: Optimizer VRP: Bad VRP collapse of ‘clamp’ : Not equivalent to individual ‘min’ and ‘max’ collapses
  • Fixed #5185: ‘dxdF(effect.age())’ is not expanded to ‘scene.dt’


  • #5229: Per-effect instance time-scaling (“time dilation”, speedup, slowdown or pause specific effect instances)
  • #5154: Detect and handle when an effect has been teleported, to allow cutting-off things like trail distance-based emission, to avoid spawning zillions of particles when teleporting effects across a level
  • #4976: Spatial layers: Add “Min” and “Max” queries
  • #3090: DxDt: add support of XForm nodes: Allows having proper cubic interpolation in trails with most effects
  • Fixed #5231: Spatial layer ‘sumKernel’ query: If all neighbors sample the kernels at a location where it equals zero, query returns inf instead of zero
  • Fixed #5217: shape.buildPCoordsCone() : ‘height’ input is inconsistent between surface and volume pcoords: Flipped when building volume pcoords, treated as ‘1 – height’ compared to surface pcoords

Simulation: GPU

  • #4989: Sim interfaces: GPU sim support
  • Fixed #5197: GPU sim: scene.lodBias() always returns 0


  • #5057: Sort by camera distance instead of camera direction
  • #4924: Triangle renderer: Add support for vertex shader billboarding (DrawInstanced)
  • #5260: Automatically process IBL environment maps to allow user to specify non prefiltered cubemaps in latlong / cubemap format, in LDR or HDR
  • #5208: Texture atlas / sub-UVs for decal renderers
  • Fixed #4048: Differences in generated tangents/normals in GPU and CPU billboarding implementations
  • Fixed #5235: One side of ribbons has shifted color values.
  • Fixed #4983: Emissive decals do not work properly
  • Fixed #5142: Using AlphaRemap & Atlas on billboards makes (some) billboards invisible with Geometry Shader & D3D12 rendering


  • #5261: Open assets in external applications
  • #5107: Associate all PopcornFX file extensions during editor installation
  • #5256: Project settings: New “Project constants” list, which can be referenced from nodes. Old physics surface types & collision filters moved to this global constant list.
  • Fixed #5181: Package import: Importing a package with different project paths (ex: different corelib path) does not auto-unselect conflicting items, will force-overwrite all existing items by default.
  • Fixed #5169: macOS editor: Assert window is unreadable, has black text on dark background
  • Fixed #5140: Project settings: Crash when adding a new build version while an effect editor is opened
  • Fixed #5133: Color picker: Custom colors do not support alpha
  • Fixed #5129: PK-ShaderTool generates shaders for disabled renderers

Effect editor

  • #5112: Add multi-selection support for the viewport gizmo
  • #5105: When a node is selected, bind the gizmo on fields that have 3D_Coordinate semantic or orientation type
  • #4993: Improve effects creation containing GPU simulated particles
  • Fixed #5143: Backdrop mesh transform only updates itself if Mesh Backdrop Collisions are enabled
  • Fixed #5162: Propertygrid: Array properties are never shown as being divergent when multiple nodes are selected
  • Fixed #4997: Renderer properties exposed as pins are prefixed with their category


  • #5302: Color-picker improvements: New colorspace visualizations
  • #5303: Color-picker improvements: TMI support
  • #5304: Color-picker improvements: Blackbody helpers
  • #5305: Color-picker improvements: Misc UI improvements
Color picker (3 min 29 sec)

Material editor

  • #5165: Material editor: display rendering interface name instead of full path
  • Fixed #5177: Material editor: all shader defines for stage are not displayed in properties panel

Plugins & Third-Party

UE4 plugin

  • #5211: UE4: Bind actor TimeDilation to effect instance’s time scale
  • #5006: UE4: Bind actor visibility to effect visibility flag
  • #4272: UE4: Houdini VATs materials
  • Fixed #5054: UE4: Texture sampling does not work until textures are manually set to “ColorLookupTable”
  • Fixed #4790: UE4: effect.scale isn’t connected to the actual effect scale.


  • #4944: Add PopcornFX export preset in Houdini’s VAT render node
  • Fixed #4994: Houdini pack : wrong normals with VAT
  • Fixed #5052: Flipped rotations for Rigid VAT materials


  • Fixed #5147: Upgrades aren’t run on .pkma/.pkri files when opened from content browser
  • Fixed #5050: Missing upgrader patching custom .frag/.vert SceneInfo and LightInfo members
  • Reset revision IDs due to 65536 overflow (messes up .exe versions on windows)
  • New upgrader @ v2.7.0.27: Removed inverted orientation sampled from animtrack
  • New upgrader @ v2.7.0.59: Removed ‘Gpu Enabled’ property of effects: this is now the default
  • New upgrader @ v2.7.0.68: Add a valid CategoryName to all rendering feature properties (if none are set: ‘General’)
  • New upgrader @ v2.7.0.69: Patch effects renderer nodes properties: ‘Position’, ‘BillboardingMode’ & ‘Color’ become ‘General.Position’, ‘General.BillboardingMode’ & ‘Diffuse.Color’
  • New upgrader @ v2.7.0.70: Patch .frag/.vert files per particle values & defines
  • New upgrader @ v2.7.0.258: Patch .vert/.frag files SceneInfo and LightInfo members
  • New upgrader @ v2.7.0.320: User settings: Added ‘ExternalApplications’ settings
  • New upgrader @ v2.7.0.431: Project settings: Split editor-specific settings into new ‘Editor’ category
  • New upgrader @ v2.7.0.475: Export nodes: Changed ‘UseDropDown’ checkbox to a dropdown, allowing to expose a multi-select dropdown
  • New upgrader @ v2.7.0.476: Project settings: Moved physics-specific enums to project constants
  • New upgrader @ v2.7.0.649: Per effect instance time-scale: Replaced ‘scene.dt’ by ‘effect.dt’
  • New upgrader @ v2.7.0.666: CoreLib template renames: ‘scene.dt’ -> ‘effect.dt’ (effect.dt now takes into account the new per-effect timeScale), and renamed effect.age node output from ‘t’ to ‘Age’
  • New upgrader @ v2.7.0.705: Cleanup node pins leftover values
  • New upgrader @ v2.7.0.743: CoreLib template renames: ‘Projection’ -> ‘Projection_NoStore’
  • New upgrader @ v2.7.0.835: Corelib upgrade
  • New upgrader @ v2.7.0.878: Finalize upgrade: Rewrite *.pkfx, *.pkma, *.pkri, *.pkcf, *.pkbo