PK-Editor v1.12

From PopcornFX
Jump to: navigation, search

Back to anouncements
Pre-Released ~August 2017, Released September 4th 2017
Will upgrade assets: Projects upgraded to 1.12 cannot be opened with earlier versions

Release highlights

Attribute samplers at evolve Custom script update rates Regular sampling patterns Decal parent-fields
Attribute samplers at evolve Custom script update rates Regular sampling patterns Decal parent-fields


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

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

Plugin status

  • Unity plugin status : Available for v1.12.1 (Plugin version v2.9p7)
  • UE4 plugin status : Available for v1.12.1 (Plugin version v1.6.0)

Known issues

Known issues in the latest 1.12.2 build (Oct 13 2017):

  • Changing the image in a texture sampler doesn't refresh the in-editor texture preview.
  • 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. (Fixed in v1.13.0)

Please contact support at if you encounter any other problem

Latest fixes

Patch 1.12.2

Build: PopcornFX-Editor_Setup_v1.12.2.39774_x64.exe (Oct 13 2017) (Latest Preview) NewIcon.png

  • Fixed an infinite loop when loading corrupt effects or configuration files (caused editor to hang when opening project settings in some projects)
  • Events : Fixed subtle regression in v1.12.0 where all layers triggered from events were delayed til the next frame. Used with patterns like "event.trigger(condition); kill(condition)", would cause a 1-frame span where neither the parent nor the child particle(s) would be displayed. Based on the effect, could cause some visual popping artifacts.
  • Saving effect files : doesn't corrupt ondisk file anymore when write fails (or if editor crashes while saving).
  • Scripts : Internal particle fields (such as SpawnerID) were incorrecly exposed to scripts, and could be written to (causing havok in the runtime internals during simulation)
  • Scripts : Compiler optimizer incorrectly removed redundant stores across Event.trigger() calls.
  • Scripts : builtin 'kill' generated unnecessary operations in some cases.
  • Scripts : Random-number-generator : fixed a rare crash.
  • Layer scripts : could not use any 'rand' functions in layer-scripts anymore.
  • Changing the texture of an image sampler did not properly update the texture preview in the "specialized node editor" panel
  • Save-as on an effect file did not update the 'recent files' list of the project

Patch 1.12.1

Build: PopcornFX-Editor_Setup_v1.12.1.39129_x64.exe (Sep 22 2017) (Latest) NewIcon.png

  • Compiler optimizer : Now detects and folds compare ops of the form ((a cmp1 b) cmp0 c) and (c cmp0 (a cmp1 b)) where 'c' is a constant, and 'cmp0' is a strict equality or inequality op.
  • Scripts : 'select' and 'iif' builtins are now safer : works properly for any 'int' input as the condition, not only 'true' or 'false'. giving it any nonzero integer as the condition will work as if 'true' was passed in. 'select(a, b, c)' now internally expands to 'select(a, b, c != 0)'.
  • Billboard renderer Billboard renderer : Now emits a warning when using soft animation blending without a texture atlas specified.
  • Fixed minor memory-leak when loading font resources.
  • Fixed crash in TIFF loader that would make editor crash when viewing some tiff images in the content browser. Now also supports more formats.
  • Fixed attribute samplers node displaying garbage in the propertygrid
  • Added a folder browser when specifying baking paths in the project settings: no need to enter the relative paths by hand anymore.

Changelog 1.12.0

