PK-Editor v1.9

From PopcornFX
Jump to navigation Jump to search

Back to anouncements
Pre-Released October 25th 2015, Released December 21st 2015

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

  • Runtime below v1.9 will not be able to load 1.9 effects, make sure you upgrade your runtime / plugins as well before switching to this version.
  • Runtime below v1.9 will not be able to load meshes baked with runtime 1.9 and above.

Release highlights

Spatial layers / Plexus effect Text, Grid, and Wind backdrops GPU simulation Probability curves & Curve.sampleCDF() function : create your own custom random distributions
Spatial layers
Nth neighbor queries
New editor backdrops
Text backdrop Text + Grid backdrop Grid + Wind backdrop Wind
New turbulence sampler Custom Probability curves


64-bits Windows build
PopcornFX-Editor_Setup_v1.9.6.31901_x64.exe (Latest) NewIcon.png
32-bits Windows build
PopcornFX-Editor_Setup_v1.9.6.31901.exe (Latest) NewIcon.png

If you encounter problems installing the editor, please see the Troubleshooting page.

Known issues

Known issues in the latest 1.9.6 build (31901, Oct 19 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.9.6 (Oct 19 2016)

Build: PopcornFX-Editor_Setup_v1.9.6.31901_x64.exe (Latest preview)

  • Added upgrader to catch 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)

Patch 1.9.5 (May 28 2016)

Build: PopcornFX-Editor_Setup_v1.9.5.30373_x64.exe (Latest preview)

  • Fixed bug in rotation evolver when in 'Axial' mode leading to incorrect rotations
  • Curve sampler Curve & DoubleCurve sampler double-curve samplers : Editor did not display Name, Description, and UserData properties in the property panel. Now does.
  • Fixed mesh renderer 'Additive' materials : did not properly take alpha-channel of particle color into account, now behaves properly, like the engine plugins and runtime SDK example shaders.

Patch 1.9.4 (May 3 2016)

Build: PopcornFX-Editor_Setup_v1.9.4.30080_x64.exe (Latest)

  • FBX Importer: Fixed normals: fix + fix 1.9.3 bad fix "bad normals (1.9 regression)", Normals should now properly:
    • Take node transforms into account
    • Take 'UseAnimFrameBind' into account
    • Respect smoothing groups (multiple normals at same vertex/position in general)
  • Fixed a crash in Spatial layer spatial layers when too many particles were inserted

Patch 1.9.3 (Apr 18 2016)

Build: PopcornFX-Editor_Setup_v1.9.3.29631_x64.exe (Latest)

  • /!\ PC Windows/Mac/Linux : Fixed rare thread freezes/deadlocks on some CPUs, more or less rare depending on the OS and CPU
  • Installer : Fixed issue that caused the installer to not kill running instances of PopcornFX and fail installation.
  • Fixed a crash when using a float2 Field evolver Field evolver with particles that have side-effects (triggers, trails, ...)
  • Shape sampler Mesh Sampler Shape Mesh : optimized sampling lookup generation : now much faster. (speedup depends on the engine and hardware, but roughly between 3x and 18x faster than before).
  • Fixed crash when Mesh renderer Renderer Mesh Descriptor was invalid (mesh not built/not found)
  • Fixed FBX mesh import that could produce bad normals

Patch 1.9.2 (Mar 06 2016)

Build: PopcornFX-Editor_Setup_v1.9.2.29060_x64.exe

  • Script compiler : fixed crash when implicit conversion operator was generated to convert custom types in function arglists. Fixes crash when passing 'Life' as a function's float arg. ex: select(a, Life, condition)
  • GPU simulator : rewrote dead particles processing and removal, effects running on the GPU are now simulated between 10% and 20% faster.
  • Editor : Fixed effect optimization level that did not affect trails and sub-trails : they were always built in 'shipping' mode.
  • Scripts : Fixed integer shift left/shift right or divide by an int3, or int4 constant where all components were identical, except the 'z' component, produced results as if 'z' was the same as xyw.
  • Scripts : Fixed integer modulo operator on everything but simple ints badly processed some values.
  • Scripts : Fixed integer division of a stream value ('int' particle field) by a non-stream value (ex: 'int(scene.Time)', or an 'int' attribute in a spawn-script) returning zero when the divider was '1', and crashing the runtime when the divider was '0'. division by a stream containing zeroes or ones did work properly though.
  • Script evolver Script evolvers : faster when using 'dt' in the script : 'dt' was not properly seen as varying per-frame (normal frequency), was treated as varying per-particle (stream frequency).
  • Editor : Fixed crash when content browser tried to preview textures greater than 256 that are large in one dimension but very small in the other, ex: 1024*2 texels
  • Collisions evolver Collision evolver : fixed bad collision misses when sliding on surfaces
  • Editor : Spawn scripts : Fixed spawner.Velocity sometimes not properly refreshed when editing the effect, required closing/reopening the effect.

