PK-Editor v1.8

From PopcornFX
Jump to navigation Jump to search

Back to anouncements
Pre-Released February 3rd 2015, Released March 26th 2015 (GDC 2015 edition)

Will upgrade projects: Projects upgraded to 1.8 cannot be opened with earlier versions

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

Release highlights

Spatial layers Layer scripts Effect backdrops Weighted mesh sampling
Spatial layers Layer scripts Effect backdrops Weighted mesh sampling


32-bits Windows build
PopcornFX-Editor_Setup_v1.8.5.27771.exe (Latest preview)
PopcornFX-Editor_Setup_v1.8.4.27161.exe (Latest)
PopcornFX-Editor_Setup_v1.8.0.24525.exe (GDC 2015 edition)

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

Video highlights

Release highlights

(4 min 15 sec)

Extented release highlights

(25 min 21 sec, audio commentary)

Known issues

Known issues in the latest 1.8.5 build (27771, Dec 09 2015):

  • Crashes when only the LayerScript of a triggered Layer uses an Attribute after the effect-instance has been terminated. Workaround: use an Attribute in the SpawnScript.
  • Image samplers : calling 'sampleDensity(subUV, UV, ...)' on image samplers with UV atlases does not work,
    and never worked since the introduction of UV atlases for image samplers. Will not be fixed until v1.9.0
  • OnSpawn event does not transfer parent-fields.
  • 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.8.5 (Dec 09 2015)

Build: PopcornFX-Editor_Setup_v1.8.5.27771.exe (Latest preview)

  • Editor : Fixed crash when a Midi device was detected
  • Shape sampler mesh Shape sampler mesh : fixed raytraced normals (fixes Shape.intersect return value and Collision evolver)
  • Texture sampler Sampler texture : fixed sampleDensity crash when using an Attribute Sampler Texture
  • Editor : now performance warnings are now displayed by default.
  • Editor : now tries to detect if System D3D driver is using debug runtime libs (which can wildly affect performance), and displays a warning in the viewport HUD
  • AssetBaker : now invokes user command-lines differently, prevents popping the windows command-window, which in some cases messed with keyboard and could reset mouse position

Patch 1.8.4 (Nov 08 2015)

Build: PopcornFX-Editor_Setup_v1.8.4.27161.exe (Latest)

  • Particle spawners Triggered layers : in some circumstances the triggered Layer was Terminated when the parent Layer ended
  • Particle spawners Triggered layers : in some circumstances the runtime crashed when a triggered Layer ended at the same time as its parent layer.
  • AssetBaker : some Editor-only objects were not correctly stripped ("CEntity*")
  • Project selection : fixed a regression when opening a project more recent than the current editor version : the warning window was not displayed anymore
  • Upgraded FBX SDK from 2015.1 to 2016.2 : Fixes some import problems with FBX files exported from maya 2016 / max 2016
  • Mesh import progress window : fixed a bug that caused this dialog to sometimes stay indefinitely onscreen, after import was finished.
  • Improved mesh import dialog : now displays useful information & progress.
  • Improved mesh import when drag/dropping FBX on the content browser : can now batch-import many meshes at the same time, without the editor popping a messagebox for each one of them.
  • Project selection window : now takes care of upgrading project when double-clicking or clicking on OK. if upgrade is cancelled, doesn't quit the editor, but stays on the project selection window.
  • Content browser : new 'Import' menu : Can now right-click on multiple assets or folders, and select 'Import'. if some of those assets are FBX meshes, it will re-import all of them in one go.
  • Content browser : export to package : Can now export whole folders to a package without having to select individual files.
  • Fixed crashes when calling the Shape sampler shape sampler's 'buildParametricCoords*' functions with fully constant arguments.
  • Editor now deletes cached FBX bake files if import fails. In previous builds, they were left on disk even when a new import failed, which could lead to unclear situations where an FBX was not re-imported properly but was still displayed in the mesh importer viewport.
  • Particle Editor treeview : selecting a shape sampler now displays the shape in the viewport, you don't have to unroll the sampler and select the individual child shapes anymore
  • Fixed editor shape selection: Could not select shape collections as a whole.
  • Fixed editor shape selection: Selected subshapes inside shape collections did not take into account the parent shape collection transforms, and were displayed at the world origin.
  • Import package : When importing a package that has a different coordinate-system than the current project, the editor will pop a messagebox warning about it.
  • Fixed: Freeze when calling the shape sampler's 'position()' function on a local layer shape.
  • Fixed: Turbulences TimeScale=0 jittering

