PK-Editor v2.19

From PopcornFX
Revision as of 08:27, 5 April 2024 by Asow (talk | contribs)
Jump to navigation Jump to search

Back to anouncements
Released Mar 27th 2024.
Make sure you upgrade your runtime / plugins as well before switching to this version.

Release highlights

Fences 2D Grids 2D Grids Nodal Editor Improvements
Fences 1D, 2D, 3D & 4D Grids Grids bound as textures Nodal editor improvements

PopcornFX 2.19 release highlights livestream

The full sources of the UnrealEngine, Unity, and O3DE plugins are freely available on github:

Source code is available for everyone, can be freely used, modified and shared under the Community License terms.
Note: UE plugin archives are provided as 7z archives for better compression. They can be extracted using 7zip.


64-bits Windows build MacOS build Linux-64 build
PopcornFX-Editor_v2.19.1.20666_x64.exe (Latest) NewIcon.png
PopcornFX-Editor_v2.19.1.20666_x64.pkg (Latest) NewIcon.png
PopcornFX-Editor_v2.19.1.20666_x64.tgz (Latest) NewIcon.png

Changelog 2.19.1

Builds (Apr 4th 2024)

  • Fixed #13122: Crash or incorrect behavior when fencing some spatial nodes or event nodes together
  • Fixed #13460: Image sampler: Crash when using sampleDensity or remapDensity with an atlas and a texture small enough so that at least one atlas tile maps to less than one texel in one dimension. (v2.19.0 regression)
  • Fixed #13453: Optimizer: In some rare cases chained selects are incorrectly optimized and produce broken simulations
  • Fixed #13451: Nodal editor: Bad values set when creating a 'pick' node from an enum wire
  • Fixed #13450: Nodal editor: Crash when creating a 'switch' node from an enum wire
  • Fixed #13447: Templates & Layer inputs of type 'samplerGrid' are not visible in the propertygrid, cannot autoexport, and cannot easily toggle pin visibility
  • Fixed #13445: Editor UI: Many toolbar button tooltips do not display their shortcut
  • Fixed #13443: Script editor: 'Apply' button does not work, instead shows the documentation
  • #13444: Script editor: Auto-apply changes when the script editor panel gets closed, current behavior of discarding changes is too error-prone

Changelog 2.19.0

Builds (Mar 27th 2024)

Templates & Corelib

  • #13437: Corelib: Add 'distance' helper, to compute the distance between two vectors
  • #13436: Corelib: Add horizontal vector math helpers: Horizontal add & Horizontal mul
  • #13407: Corelib: New 'HasChangedSinceLastFrame' node, that checks whether or not a value has changed since the last frame
  • #13400: Corelib: randpick & randswitch nodes: Allow exposing probability values as pins instead of pure properties
  • #13324: Corelib: unify inputs of OnDeath node with the other event trigger helpers: Add Size & Color helper payloads
  • #13341: Image sampler: Add new corelib nodes: texture.sampleChannel,, texture.readChannel, texture.UVToID, texture.UVtoFrac, texture.subUVToGlobalUV, ...
  • #13050: Corelib: add 'raycast' search keyword to 'scene.intersect' and 'shape.intersect' nodes
  • #13412: Corelib: CurveOverTime node: Add scene.time at spawn and evolve in the sampling cursors dropdown
  • #13287: 'shape.sampleFromUV': Add a bool output that tells if the UV landed on a valid mesh area & give an option to auto-kill the particle if the lookup was invalid, like the 'mesh.sample' node
  • #13190: Sampler nodes: Unify naming of nodes, using the namespace notation across the rest of the low-level corelib nodes, and some of the shape nodes, ex: 'curve.sample' instead of 'CurveSample'
  • Fixed #13182: Corelib: effect.uniqueId() is broken and returns
  • Fixed #13325: Trigger & TriggerOnce nodes: 'Color' payload does not have the color semantic, doesn't show color-picker in editor.