Patch 1.9.1 (Feb 19 2016)

Build: PopcornFX-Editor_Setup_v1.9.1.28840_x64.exe

  • Particle treeview : right clicking on a node now shows a new "Documentation" menu, that opens your web browser on the appropriate wiki node documentation page.
  • Curve sampler Curve sampler : Had to close/reopen the FX to see changes made to probability curves, now refreshes after moving a control-point when releasing the mouse button.
  • Script compiler : improved handling of semicolons/scopes, and weird statements. This now compiles as expected: "{ { ; } }", "{ 42;-42; }" (even though it does nothing), it also now properly catches semicolons as errors when they appear inside parameter lists.
  • Evolve state States : Fixed runtime crash for layers that had no state. Having no state is now considered an error and is forbidden. removed add and delete state menu items from the treeview. Will be restored in a later version when having multiple states will actually do something.
  • Resources : Drag/dropping an fbx file into the content browser now also copies the .pkcf and thumbnail files if they are found next to the original .fbx
  • Optimized 1D Simplex noise : noise(float coord) is now 4.3 times faster (CPU sim)
  • Optimized 2D Simplex noise : noise(float2 coord) is now 3.2 times faster (CPU sim)
  • Optimized 4D Simplex noise : noise(float4 coord) is now 2.4 times faster (CPU sim)
  • Fixed missed optimization opportunities when calling or noise() and fast_noise() : always ran at stream frequency, even when it could run at instance/page, frame, or even constant frequency.
  • Scripts : fixed missed constant-folding opportunities when optimizing some arithmetic expressions.
  • Scripts : select() now able to fold more aggressively to a more efficient form when being used like 'select(0, x, condition)' or 'select(0, 1, condition)'
  • Scripts : fixed bug when using the modulo '%' operator between a constant and a stream
  • AssetBaker : Can now bake from editor into an absolute path. Editor previously only supported relative bake paths (although the command-line baker supported both relative and absolute paths).
  • Drag/dropping meshes from the content browser to the treeview (Samplers/Renderers) now auto-name the nodes based on the submeshes names.
  • Editor : fixed content-browser crashes when opening projects that contained filenames that were too long (> 200 characters).
  • Events : fixed event never being triggered with condition (LifeRatio == 1), only happened with the trigger function that allowed to override the position, forward and up vectors, not with the regular 'trigger(condition)'
  • Editor : Should not have to manually install DX9 redist anymore.
  • Atlas builder : Fixed critical crash when loading or saving images.