Patch 1.8.3 (Oct 02 2015)

Build: PopcornFX-Editor_Setup_v1.8.3.26585.exe (Latest)

  • Fixed several bugs and crashes with delayed LayerGroups Layers and Folders
  • Fixed mass Particle events Event trigger spawning everything with the same parameters (same Position, parent fields, Velocity ...)
  • Fixed an occasional crash in the content browser treeview
  • Perf HUD : Global timings are now displayed below the evolve kernel profile bars even if no layer or kernel is selected.
  • Fixed a bug in skeletal meshes with skeleton containing bones with negative scales
  • Fixed an occasional crash when frantically opening/closing the mesh and particle editors.
  • Fixed a serious bug: Selecting and deleting items from the ContentBrowser treeview also deleted the parent folder !
  • deleting an item with the 'delete' key in the content-browser now sends it to the recycle bin. Use 'shift+delete' to delete forever.
  • Shape sampler mesh Shape sampler mesh : Fixed 'MeshSamplingMode' property that only took effect after re-opening the pkfx.
  • Asset Baker : /!\ Might BREAK pkcf: CommandLine*_Windows : now properly executed, surrounding the whole command with " (double quotes) is now useless and DEPRECATED
  • Asset Baker : Fixed CommandLine token $(TargetDir)
  • Asset Baker : Added CommandLine token $(SelfDir), $(BakeTarget)
  • Asset Baker : Added COvenBakeConfig "AlwaysMkdirTarget": mkdir target even if OverrideDefaultBakeWithCmdline
  • Asset Baker : Added ouput log file "AssetBaker.log" which also contains ALL command lines outputs
  • Asset Baker : pk_texconv_baker.bat is not used anymore, replaced by AlwaysMkdirTarget=true and a proper CommandLine_Windows

Patch 1.8.2 (Jul 30 2015)

Build: PopcornFX-Editor_Setup_v1.8.2.25908.exe

  • Effect backdrops did not work properly if the effect containing the backdrop had no attributes
  • Shape sampler Shapes now implement the projectParametricCoords() function (previously only MESH shapes supported that)
  • Projection evolver Projection evolver now properly fills the optional PCoords field for all shape types, not just MESH shapes.
  • Non-Burst Layer/Spawner Scripts: fixed spawner.SpawnCount: now takes Flux into account (use spawner.BaseSpawnCount for old behavior)
  • Shape sampler capsule Shape sampler capsule : fixed a bug that prevented PCoords to be built for the point at the very bottom of the capsule.
  • Shape sampler capsule Shape sampler capsule : Improved precision of the parametric coords for height and radius.
  • Fixed a few issues in the Billboard renderer Billboard and Ribbon renderer Ribbon renderers regarding lightling & normals/tangents.
  • Billboard renderer Billboard renderer : now displays an error message when an axial or planar-aligned billboard cannot find one of the needed axes in the existing particle fields
  • Particle bounds with float3 'Size' field now works
  • No more rebuilds when unloading an effect file (faster and avoids inappropriate error reports when closing an effect)
  • Scripts: added axis system utilities functions "int scene.isRight()" and "float scene.isRightSign()" and "float3suf(..~float3..)"
  • Rotation evolver Rotation evolver : useless rotation evolvers are now detected and warned about in the effect report
  • Projection evolver Projection evolver : now report errors if the Shape is invalid
  • Parent Fields: fields used as parent fields in Spawner or Event should now be correctly marked as used
  • Spatial insertion evolver Spatial Insertion Evolver : now reports missing or invalid particle fields for insertion.
  • Spatial insertion evolver Spatial Insertion Evolver : Correctly marks used fields
  • Fixed a bug that prevented effects from being properly upgraded when importing a package made with an older version of the editor into an existing project.
  • Fixed incorrect 'DrawOrder' for Ribbon renderer Ribbons and Mesh renderer Meshes.
  • Fixed editor not writing the 'popcorn.htm' logfile in the UserData folder anymore
  • Script editor : added a new 'Compile' button and right-click menu item
  • DDS loader : Can now load BC4 (decompresses it to BGRA8 for internal use)
  • DDS loader : Can now load B8G8R8X8
  • Fixed a bug that did not properly transfer attributes to child layer spawn-scripts if the layer did not use attributes in evolve and the parent did not have a SpawnerID.
  • Vertical view look now clamped to +-90 degrees up and down. Camera can't be flipped backwards anymore.
  • Content browser : Fixed a critical bug when renaming a folder : when renaming with the same name but a different case (ex: "Test" -> "TEST"), the editor deleted the whole folder.
  • Content browser : Fixed resource filters that were not properly saved from one launch of the editor to another.
  • Fixed rare crash when using OnSpawn event in some cases
  • Fixed editor localspace errors when pausing sim & moving the 'Spawner' folder around in viewport.
  • Fixed editor templates listing : now refreshed live when you add a new template, no need to restart the editor.
  • Asset browser search box now waits til you finished typing to do the search.
  • Fixed FBX import issues with some animations
  • Flipbook evolver Flipbook Evolver : 'LoopCount' property is now taken into account.
  • Details view : Fixed broken sorting of items.
  • Fixed some bugs and crashes in content-browser selection.
  • AssetBaker : now removes the read-only flag when baking performs a straight copy of a source file which is read-only.
  • Fixed incorrect index handedness flip when loading some meshes baked in another coordinate system
  • Editor packages download progressbar : now displays downloaded Kb / total Kb