Simulation & Rendering

  • #13260: New Simulation fences
  • #12434: New Grid sampler: Direct access grids (1D - 4D), low-overhead writeable "arrays"
  • #13188: New vector crop / extend nodes & script functions: Allow to change the dimension of any unknown-dimension vector to any know dimension, either cropping the vector, or extending it by adding components at zero, one, or broadcasting the last component.
  • #13158: New 'scene.tickID()' script function & node, returns the current frame index since the start of the scene simulation.
  • #13342: Image sampler: Expose low-overhead functions to directly read a specific texel of the texture
  • #13288: Add a node & script function to test whether or not the PCoord of a mesh is valid or not
  • #13271: Editor: Display errors & warnings generated by backend shader compilations for GPU-sim
  • #13051: Make 'within' node & script function output a 'bool' value instead of a 0.0 | 1.0 'float' value
  • #13047: GPU sim: Add support for CDF curves in 'vrand' node (only worked in CPU sim previously)
  • #12989: GPU sim: Add debug.drawValue & debug.drawLine support
  • #12832: GPU sim: implement shape.projectPCoords & shape.project for Mesh sampler
  • #12675: GPU sim: implement shape.sampleSurfacePCoordsFromUV()
  • #12524: GPU sim: Implement sample density atlas & remap density atlas for image sampler
  • #12561: Editor: Enable shader debug information generation for GPU sim shaders
  • Fixed #13300: CPU sim: Constructing a float3 vector from 3 float values, and a float4 vector from 4 float values, is slow
  • Fixed #13252: CPU sim: sim.lodQueryBox() and sim.lodQueryPoint() do not work when some or all of its inputs are per-wave or constant values instead of per-particle values.
  • Fixed #12685: D3D11 GPU sim: Systematic GPU buffer allocation & data upload when sampling meshes
  • Fixed #13366: D3D11 GPU sim: Some shaders will fail to compile when using FXC with -WX, because of false-positive signed/unsigned mismatch warnings when doing an 'int' compare against an immediate constant starting with '0x'
  • Fixed #13336: GPU sim: Empty density texture as an inline property makes density sampling fail, instead of behaving like an identity mapping
  • Fixed #13339: GPU sim: Empty texture as an attribute sampler for density sampling/remapping fails, produce bad samples that mismatch the CPU-sim, which has an identity mapping
  • Fixed #13337: GPU sim: sampleDensity & remapDensity with a pure white or pure black texture returns wrong results
  • Fixed #13276: GPU sim: Sampling a shape exposed as a property with an empty path will cause the compilation to fail on GPU and fallback to CPU. An empty path should simply sample a point like in the CPU sim.
  • Fixed #13245: GPU sim: Setting a mesh attribute sampler to 'null' on an effect instance that has been running for a few frames with an overridden GPU mesh keeps the old mesh instead of resetting it to the default mesh defined in the effect.
  • Fixed #13243: GPU sim: Sampling mesh tangents causes fallback to CPU sim
  • Fixed #6143: GPU sim: Mesh sampling does not support 'fast' sampling mode, falls back to 'uniform': Not necessarily better, completely changes distribution on sparse meshes
  • Fixed #13352: 'orientation.fromForward' returns Nan values with very large axes (length about 1.e30f)
  • Fixed #13322: 'asint' & 'asfloat' script builtins & nodes do not behave correctly when fed the same type they reinterpret to. Ex: if an int is given to asint, it will convert it to float, then reinterpret it to int. Leads to completely broken results
  • Fixed #13289: 'mesh.sample' & 'SpawnOnMesh' nodes: Using the density texture with UV-sets that don't cover the entire surface is broken, misses some areas
  • Fixed #13247: Attribute sampler mesh: sometimes randomly toggles between uniform & naive random sampling
  • Fixed #13335: Image sampler: Giving out-of-range values for the 'filterMode', 'addrMode', and 'channel' inputs of the sampling & read functions has undefined behavior.
  • Fixed #13293: Image sampler: sampleDensity & remapDensity expose an 'addrMode' which is unused, has never been used, and makes no sense, it should be removed.
  • Fixed #13149: Editor: Skinned mesh sampling: Tangent.w contains zero, should contain a 1 / -1 sign of the bitangent/binormal, works as expected when sampling the non-skinned bind-pose, or static meshes


  • Fixed #13398: GPU Sim: GPU ribbons are broken (since v2.18)
  • Fixed #13435: Default materials: when using 'Lit' render-feature, 'NormalWrap' render-feature is broken, incorrectly wraps the N dot L term
  • Fixed #13255: Experimental materials: Dithering feature is broken and missing from .pkri
  • Fixed #13230: debug.drawValue helper: The 'Enabled' pin doesn't work, just turns the text black.
  • Fixed #13184: viewpos align billboards in custom axis systems are flipped compared to standard axis systems
  • Fixed #12310: LegacyLit: NormalWrapFactor is broken