Build: PopcornFX-Editor_Setup_v1.12.0.38926_x64.exe (Sep 15 2017)


  • Runtime
    • Texture sampler Texture sampler : fixed memory corruption when CPU sampling failed (out of memory scenarios, or bad data)
    • Shape sampler cone Shape sampler cone : fixed sampleNormal() in surface mode without pCoords : did not take rotations into account.
    • Shape sampler cylinder Shape sampler cylinder : fixed old bug producing slightly incorrect point distribution when surface-sampling a cylinder with a nonzero inner radius.
    • Script frontend : fixed bug in 'select' function : select(scalar, scalar, vector) was not handled properly and produced a compilation error.
    • Scripts : fixed bug in CPU backend when running the 'pow' function on 2D, 3D, or 4D vectors when the exponent was constant and had different values for its different xyzw components: would always use the 'x' component to compute the pow.
    • PVR Loader : more solid, fixed a few bugs due to some incorrect format assumptions, and now recovering when loading incomplete files (for some reason some encoders seem to write the total possible mip count in the header, even if they only write a single one in the file).
    • Billboard and Ribbon renderers would crash if given a 'NaN' value in the TextureID field. (ex: 0.0/0.0, 0.0*infinity, etc...)
  • Editor
    • Content browser : Fixed 'Export to package' feature that did not include all cache files when exporting mesh dependencies (was skipping animation and editor material files)
    • Content browser : Fixed a freeze when trying to 'Export to package' a folder containing a pkmm
    • Fixed a crash when importing a model with an effect open using a backdrop mesh of this model
    • Fixed a crash when undoing a new layer


  • Runtime
    • Scripts : Script optimizer now folds calls to 'sin' and 'cos' with an identical parameter into a single 'sincos' instruction.
    • Scripts : Dramatically improved performance of the internal 'sincos' instruction, was unusually slow before.
    • Scripts : 'pow' functions are now faster, and can be optimized by the optimizer if multiple 'pow' are called with different values but the same exponent.


  • Runtime
    • Attribute samplers can now be sampled at evolve. Implemented for Shape sampler Shape, Curve sampler Curve, DoubleCurve sampler DoubleCurve, Texture sampler Texture, and Text sampler Text samplers.
      Warning : can cause performance hits if many different instances of the effect are alive at the same time and localized pages are NOT enabled for the layers sampling attribute samplers at evolve.
    • Shape sampler Shapes : moved all 'buildParametricCoords*' functions to a new 'shape' namespace. Replaced 'MyShapeSampler.buildParametricCoords*()' by 'shape.buildParametricCoords*()'. [UPGRADER v1.11 > v1.12] will patch effects
    • Scripts : Renamed all '*ParametricCoords*()' functions to a shorter '*PCoords*()' form. [UPGRADER v1.11 > v1.12] will patch effects
    • Spatial insertion evolver Spatial insertion evolver : can now specify a custom float3 particle-field to be used as the insertion position. Defaults to "Position"
    • Shape sampler Shape sampler : removed unused property 'Sampler = Random|Regular', was ignored by the runtime, and always using 'Random' mode.
    • Shape sampler Shape sampler : new 'intersectPCoords' function, that returns an int4 result containing the pCoords at the intersection in '', and the intersection distance in 'asfloat(result.w)', returns an infinite distance if no hit.
    • Shape sampler Shape sampler : new 'sampleSurfacePCoordsFromUV' function, that takes an UV coordinate and returns the pCoords of the mesh for that UV. assumes the mesh is cleanly unwrapped and has no overlapping triangles.
    • Decal layers Decal layers : are now taking into account the Size and Color fields.
    • Sound layers Sound layers : added new 'VolumeField' property where you can specify the parent particle field to be used as an audio-volume scaler.
    • Shape sampler Shape sampling : added new functions 'SamplePCoordsSphereRegular', 'SamplePCoordsBoxRegular', 'SamplePCoordsCylinderRegular', and 'SamplePCoordsConeRegular' that generate pseudorandom regular-looking sampling patterns.
    • Curve sampler Curve sampler : can now specify a 'Quality' hint if sampling the exact curve is less important than high performance. Switches sampling algorithms and allows to fine-tune curve samplers to get the best performance out of them, roughly 3 to more than 10 times faster than using exact sampling, depending on the curve dimension and number of control-points.
    • Spatial layers Spatial layers : added a new 'closest2' function, that allows to specify an inner query radius, and returns the closest neighbor between the inner and outer radius.
    • Text sampler Text sampler : added support for font kerning by specifying the .ttf or .otf font file to use, and added 'charOffset(int lineID, int firstCharId, int lastCharID)' function, that returns the display distance between 'firstCharId' and 'lastCharId', taking into account proper character spacing and kerning.
    • Scripts : moved all 'fast_' functions to a 'fast' namespace. Ex: 'fast_sin(x)' is now 'fast.sin(x)'
    • Scripts : removed 'sincos()' functions : you should now use 'sin()' and 'cos()' instead. Script compiler will optimize internally into a single sincos instruction if appropriate.
    • Scripts : added 'accurate' namespace for explicit high-precision versions of math functions. Ex: 'accurate.sin(x)'
    • Script evolver Script evolver : Can now specify a custom update rate for every script evolver: half-rate (runs once every 2 frames), quarter-rate (runs once every 4 frames), or eighth-rate (runs once every 8 frames).
    • Physics evolver Physics evolver : now warns when using things that have no effect (such as a turbulence used with zero drag or zero mass).
    • Scripts : added 'randsign()' function, that returns a random sign, either -1.0 or +1.0. Can take an optional parameter to skew the random distribution, like the 'randsel()' function.
  • Editor
    • Added new 'Scene Settings' node in particle treeview, and moved all scene-specific properties from the 'Editor Properties' root node to 'Scene Settings'
    • Added a timeline and timeline-specific controls, which can be activated through the 'ShowTimeline' property in the 'Scene Settings' node
    • Added 'Capture Settings' button in the viewport toolbar that allows to playback an effect, capture the rendered frames and dump them to a folder on-disk. (Was previously available in private builds, now available in the public editor build)
    • Simcache : Improved UI, can now control field interpolation independently.
    • Can now save & load custom layouts for editor windows.
    • New project window : added iClone preset
  • Assets
    • AssetBaker : Particle oven has a new 'RemoveSource' property, enabled by default, that removes all script sources (to be used in combination with serialization of the script/IR caches)
    • AssetBaker : Mesh oven Renamed 'Kd-Tree' section to 'Intersect/Project'
    • AssetBaker : Mesh oven Added sampling and UV2PCoords accel build config : can now explicitly save them in baked mesh files and avoid rebuilding at runtime