Changelog 1.9.0 (Dec 21 2015)


  • Runtime
    • Texture sampler Texture sampler : Fixed source sRGB mode conversions not being properly taken into account for density sampling
    • Particle spawners Particle layers : Fixed a potential crash happening when a triggered layer has a layer script that uses attributes but does not use attributes or localspace anywhere else (neither spawner or evolver). The parent layer 'SpawnerID' field was not tagged as needed by layer scripts.
    • Spatial layer Spatial queries on 'int' fields now return '0' when the query is empty.
    • Attractor evolver Attractor evolver : fixed NaNs at Shape surface
    • Sampler Shape sampler sphere Sphere + Shape sampler ellipsoid Ellipsoid + Shape sampler capsule Capsule : fixed NaNs when projecting positions located at the center of the shape
    • Scripts : fixed 'discretize(value, step)' function (old one discretize(0, 0.2) returned -0.2, now returns 0)
    • Damper evolver Damper evolver : using a MinSpeed when damping a 'float1' field incorrectly clamped negative values to positive values.
    • rgba swizzles : fixed issue when swizzle started with a numeric char: wasn't properly recognized. Doing 'color.0gba' would fail, whereas 'color.rgb1' would work.
    • Shape sampler Mesh Sampler Shape Mesh : fixed ray traced normals on scaled meshes (fixes Shape.intersect returned normals and Evolver Collisions)
    • Texture sampler Turbulence sampler : fixed bug causing the first few seconds ingame to have 'wobbling' turbulences

  • Editor
    • Texture sampler Texture sampler : fixed bad refresh of warning when the texture could not be loaded. (fixing the texture path did not remove the warning)
    • Curve sampler Curve editor : switching a curve to 'linear' mode then back to 'hermite' lost the tangents and undoing the action did not restore them. Now undo properly restores the old tangents.
    • UI : Numeric textboxes : fixed occasional cursor bugs when deleting characters
    • Editor viewport : Clicking & dragging mouse out of the viewport does not loose focus anymore
    • Spatial layer Spatial layers : addition and deletion of more than 1 spatial layer was sometimes not notified, and the UI did not refresh properly.
    • Fixed huge memory leaks when closing a particle or mesh editors
    • Fixed some crashes on AMD video-cards.
    • Fixed : Copy/pasting a Particle spawners layer that referenced itself through an event did not work.
    • Fixed : shortcuts in an undocked viewport on a secondary screen did not work.
    • Fixed a crash when renaming a .pkfx in the content browser that's currently opened in a particle editor window.
    • Importing a package inside a non-upgraded project would upgrade the project, import it without upgrading the package, then when actually upgrading the package, the editor would re-upgrade all already upgraded files from the imported package. Now forbits import in a package that needs upgrades.
    • Fixed : when trying to re-open an already opened effect from the content browser, if a .tmp backup file exists, the editor asked for recovery. Now doesn't, and also re-focuses the already opened particle-editor window.
    • Curve sampler Curve editor : now undo/redo doesn't reset zoom & pan anymore
    • Mesh renderer Renderer Mesh : now properly marks fields in ParticleParameterFields as used
    • Particle editor : 'Stop' button didn't stop the effect instances spawned by effect backdrops.
    • Capturing a thumbnail doesn't draw gizmos in the screenshot anymore.
    • Removed the buggy 'ChangeProject' button from the content browser menu. Will come back in the future, but done properly.
    • Copy/pasting multiple nodes in the particle treeview was giving bad names to some of pasted elements
    • Disabled Midi devices due to crashes and unmaintained
    • Spatial layer Spatial layers : toggling the visibility status of a spatial layer that was shared with an external effect loaded through an effect backdrop did not properly show the spatial layer debug
    • Particle editor : Fixed hard crash on undo delete layer

  • Atlas builder
    • Atlas builder : Fixed bad alpha in color-infos panel


  • Runtime
    • Improved Shape collection shape-collection sampling : sped-up permutation code by 180% (2.8X), overall sampling faster by 34% (1.3X)
    • Improved Texture sampler density sampling : speed up (7X - 10X)
    • Improved Random functions : fast-rands are now 70% faster
    • Spatial layer Spatial layers : Dramatically improved the performance of multiple 'closest' queries by using a query cache. 3 or 5 or 10 successive queries to retreive different fields now cost roughly the same thing as a single query, as long as the query coordinates stay the same.
    • asin and acos functions in scripts are now 14x faster.
    • log and log2 functions in scripts are now 10x faster.
    • pow and fast_pow functions in scripts are now 4.5x and 8x faster respectively. (except for integer exponents below 8, where performance stays the same as before)
    • Script compiler is now able to fold more aggressively some expressions (swizzles and vector constructors, like 'float3(a,b,c)')
    • Billboard capsule index generation after sorting : 3.4x faster for 32-bit indices.


  • Runtime
    • New experimental GPU simulator. Note: The editor will still only use CPU simulation, the D3D11 GPU simulation backend is currently available upon request for the UE4 plugin or a custom engine integration.
    • Texture sampler Texture sampler : now handles the RGBA32F format
    • Removed all hardcoded particle fields from all evolvers, now even Position and Velocity fields can be configured in physics, collision, spawner, attractor, flocking, limitdistance, and projection evolvers
    • Physics evolver Physics evolver : Replaced 'VelocityField' by 'VelocityFieldField' (wind field), And added a new 'VelocityField' property, which allows to override the field that should be used as the regular particle Velocity. The editor will upgrade existing effects to rename the old 'VelocityField' in 'VelocityFieldField' to avoid breaking them.
    • Layer scripts : can now use 'LiveCount' property, returns the current number of live particles emitted by the layer
    • Scripts : added new 'smoothstep' and 'smoothlerp' functions.
    • Ribbon renderer Ribbon renderer : added texture repeat.
    • Texture sampler Texture sampler : 'sampleDensity()' on atlases now works properly.
    • Texture sampler Texture sampler : renamed 'sampleDensity' to 'remapDensity', and added new 'sampleDensity' function that generates random UVs with the proper distribution
    • Curve sampler Curve sampler : Simple 1D curves can now be defined as "Density functions", you now have access to the 'Curve.sampleCDF' function in scripts. It can be used to remap a random value with the curve.
    • vrand() can now take two 'innerRadius' and 'outerRadius' parameters : will produce an uniform random distribution in a spherical shell, or in a sphere if given '0' as the inner radius.
    • Spatial layer Spatial layers : 'closest' query can now take an optional 'int' parameter telling which closest neighbor to fetch. Allows to, for example, get the values of the 3rd closest neighbor.
      Multiple such Nth-neighbor queries can be used to create the 'Plexus' effect.
    • Billboard renderer Renderer Billboard + Ribbon renderer Ribbon + Mesh renderer Mesh : added new 'CastShadow' property (NOT IMPLEMENTED in PopcornFX Editor)
    • Mesh renderer Renderer Mesh : added new 'MeshLOD' property (NOT IMPLEMENTED in PopcornFX Editor)
    • Light renderer Renderer Light : added new 'LitTranslucency' property (NOT IMPLEMENTED in PopcornFX Editor)
    • Particle spawners Particle Layers : added new 'PrefferedSimLocation' property that allows to hint the runtime on wether this layer should be run on the CPU or GPU
    • Particle spawners Particle Layers : added new 'PrefferedStorageSize' property that allows to hint the runtime on what base storage size it should use for all instances of that layer.
    • Shape sampler mesh Shape sampler mesh : can now use 'Shape.vertexCount()' in addition to 'Shape.triangleCount()'
    • Attractor evolver Attractor evolver : added new 'RepulseWhenInside' property (always attract to Shape surface even when inside)
    • Texture sampler Texture sampler : added new 'float2 dimensions()' getter that returns the image dimensions.
    • Texture Atlas : allow empty lines and comments (after "#")
    • Ribbon renderer Renderer Ribbon : now automatically adds float particle field TextureIDField ("TextureID" by default) when AtlasDefinition is specified (like the Billboard Renderer)
    • Alpha Remapper : Possibility to remap original particle alpha with an Alpha Map Texture, indexed on 'U' with the particle texture alpha, and on 'V' with the value of a custom 'float' particle field.
    • Script swizzles : can now use axis-system-idependent 'suf' swizzle codes (side, up, forward) in addition to existing 'xyzw' and 'rgba'
    • Texture sampler Turbulence sampler : revamped the whole sampler. Removed 'UseNoiseDerivatives'. They now always use derivatives. better performance, and better precision, no more aliasing artefacts.
    • Scripts: calling custom script functions from a script now triggers a warning : it is VERY inefficient to call such functions.
    • Image loaders : can now load .pkm and .pvr images
    • Image formats : added ETC1, PVRTC1_4bpp_rgb, PVRTC1_4bpp_rgba, PVRTC1_2bpp_rgb, and PVRTC1_2bpp_rgba. PVRTC cannot be converted to other formats (yet)
    • Image converters : added fast ETC1 -> BGRA8 decompressor
    • Physics evolver Physics and Collisions evolver Collisions evolver : 'OneWay' mode now takes into account dynamic scene object's linear and angular velocities during collision response.
    • Physics evolver Physics and Collisions evolver Collisions evolver : rewrote impulse computation code in 'TwoWay' mode, now done the proper way, takes into account rigid body's inertia tensor in addition to its mass. More accurate and stable
    • Physics evolver Physics and Collisions evolver Collisions evolver : new friction model available : Coulomb mode, allows proper sliding motion, now takes surface friction into account.
    • Physics evolver Physics and Collisions evolver Collisions evolver : can now choose particle/scene restitution and friction combine mode.
    • Physics evolver Physics and Collisions evolver Collisions evolver : added new 'StopIfFinalIterationHits' and 'MaxIterations' properties for finer collision control and to avoid particles missing collisions.
    • Spawner scripts : can now access 'spawner.Velocity' (worldspace Velocity of parent spawner)
    • Scripts : Added new axis-system helper : in addition to existing 'float3suf' (v1.8.2), you can now use 'float3sfu' if you're more at ease with z-up coordinate-systems.

  • Editor
    • Mesh importer : Can now import Vertices, Normals, Tangents, and Texcoords in respectively U16, Fp16, Fp16, and U16 type format in .pkmm
    • Mesh importer : Can now display Mesh Normals and Tangents in the viewport
    • Particle editor : Added new particle bbox display mode: per-page bounds.
    • Project settings : can now change the maximum number of debug history-frames the particle editor will be able to capture (was a hard-limit of 512 frames, can now boost it up to any value)
    • Backdrops : New 'Grid' backdrop.
    • Backdrops : New 'Text' backdrop.
    • Backdrops : 'Effect' backdrop can now instantiate the same effect in a regular grid pattern to quickly benchmark a large number of instances running at the same time.
    • Details view now has a new 'Date' column, that shows the last modification date. Can now sort the assets according to that date.
    • Added a new 'MiniDebugBuffer' view: allows to display a small embedded view in the main viewport.
    • Curve sampler Curve editor : added three debug buttons to display curve derivative, curvature, and integral.
    • Mesh importer : now displays imported animation paths
    • Billboard renderer Billboard and Ribbon renderer Ribbon renderers do not use a default texture anymore, diffuse path is empty by default. empty or not found texture paths now map to a pink "replace me" debug placeholder.
    • Added new default effects
    • Profiler : node tooltips now show which effect the node belongs to
    • Particle editor : can now customize the startup text message "Press space to spawn particles" for each effect
    • Billboard renderer Renderer Billboard and Ribbon renderer Renderer Ribbon : SoftnessDistance is now a Distance (not 1.0 / Distance anymore)
    • Mesh importer : added an auto-play animation button (ON by default) : importer starts playing the animation right when opened.
    • Content browser : user FX templates now appear first in the "New Asset" menu
    • Project selection window : right-click > "Open Project Location" on a project that has moved or been removed from disk now tries to open the closest parent directory
    • Removed deprecated F5 shortcut : no more "simulation mode" and "edit mode", no more confusion due to accidentally disabling all editor gizmos when hitting F5. Now hitting F5 does nothing.
    • Mesh importer : can now rebuild normals
    • Copy/Pasting a Spatial layer spatial layer now auto-increments its name to avoid having name conflicts inside scripts
    • Copy/Pasting an attribute sampler now auto-increments its name to ensure it has a different name from any other sampler in the effect, to avoid having name conflicts inside scripts
    • When creating a new Particle spawners layer, the editor now adds the 'Color' field by default
    • Switched default gizmo mode from 'None' to 'Translate'
    • Project selection window : Online packages panel : now displays a "New version available !" message if the package was previously downloaded but a newer version is available online.
    • Project selection window : Create new project : Editor now offers three project templates to choose from : UE4, Unity, and default, it will setup the project settings for the choosen engine with the appropriate axis system, physics settings, resource extensions, etc...
    • Particle evolvers Particle Evolvers : Can now customize the name of all evolvers.
    • Particle renderers Particle Renderers : Can now customize the name of all renderers.
    • Shape samplers Particle Samplers : Can now customize the name of all subshapes in a shape sampler.

  • Atlas builder
    • Atlas builder : Better color-picker, can now choose alpha, and make the final spritesheet have a transparent background.


  • Mesh renderer Renderer Mesh : MeshID is now CLAMPED to [0,MeshDescriptorCount[ (like Billboard renderer Billboard's TextureID), not modulo anymore.


  • Asset baker : FBX importer can now import as triangle strips
  • Asset baker : FBX importer can now import tangents
  • Asset baker : FBX importer can now quantize positions/normals/tangents/UVs/colors to smaller/packed types, such as 16-bit floats.
  • removed all the old 'dependencies.txt' files, you can remove them in your own projects as well, as they'll be completely ignored from now on.