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.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