PK-Editor v1.10

From PopcornFX
Jump to navigation Jump to search

Back to anouncements
Pre-Released ~March 2016, Released ~May 2016 (GDC 2016 edition)

Will upgrade assets: Projects upgraded to 1.10 cannot be opened with earlier versions

Release highlights

LOD / camera helpers Mesh volume sampling Localized pages Script optimizations
LOD / camera helpers Mesh volume sampling
Localized pages
Script optimizations


64-bits Windows build
PopcornFX-Editor_Setup_v1.10.8.32200_x64.exe (Latest Preview) NewIcon.png
PopcornFX-Editor_Setup_v1.10.7.32031_x64.exe (Latest) NewIcon.png

If you encounter problems installing the editor, please see the Troubleshooting page.
Note: since v1.10, we stopped providing 32-bits builds of the editor. If this is a problem for you and if you need one, please contact us on Support mail.png

Plugin status

  • Unity plugin status : Available for v1.10 (Plugin version v2.9)
  • UE4 plugin status : Available for v1.10 (Plugin version v1.2.0)

Known issues

Known issues in the latest 1.10.8 build (Nov 9 2016):

  • Collision evolver sometimes misses collisions when particles are sliding on surfaces.
  • Collision evolver produces slightly unstable bounces when framerate is not stable.
  • Infinitely self-triggering particles that use event recursion will keep all their previous instances in memory until the last child particle is killed.

Please contact support at if you encounter any other problem

Latest fixes

Patch 1.10.8

Build: PopcornFX-Editor_Setup_v1.10.8.32200_x64.exe (Nov 09 2016) (Latest Preview) NewIcon.png

  • Mesh backdrop Mesh backdrops : Editor now displays warning in viewport when the mesh needs to be re-imported
  • Spatial insertion evolver Spatial insertion evolver : fixed insertion bug on the frame where particles died : particles were inserted at the dead particle's positions, but with the values of live particles inside the same memory-page. Caused incorrect values to be returned by the spatial queries when particles died inside the query radius. See Bug report on the answerhub

Patch 1.10.7