Graph Compiler & Optimizer

  • #11808: Project settings: Allow disabling compiler warnings, or turning specific warnings into errors
  • #13227: Nodal editor: Display errors & warnings generated after compilation, when creating the actual simulation updater. These can cause GPU sim fallback to CPU sim, or no sim to happen at all, and are invisible to the user in the UI.
  • #13109: Compiler backends warnings & errors are invisible in-editor, always logged to the logfile, never to the proper compilation message stream.
  • #12085: Optimizer: Reduce the dimension of certain operations when some components are never used
  • #13075: Curve optimizer: Improve heuristics used to determine when to replace the curve sample by a polynomial or fourier expansion in the compiled instructions

Nodal editor

  • #13308: Nodal editor: Allow swapping input values/wired of simple 2-input math nodes by hitting the 'X' key
  • #13052: Nodal editor: Improve visibility of things plugged in nodes when hovering wires or pins
  • #4596: Nodal editor: Highlight clusters of nodes contributing to the currently hovered wire / pin
  • #3053: Nodal editor: Pan nodal view when dragging wire or node outside viewport
  • #13054: Nodal editor: Annotations: Ctrl+Del to delete the annotation and all its contents even if they are not selected
  • #13053: Nodal editor: Annotations: Copy/Pasting an annotation now also copies & pastes all its contents without having to select each node separately
  • #13238: Nodal editor: Display particle count in layer tooltips, in addition to sim time and memory footprint
  • Fixed #13363: Nodal editor: In a readonly graph, double-clicking on a constant node with a 'Color' semantic pops the color picker and allows to edit it
  • Fixed #13360: Nodal editor: In a readonly graph, double-clicking on an annotation or post-it to edit its description allows to edit it even when viewing a readonly template
  • Fixed #13275: Nodal editor: Overriding templates sim location is counter-intuitive: Internal layers forced to "CPU" Should not be promoted to "GPU" if the whole template is set to "GPU"
  • Fixed #13061: Nodal editor: Ctrl+Shift+Drag to clone nodes sometimes moves the original node along when using Ctrl+click
  • Fixed #13058: Nodal editor: Moving an annotation occasionally teleports some of the inner nodes outside the annotation
  • Fixed #8353: Nodal editor: Annotations sometimes move wrong nodes
  • Fixed #13348: Material adapter graph: Warnings emitted because an output is not found in the material are not visible on the renderer node in the parent nodegraph.
  • Fixed #13345: Material adapter graph: Material pins that are not forwarded to the renderer still appear in the renderer pin list

Effect editor

  • #13248: Move editor post-fx settings from user settings to project settings, allows to have better project presets depending on the target engine, and to better tweak the post-fx stack per-project
  • #13110: Editor viewport post-process: add color remap post-fx
  • #3288: Editor viewport post-process: add more control on the chromatic aberration (distortion)
  • #13232: Backdrop mesh: Add a way to specify which LOD level to use to display the backdrop if the mesh has multiple LODs
  • #13225: Effect thumbnails: Allow capturing debug.draw* nodes when they are enabled in the viewport
  • #13237: Effect editor advanced tab: Summary Panel: Display page usage ratio in the page views
  • #13211: Effect memory inspector: Better feedback when there's an error loading the file
  • #12972: Editor rendering: Change default billboarding from CPU billboarding to VertexShader
  • #10051: Attributes: Allow copy/pasting attributes from one effect to another
  • #9162: Editor: improve GPU sim timings display
  • Fixed #13244: Effect Editor: Using skinned mesh backdrops updates the skinned mesh sampling data each frame even if there is no attribute sampler active that will sample the mesh: Useless performance drop
  • Fixed #13369: Effect editor: When the effect backdrop spawns the current effect, all attributes are set to defaults, and attribute samplers bound to skinned meshes are ignored
  • Fixed #13239: Effect editor advanced tab: Pipeline view: 'Unfold tasks' box shows incorrect timings, also includes evolve timings in some cases for layers with a single page.
  • Fixed #13231: Axis-System display not sticking to left-down corner with custom axis system
  • Fixed #13217: Editor: Skinned mesh backdrop has poor performance when using a mesh with many LOD levels: Every single level gets skinned every frame even though only the LOD0 is needed for display & sampling
  • Fixed #13177: Wind backdrop properties ignore the project axis system