Patch 1.8.1 (May 01 2015)

Build: PopcornFX-Editor_Setup_v1.8.1.25035.exe (Latest)

  • Physics evolver Physics : fixed crash when supplied with a 'VelocityFieldSampler' that's not a turbulence sampler, and has a drag > 0
  • Shape sampler : fixed a crash when sampling shape collections with 'FixedLocations' activated, OR not using 'FixedLocations' but calling 'sampleVelocity()'
  • Layer Sound: fixed potential cut out at the beginning of the sound
  • Layer Sound: TimeWindow_Duration is now handled by PopcornFX (fixes PK-Editor and other Engine integration)
  • Particle spawners Layer Particles : ContinuousSpawners that InheritInitialVelocity now interpolates velocities between Previous and Current Frame Velocities (if provided by the Engine via SSpawnTransformsPack::m_WorldVel_Current and m_WorldVel_Previous)
  • Particle spawners Layer Particles : fixed a v1.8.0 regression that makes Duration=0 layers not spawn all particles.
  • Layer Layer scripts : added access to the samplers of the layer. (Attribute samplers were accessible already)
  • Scripts: abs(), sign(), min() and max() builtins now work for integer types, and do not promote their result to float.
  • Billboard renderer Billboard renderer : Billboard Planar Quad billboarder now builds Normals and Tangents for lighting.
  • Spawner Scripts: parent fields now have READ ONLY access.
  • Fixed particle selection in-editor that triggered some release-asserts, when billboards had a rotation.
  • Billboard renderer Billboard renderer : Billboarder ViewposAlignQuad : fixed flickering and rotation bug. Now orients billboards using the Up axis, independently of the current axis system.
  • SpawnerScripts: fixed spawner.EmittedCount for non-burst particle layers
  • Fixed potential crashes with Spatial layer Spatial layers when resetting the scene
  • Fixed broken Undo/Redo in Curve sampler curve editor since v1.8.0
  • Fixed a regression in scripts: calls to Particle events Event trigger() functions with a constant parameter (ex: 'MyEvent.trigger(true)')
  • Fixed random crashes when editing curves
  • Fixed a bug that caused the autosave file to not be deleted when the effect was saved from a Script editor window
  • Content browser : Fixed a bug that prevented creating a resource when there was no folder selected in the treeview
  • Made autosave-on-bake optional, can be activated in the editor's user settings panel.
  • Fixed crash when specifying a non-float3 field to axial billboarders (editor only, sample rendering code in SDK worked fine)