Build: PopcornFX-Editor_Setup_v1.10.7.32031_x64.exe (Nov 01 2016) (Latest) NewIcon.png

  • Editor now displays warning in viewport when volume-sampling mesh that doesn't contain volume info
  • Fixed 1.10.5 regression that caused older effects to fail loading part of their nodes, and entirely broke the effects.
  • Added upgrader to catch a v1.10.0 mesh volume sampling regression (Meshes sampled in volume pre-1.10 were falling back to surface sampling because volume sampling wasn't implemented. This caused all those samplers to fail when switching to v1.10 because meshes need to be built with volume sampling explicitely to be able to be sampled in volume mode. This upgrader runs if the project is being upgraded from 1.9 to 1.10, and patches all mesh samplers that are set to 'Volume' back to 'Surface')

Patch 1.10.6

Build: PopcornFX-Editor_Setup_v1.10.6.31878_x64.exe (Oct 19 2016)

  • Added upgrader to catch a v1.9.0 turbulence upgrader regression (Bad handling of "RandomTimeVariation" property, which, if it was not set to the default value, would cause all the other non-default turbulence properties to be reset to their default)
  • Image sampler Image sampler : Fixed crash when feeding a floating-point texture with Inf / NaN / invalid values to the density sampler. Now logs an error, and discards the image, samples an uniform density.
  • Containment evolver Containment evolver : Fixed minor warning reports glitches in editor, would sometimes refresh incorrectly.
  • AssetBaker : Fixed regression where .txt files were baked as HBOs.

Patch 1.10.5

Build: PopcornFX-Editor_Setup_v1.10.5.31561_x64.exe (Oct 02 2016)

  • Fixed a small memory leak related to attributes, happening in arcane conditions.
  • Improved allocation performance by removing allocation timings by default in release builds
  • AtlasBuilder : Project files : Fixed path serialization corrupting paths with spaces, due to URI encoding
  • FBX Importer : Fixed AnimPath import when path was not centered in the world
  • Resource extension types setup in project settings were incorrectly saved, and file dialogs were using the default extensions.
  • TIFF loader : Fixed memory leak
  • TIFF loader : now supports more formats
  • Trying to modify project settings if they're read only now pops an error dialog giving a retry option
  • Skeletal animation Loader : could crash if the .pksa file contained invalid values (FBX importer could generate those in some cases)
  • FBX Importer : Now warns when the source FBX animation data contains invalid values (infinities or NaNs), and patches the transforms to be identity instead.

Patch 1.10.4

Build: PopcornFX-Editor_Setup_v1.10.4.31262_x64.exe (Sep 05 2016)

  • Fixed critical crash related to SpawnerIDs

Patch 1.10.3

Build: PopcornFX-Editor_Setup_v1.10.3.31081_x64.exe (Aug 03 2016)

  • Audio sampler Audio sampler : Fixed bug that caused some particles to sample incorrect values in 'point' and 'linear' sampling modes

Patch 1.10.2

Build: PopcornFX-Editor_Setup_v1.10.2.31071_x64.exe (Jul 21 2016)

  • Fixed 1.10.0 particle page allocator regression : empty mediums always kept one page around, produced excessive memory usage.

Patch 1.10.1

Build: PopcornFX-Editor_Setup_v1.10.1.30998_x64.exe (Jul 19 2016)

  • Fixed highly increased runtime memory footprint due to script cache, faster overall load times, and much faster unload times.
  • Fixed Editor UI crash when setting some sliders to invalid values (ex: 'BouncesBeforeDeath' property of the Physics evolver Physics and Collisions evolver Collisions evolver set to -1)
  • Scripts : Fixed bug in the 'vrand(min, max, CurveSampler)' function that returned incorrect results most of the time when used in spawn scripts with low spawn-rate (less than a few particles per frame), produced circular-shaped distributions instead of spherical.
  • Fixed terminally broken package import when project files were not located at the project root (bug was introduced in v1.10.0. Fix made in v1.10.1 has been backported in the latest v1.10.0 editor build)
  • Audio sampler Audio sampler : Fixed bug when sampling waveform in cubic mode: invalid values were generated whenever the waveform sample had a negative value (went below the baseline)
  • Particle Medium Bounding Boxes: Fixed bug when particles lived 1 frame, bounding boxes where not properly taken into account.
  • Texture sampler Texture sampler : Fixed a bug where the 'dimensions' getter could be constant-folded in shipping optimization mode even if the texture was an attribute sampler and could change dimensions at runtime
  • Scripts : Fixed CRASH when using min() or max() functions with integer parameters.
  • Scripts : Fixed CRASH when trying to use special invalid characters for variable names (ex: 'ö', 'é', etc). Now doesn't crash, and displays the proper error message.
  • FBX Importer : added a 'RemapToZero' option that forces the first frame of the animation to be at t=0, useful when slicing a large animation file containing multiple animations on the timeline into sub-sequences.
  • Scripts : Fixed an old bug (at least since v1.7) where a call to the dot() function, with mixed int and float vector parameters would return incorrect results. (ex: dot(int4(...), float4(...))
  • Scripts : Fixed excessive editor framerate drop when triggering lots of layers each frame, or when layer scripts failed to compile.

Changelog 1.10.0

Build: PopcornFX-Editor_Setup_v1.10.0.30644_x64.exe (Jun 09 2016)


  • Runtime
    • Shape sampler Shape sampler : fixed mesh sampler not declaring itself to scripts if mesh doesn't exist anymore
    • Shape sampler Shape sampler : fixed serious bug when 'Shape.buildParametricCoords*' functions for shape types behaving differently in 'Volume' and 'Surface' modes : sometimes a shape sampler tagged as 'Volume' would only have 'Surface' functions available, and vice-versa.
  • Editor
    • Audio backdrop Audio backdrops : Fixed crash when opening an effect with an audio backdrop that references a sound that doesn't exist on-disk anymore
    • Turbulence sampler Turbulence sampler : when changing the GainMultiplier and Strength properties, the warnings were not properly refreshed (warns when GainMultiplier != 1.0 or when Strength == 0.0)
    • Mesh Build: building with missing Animation, Skeleton, or Skinning does not make the build fail anymore


  • Runtime
    • Audio sampler Audio sampler : optimized sampling functions : 'point' and 'cubic' sampling 13x faster, 'linear' sampling 18x faster.
    • Script optimizer : optimizes single-argument math functions across swizzles. Ex: abs(float(v).xxx1) --> abs(float(v)).xxx1, sin(float(v).xxx) --> sin(float(v)).xxx
    • Script optimizer : now recognizes constant local variables and propagates them properly everywhere they're used.
    • Script optimizer : able to fold non-constant local variables that are only referenced in one place
    • Script optimizer : removes unused local variables and any computation associated to them.
    • Script optimizer : can now fold min(1, max(0, x)) patterns into saturate(x)
    • Script optimizer : arithmetic operations can now penetrate rand() calls when the arguments to rand() are constant, and the operation's second operand is constant as well: rand(0.5, 1.2) * 3 --> rand(1.5, 3.6)
    • Scripts : when runtime runs on an AVX-capable CPU (PS4, XboxOne, and latest desktops), all script operations run approximately between 1.3x to 2x faster (both float ops and int ops)
    • Scripts : faster integer modulo operator when computing a modulo between a streamed value and a non-streamed value. 3.5x faster for non-AVX capable CPUs, 7.5x faster for AVX-capable CPUs
    • Scripts : faster float modulo operator when computing a modulo between a streamed value and a non-streamed value, with float2, float3 and float4 (float has the same speed as before) : respectively 8.0x, 5.7x, and 5.6x times faster for NonStream%Stream, and 11.9x, 5.7x, and 6.9x for Stream%NonStream
    • Scripts : 'select' on an AVX-capable CPU is between 1.6x - 2.0x faster
    • Scripts : 'lerp' on an AVX-capable CPU is 1.30x faster
    • Scripts : 'clamp' on an AVX-capable CPU is 1.15x faster
    • Scripts : 'within' on an AVX-capable CPU is 1.35x faster
    • Scripts : 'cross' with non-stream parameters is 4.5x faster
    • Scripts : 'mirror(v, n)' has been renamed to 'reflect(v, n)', and is also 2.75x faster
    • Scripts CPU backend : removed loadcst<> instruction : no more constant loads, direct mapping to a constant memory buffer, less overhead when running scripts on a low number of particles (typically spawn scripts)
    • Shape sampler Mesh Mesh sampler : sampling in 'Vertex' mode is now 1.5x faster. Sampling pcoords in 'Vertex' mode is 2.3x faster. Sampling positions or other properties using pcoords is as fast as before
    • Improved performance of thread pool and task processing in general.
    • Scripts : can now run all non-random functions at per-page or per-frame frequency instead of per-particle, if they are fed per-page/per-frame varying parameters, and not per-particle.


  • Runtime
    • New experimental spatially localized pages : particles are now stored according to their spatial locality. Does not change the effects, but allows great improvements performance wise: chunks of particles can now be culled, but also faster scene intersection and spatial queries due to improved spatial coherency.
    • Shape sampler Mesh Mesh sampler : experimental volume sampling
    • Scripts : script editor now displays real timings for each script instruction, as the per-line coloring in the source tab, and as real raw per-particle CPU cycles in the disassembly tab.
    • Scripts : new 'debug.assert(condition)' helper function, that causes the editor to pause the simulation and select the particles where 'contition' was not true.
    • Binary .pkfx file format : now stores strings as unique entries into a string table, binary .pkfx are now ~30% smaller on average
    • Containment evolver Containment evolver : added new mode 'WrapBox'
    • Scripts : new builtins: deg2rad, rad2deg, randsel, linearstep, isfinite, isinf, isnan
    • Script compiler : [MIGHT BREAK EFFECTS] now emits an error when using an uninitialized local variable. The following examples compiled fine in previous versions but produced undefined runtime behaviors, now they don't compile anymore: "float x += 1;", "float x = sin(x) + 1;", "float y; float x = y; y = 1;"
    • Scripts : view namespace added with the following functions: project, unproject, unprojectedAxis, distance, closest, count, position, axisSide, axisUp, axisForward, useful for LOD
    • Scripts : rewrote blackbody() function to actually be usable and not return physical values (in units of W·sr−1·m−2·Hz−1): now returns the normalized RGB chromaticity of the planckian locus Blackbody spectrum
    • Shape sampler Mesh Mesh sampler : removed unused and useless 'DensityScale' property
    • Shape sampler Shape and Animtrack sampler Animtrack samplers : 'BuildParametricCoordsMesh' now handles 'Vertex' and 'Volume' modes, in addition to existing 'Surface' : 'Shape.buildParametricCoordsMesh(int tetraId, float3 uvw)', 'Shape.buildParametricCoordsMesh(int triangleId, float3 uv)', 'Shape.buildParametricCoordsMesh(int vertexId)'
    • Shape sampler Shape sampler : added '.tetraCount()' getter, in addition to '.vertexCount()' and '.triangleCount()'
    • Scripts : new cbrt(x) and fast_cbrt(x) (cubic root) builtins, using them instead of 'pow(x, 0.33333333)' is 2.5x and 5.6x faster respectively
    • Physics evolver Physics and Collisions evolver collisions evolver : added new 'World' transform mode to the 'EventTransformsMode' : does not rotate the event matrix, keeps it aligned to the worldspace axes, only translates it to the contact origin.
    • Curve sampler Curve sampler : added 'derive(t)' function, in addition to existing 'sample' and 'integrate' functions : returns the derivative of the curve at the specified cursor
  • Editor
    • Project files renamed from 'PopcornProject.xml' to 'PopcornProject.pkproj' (an upgrader takes care of patching everything necessary)
    • Meshes: Right-click "Import" has been renamed to "Build Assets"
    • Mesh Build: If there is no pkcf, Animation, Skeleton, and Skinning are enabled by default.
    • Project selection window now displays links to useful online resources : Answerhub, Documentation (Scripts, Nodes, Editor, UE4, Unity), Roadmap, Tutorials, youtube, facebook, twitter.
    • Effect backdrop Effect backdrops : new 'UseCurrentEffect' property: when checked, the backdrop will reference the current effect, does not break references when using rename, move, or save-as on the effect.
    • New 'Performance settings' dialog, allowing to control the runtime's worker thread-pool and disable some CPU extensions to emulate lower-caps platforms.

  • Assets
    • COvenBakeConfig_Mesh : Removed the following properties (either unused or bad design) : 'ResourcePath', 'ResourceRootDirectory', 'OutputPkmmPath', 'BlendShapes', 'CustomStreams', 'BoundarySmooth', 'BoundaryAutoDetect', 'Skinning' (controlled by 'Skeleton' instead)
    • COvenBakeConfig_Mesh : Renamed properties 'Geometry', 'Vertices', 'Animation', and 'Skeleton' to 'ImportGeometry', 'Positions', 'ImportAnimation', and 'ImportSkeleton' respectively