Mesh importer

  • #13292: Mesh importer UV panel: Export to image: Add option to offset UVs before rasterizing the image, to help handling UDIMs
  • #13291: Mesh importer UV panel: Export to image: Add option to export triangles colored with the triangle area ratios to use with density sampling
  • #13290: Mesh importer UV panel: Export to image: Add option to export filled triangles instead of wireframe
  • #9306: Mesh importer: visualize tetrahedrons from tetrahedral interior mesh generation

Editor (General)

  • #13199: When opening a project, check if AssetRegistry.pkbo is readonly, and if it is, warn the user that it might be a problem, the Cache folder should not be pushed in repositories
  • #13242: When opening a project, warn if there are out-of-date assets from a version of PopcornFX older than the current project (upgrade miss), and ask if they should be upgraded
  • #13203: Trying to open binary baked files in the editor produces an unhelpful error message. Make it more explicit that it's failing because the file is a baked binary file and the editor cannot open these.
  • #13384: New project presets: Add default surface types to Unreal preset
  • #13228: Editor: Additionnal command line argument to import a package in a project: '--importpackage'
  • #13134: Marketplace: When clearing the download cache of a package, show in the confirmation dialog how much space is about to be freed
  • #13133: Marketplace: Allow clearing marketplace download cache in a single action instead of having to right-click on every package individually.
  • #8602: Content browser: Allow force-refreshing the current view using F5
  • Fixed #13347: Double-clicking on a .pkproj file doesn't open it with the proper editor, only with the latest installed
  • Fixed #13383: Project settings: Changing existing project constants (renaming or changing the value) isn't properly taken into account until the editor is restarted, should be taken into account immediately, just like when adding/removing constants.
  • Fixed #13371: Editor: Export asset details to spreadsheet: Does not remember last export folder
  • Fixed #13256: Editor materials: No error or warning is visible in content-browser when material has some render features that fail to load (ex: do not exist anymore in the .pkri, or .pkri not found)
  • Fixed #13241: Dangling thumbnails dialog when opening a project does not tell user when the files failed to be removed because they were readonly.
  • Fixed #13216: Content browser & Texture viewer: Editor displays 0x0x0 image size when it has an unsupported format, even though header information might still be available and displayable
  • Fixed #13161: Marketplace: Hitting F5 at the same time quickly enough after having clicked on a package to view its contents causes the UI to be messed up and display the widgets twice
  • Fixed #13131: Project launcher: Installed editor tab does not refresh properly when uninstalling some versions

UnrealEngine plugin

  • #12993: Unreal plugin: Drop support for UE4.27 & bump visual studio projects from vs2017 to vs2022
  • #12915: Unreal plugin: Effect names added to CPU simulation tasks instrumentation
  • Fixed #12712: Unreal plugin: reimporting an effect looses all attribute values
  • Fixed #13205: Unreal plugin: Asset paths with non-ansi characters are incorrectly handled by the plugin
  • Fixed #13316: Unreal plugin: In UE5, skinned mesh attribute sampler samples meshes adding in with a huge scaling factor of over 200x
  • Fixed #13209: Unreal plugin: Drag & Dropping an effect for the first time in a project sometimes does not import anything when the source pack has not been set manually beforehand, requires retrying multiple times or an UE editor restart
  • Fixed #12995: Unreal plugin: 'OneShotTrigger' property of 'bool' attributes is not implemented in the UE Editor UI
  • Fixed #12942: Unreal plugin: particles are badly blurred with UE5's TSR
  • Fixed #13311: Unreal plugin: Skeletal mesh attribute sampler: Checking the 'SkinNormals' or 'SkinTangents' checkboxes without checking 'SkinPositions' cause no skinning to occur.
  • Fixed #13202: Unreal plugin: When importing the first effect in the unreal project, the source PopcornFX project path is set as an absolute path in the project settings. Whenever possible, prefer automatically setting a relative path.
  • Fixed #12917: Unreal plugin: Crash when importing or cooking effect containing GPU sim layers sampling local meshes