Changelog 1.8.0


  • mesh renderer Mesh renderer : right-click > explode submeshes to descriptors : fixed bug that did not copy the original descriptor's properties to each child descriptor.
  • Particle spawners Spawners/layers : fixed a crash and various other bugs when changing the type of a flux-driving attribute while bound to the flux factor expression of a layer.
  • Script editor : fixed a bug that caused the first Ctrl+S to not save the file, just apply the script changes. It required two Ctrl+S to actually save the whole file from within the script editor.
  • Content browser : fixed a bug that caused an empty asset search to display the results of the last valid search.
  • Fixed a bug that did not copy the thumbnails of template effects when creating a new effect from a template.
  • Attribute list : fixed slider refresh problems when converting from float attrib to int attrib.
  • Attribute list : Fixed a crash when moving a attribute sampler in the attribute list
  • Fixed script error messages with parent fields
  • Animated backdrops : now animations correctly follow the history cursor when capturing history frames.
  • Mesh importer : Fixed a bug that prevented to correctly bake meshes when hitting Ctrl-B.
  • Fixed 1-frame lag of view-dependent attributes.
  • Alt+left mouse orbit when paused does not try picking particles anymore.
  • Fixed a bug that made it impossible to overwrite another effect after a save-as, even after confirming you did want to overwrite it.
  • Particle events Event triggering & kill() : Particles will now be able to trigger events in normal death conditions during the death sub-evolve.
  • fixed a serious non deterministic crash when sampling shape collections depending on job scheduling on worker threads.
  • Billboard renderer Billboard renderer : float2 sizes previously only worked for screen-quad and planar-quad, hard-crashed for everything else. Fixed crash and implemented for all billboarders.
  • fixed a bug in .TGA image loader, that caused incorrect loading of some targa files saved with run-length encoding.
  • Attributes in evolve & localspace : fixed a bug that prevented some triggered child layers to properly use these when one action in the event trigger chain did not use at least one of them.


  • Scripts : optimized 'lerp', 'clamp', and 'within' functions. from 2.5X up to 9.3X faster, average speedup around 6X, on all platforms.
  • Scripts : optimized all integer operations on all platforms except WiiU. from 1.7X up to 10.0X faster, average speedup around 5X, on all platforms.
  • Scripts : optimized 'dot' function for float2 and float4 (was already ~OK for float3) : roughly between 2.5X and 5X faster, on all platforms.
  • Scripts : calls to streamed functions with constant parameters are now correctly evaluated only at the necessary frequency. For instance, calling "Shape.volume()" or "Curve.integrate(0, 1)" on a local sampler (NOT an attribute sampler) will compile down to a single constant value, and the call will never be made at runtime.
  • Turbulence sampler : improved runtime memory footprint of each turbulence object : each object contained 2052 useless bytes
  • PS3 : implemented Billboard renderer planar-aligned billboarders on SPUs
  • Content browser : Improved display performance on larger projects
  • Image conversions : converting DXT images to a different gamma space (sRGB <--> Linear) now 80 times faster than in v1.7. Performs DXT color-block transcoding without decompressing and recompressing.
  • Texture sampler Texture sampler : vastly improved sampling performance. Point sampling for R32F between 4.3x and 6.5x faster. BGRA8 ~1.5x faster. Linear sampling for BGRA8 between 1.5x and 2x faster.
  • Texture sampler Texture sampler : reduced runtime memory footprint. more than 4 times less runtime memory used compared to v1.7 and below.
  • Spawners (Particle spawners layers + Spawner evolver evolver spawners) : slightly improved spawn performance.
  • Restored multithreaded actions / spawners. Massive performance improvements on spawn-heavy effects.
  • Improved performance of continuous spawners that have to interpolate orientations : overall spawn time is now 30% faster.
  • Scripts : optimized rand() with at least one streamed arg : massive performance boost. float1: 16x faster, float2: 30x faster, float3: 28x faster, float4: 29x faster.
  • Scripts : optimized rand() with constant vector min/max that don't have the same value across xyz : float1: same speed as before, float2: 1.7x (70%) faster, float3 and float4: 2x faster.


  • New feature : Spatial layer Spatial layers. Particles can now access data from other layers through spatial queries, and react accordingly.
  • New feature : Layer Layer scripts. You can now control the emission rate and some other properties of the layer through a script run each frame.
  • mesh renderer Mesh renderer : added new predefined material : "Distortion"
  • ribbon renderer Ribbon renderers : new Billboarding mode AxisSide, now allows to fully control the ribbon geometry on all 3 axes.
  • Particle spawners Spawners/layers : flux curve can now be treated as 'discrete bursts' keyframes, using the new 'FluxFunction_DiscreteSpawnKeys' checkbox.
  • HBO text serializer : can now detect and skip unix SheBang if present at the beginning of the file.
  • HBO serializers (text & binary) : now stores full version information in the file header.
  • Scripts : added new math function: clamp(value, min, max)
  • Scripts : added new builtins: remap(value, newMin, newMax) (assumes value's range is [0,1]), and remap(value, oldMin, oldMax, newMin, newMax)
  • Scripts : can now use single-byte character constants (ex: ' ', '#', '0', ...), translates to the ascii code of the character. Useful with the Text sampler Text sampler.
  • The 'IsInteractiveMode' toggle button in the editor toolbar has been replaced by a dropdown 'OptimizationLevel' containing 3 values: 'Debug', 'Edition', and 'Shipping' That allows to preview the scripts and effect at various optimization levels. Shipping mode applies additional optimizations that might make the effect editing-unfriendly, but makes it run as it'll be in the final runtime.
  • Attribute list : right-click -> add attribute : add the attribute below the one where the click was made
  • Physics evolver Physics & Collision evolver Collision evolvers : Can now specify a 'CollisionCount' particle-field that the physics or collision evolvers will increment each time the particle collides with the world. Useful to detect inside a script that the particle collided this frame.
  • Image loaders : can now load 16bpp BGRA4 dds format
  • Texture sampler Texture sampler : now all sRGB conversions to and from linear space use the real sRGB curve, not the pow(2.2) approximation.
  • Texture sampler Texture sampler : can now natively sample BGRA4 and DXT1 surfaces without requiring runtime conversion to a BGRA8 surface. lower memory footprint, faster loads, and for BGRA4, faster sampling as well.
  • Texture sampler Texture sampler : new 'SampleRawValues' checkbox. when active, will avoid runtime conversion overhead as much as possible.
  • Curve sampler Curve sampler : new function 'integrate(t0, t1)' : computes the curve integral between cursors 't0' and 't1'
  • Mesh sampler Mesh sampler : can now weight sampling probability with vertex colors
  • Curve sampler Curve editor : Ctrl+E now only frames the active curves
  • Mesh importer : tangent basis recomputation now works with triangle-strip meshes.
  • Mesh importer : Ctrl+E frames the bbox of the mesh
  • scripts : can now access spawner properties from spawn-scripts, such as 'spawner.SpawnCount', 'spawner.EmittedCount', 'spawner.Life', etc...
  • Particle spawners layers : no more need to uncheck the 'ContinuousSpawner' property when using localspace evolvers !
  • Physics evolver Physics evolver : new 'SceneWindInfluence' property to control how much the global scene velocity field influences the particles (drag has to be != 0)
  • Physics evolver Physics evolver : new 'EventIsSticky' property to control if the triggered event should attach to the ingame node or not.
  • Audio sampler Audio sampler : removed deprecated 'SpectrumSize' property
  • Project settings : new 'scene' panel, contains axis-system configuration, as well as new audio and physics-related stuff.
  • Project settings : can now configure different collision filters and collision surface types to match what you have access to inside your game-engine
  • Project settings : added audio-related parameters to make the spectrum sampling closely match what gets sampled inside your game-engine
  • Project settings : can now configure default scene surface restitution and friction
  • Backdrop Model3D : can specify a custom restitution, friction, and surface type
  • Backdrop Model3D : added a 'SubMeshID' property that allows to specify which sub-mesh should be bound to the attribute samplers referencing the backdrop
  • scene.intersect() : can now specify an explicit collision filter to be used by the game-engine. List of available collision filters is to be configured per-project inside the project
  • new scene.intersectExt() function : returns a packed result, containing the surface normal, hit distance, and surface-type matching the surface-types setup in the project settings.
  • Particle events Events : new overload of the 'trigger' script function, where you can now specify explicit position, forward and up axes of the child spawn matrix.
  • Particle events Events : Game-engine can now be notified when a particle triggers an event, and perform custom actions
  • Particle events Events : new function : EventName.broadcast() : works like EventName.trigger(), except it forces broadcasting to the game-engine.


  • Spawner evolver Evolver spawner : Renamed 'UseVelocityOrientedSpawnMatrix' to 'UseOrientedSpawnMatrix'. (editor will upgrade the effects)
  • scripts : renamed 'SpawnerLifeRatio' to 'spawner.LifeRatio', 'SpawnerRunningTime' to 'spawner.Age', and 'CurrentDate' to 'scene.Time'. Upgrader takes care of patching existing particle-scripts.


  • Baking assets from the editor or from the command-line baker now correctly strips editor-specific nodes, and produces the same final baked asset.
  • Effect files are now saved when baked. Prevented command-lines launching external tools that processed the .pkfx from working correctly