Unity plugin

  • #12723: Unity: implement Transform UVs for mesh renderers
  • #13320: Unity: show renderer node CustomName on renderers in the PkFXEffectAsset inspector
  • #13304: Unity: Reduce image sampler load time
  • #13303: Unity: Reduce runtime memory footprint used by effect resources
  • Fixed #13185: Unity: Camera.position and Camera.direction nodes have different behaviors compared to PopcornFX Editor
  • Fixed #13270: Unity: PreloadEffectFromAsset cause lag spikes
  • Fixed #13432: Unity: VAT mesh renderers are not displaying correctly
  • Fixed #13408: Unity: effect browser throw warnings when the effect have a mesh renderer
  • Fixed #13397: Unity: null reference when hitting play with a PKFxEffectAsset selected
  • Fixed #13082: Unity: Asset imported with the PKFxImporter can have mismatching fileID on different computer
  • Fixed #12918: Unity: Top offenders UI canvas don't show any effects

All v2.18.6 fixes

Simulation & Rendering

  • Fixed #13433: Changing the query mode of a spatial-layer node makes the nodegraph fail to compile
  • Fixed #13431: GPU Sim: Baked effects have their GPU newborn kernel aliased with the evolve kernel, inducing various issues on the GPU simulation
  • Fixed #13359: GPU Sim: GPU layers may report a large number of dead particles, leading to various effect-instance issues
  • Fixed #13305: GPU sim D3D11: Cannot have more than 1024 effect instances
  • Fixed #13414: Rendering: Multi-plane ribbon atlas incorrect with multiple instances and customU.
  • Fixed #13294: Image sampler: remapDensity in 'Linear' mode sometimes returns invalid UVs containing infinities


  • Fixed #13302: Nodal editor: Crash when copy-pasting a layer with attributes in the effect graph and waiting for the auto-save to kick in without validating 'the warning window that pops-up on paste.
  • Fixed #13368: Editor: Crashes when closing two effect editors that use the same skeletal mesh backdrop, when both were opened side to side
  • Fixed #13295: Memory report of an effect using sampleDensity or remapDensity is incorrect, reports a much lower size than is really used for the texture density mapping lookup
  • Fixed #13254: Attributes: Crash when changing the Attribute 'ExportedType' from the effect interface
  • Fixed #13201: Editor: Right-click 'Rename' on an attribute pops the rename dialog twice
  • Fixed #13286: Mesh importer: UV panel sets itself up with the union of the bounds of all UV sets, instead of the one being currently viewed, makes it hard to navigate when some UV-sets are wildly out of the [0,1] range

UnrealEngine Plugin

  • Fixed #13208: Unreal plugin: Editor settings & source project are re-resolved & reloaded everytime the 'Settings()' accessor is called, extremely inefficient
  • Fixed #13204: Unreal plugin: Source paths in the plugin settings are always serialized as absolute path, even when a relative project path is entered

Unity Plugin

  • #13235: Unity: texture atlases for meshes in HDRP
  • #13219: Unity: UseVertexColor render feature for Meshes renderers in URP
  • Fixed #13240: Unity: DoubleSided for meshes not working with HDRP
  • Fixed #13224: Unity: TransformUVs.RGBOnly is not working properly for mesh renderers in URP
  • Fixed #13223: Unity: Renderers using different atlas subdivisions use incorrect altas definition in URP
  • Fixed #13222: Unity: Renderers with different alpha threshold have incorrect rendering in URP
  • Fixed #13221: Unity: TransformUVs.Offsets is reversed for Mesh renderers
  • Fixed #13220: Unity: Fix TransformUVs rendering for mesh renderers is broken in standalone builds

AfterEffects plugin

  • Fixed #13418: AE: Frames are instable and cause popping of particles when seeking quickly
  • Fixed #13030: AE: Screen aligned billboards render backwards

Content examples update

New "Tutorials" effects

Simple 1D grid example Conway's "Game of life" using a 2D grid
Simple 1D grid example
Conway's "Game of life" using a 2D grid