APEX Particles Release Notes

APEX Particles 1.4

New Features

  • Refactored render interface for Particles and TurbulenceFS

APEX Particles 1.3.3

New Features

Removed

Improvements

Fixes

  • Fixed issue where PhysX monitor could keep dynamic rigid bodies awake.

Known Issues

  • CUDA/D3D9 interop is unsupported.
  • Added experimental velocity sources to turbulence simulation, but there are known issues. It’s not recommended to use this feature.

APEX Particles 1.3.2

New Features

  • Weighted field sampler collision filtering was added (see migration guide).
  • Added RateVsEmitterDuration curve to APEX emitters.
  • Added minSamplingFPS parameter to APEX emitter assets to reduce discontinuities of fast moving emitters.
  • Added a pose matrix semantic to NxUserRenderInstanceBufferDesc.
  • Added topSphericalForce and bottomSphericalForce to VortexFS.
  • Added scaling of APEX emitters and field samplers. See setCurrentScale/getCurrentScale methods for attractor, vortex, windFS, emitter, effect package, heat source, substance source, and turbulence actors.
  • Added collision filtering for heat sources and substance sources. See fieldSamplerFilterDataName parameter.
  • Added OrientScaleAlongScreenVelocity IOFX modifier.

Removed

  • Removed ‘collisionFilterDataName’ from Turbulence, ParticleIOS, and BasicIOS, since it is redundant under PhysX 3.x. Now just use ‘fieldSamplerFilterDataName’
  • Removed ‘fieldBoundaryFilterDataName’ from various field sampler assets since it is now considered deprecated.
  • Removed obsolete semanticFormats[] from NxUserRenderInstanceBufferDesc.
  • Removed support for GPU acceleration on pre-Fermi GPUs.

Improvements

  • HeatSourceActor/SubstanceSourceActor NxParameterized parameter for initial position was renamed to ‘initialPose’ and its type was changed to MAT34.
  • HeatSourceActor/SubstanceSourceActor NxParameterized parameter for initial scale was renamed to ‘initialScale’.

Fixes

  • Under PhysX 3.x all collision filtering related to both particles and field samplers now uses the standard PxFilterData and SimulationFilterShader callback.
  • Resolved several issues where it was possible to exhaust GPU constant memory under certain heavy loads. APEX will now continue to work under these conditions, although performance may be slightly affected.
  • Fixed crash that could occur when using turbulence debug visualization.
  • Fixed particle time stats when using CPU particles.
  • Fixed uninitialized render volume in EffectPackages. Could lead to particles not getting rendered.
  • Fixed possible turbulence crash when using the updatePerFramesRange feature.
  • When using opaque mesh rendering, userRenderData is now correctly passed to the application through the NxUserRenderResourceDesc.
  • Fixed bad reference counting of opaque meshes.
  • Fixed rare race condition that could cause some particles not to be rendered.
  • Fixed synchronization issues with PhysX when using ParticleIOS.
  • Fixed error in particle benefit calculation that could inject NANs into code.
  • Fixed bad LOD calculation with updatePerFramesRange feature.
  • Fixed race condition in turbulence.
  • Fixed improper render mesh release when using IOFX mesh particle rendering.
  • Fixed issues with the turbulence dissipation time feature.

Known Issues

  • CUDA/D3D9 interop is unsupported.
  • Added experimental velocity sources to turbulence simulation, but there are known issues. It’s not recommended to use this feature.

APEX Particles 1.3.1

New Features

  • New WindFS field sampler for wind effects.
  • Add ‘fieldDragCoeff’ & ‘fieldWeight’ parameters to all assets in BasicFS
  • Turbulence dissipation time, allows to remove turbulence vortices in a predetermined time. But see known issues.
  • Added ability to sample a TurbulenceFS’s velocity field directly to a surface buffer.
  • The NxUserRenderSurfaceBuffer::writeBuffer parameters have changed to support writing to offsets in any of three dimensions.
  • Object scale for emitter actors. (need details)
  • More efficient use of CUDA constant memory in IOFX

Removed

  • Removed useless fuctions (addFilterData, removeFilterData, getFilterData) from NxForceFieldActor. PxFilterData can be specified in NxForceFieldActorDesc.

Fixes

  • Fixed crash when a turbulence asset had maxCollidingObjects set to 0.
  • Fixed BasicIOS and TurbulenceFS not honoring all collision filtering with PhysX 3.x. Note: now that the collision filtering is correctly handled, the behavior could change if you were using non-default collision filtering.
  • Fixed an issue with VortexFS not working due to an uninitialized variable.
  • Fixed a bad interaction between a rotating capsule and a turbulence grid.
  • Optimized multigrid/diffusion in Turbulence
  • More robust handling of CUDA out of memory for TurbulenceFS actor.
  • Fix a ParticleIOS crash when an emitter is deleted.
  • Various EditorWidgets fixes.
  • Fix for incorrect EffectPackage duration calculation.
  • Fixed incorrect capsule orientation when colliding with BasicIOS and TurbulenceFS.
  • APEX now correctly takes into account total elapsed time, which fixes time-dependent behavior of emitters.
  • Fix for NULL pointer access in EffectPackageActor.
  • Re-enabling a disabled effect in an EffectPackageActor using setEffectEnabled=true now workes.
  • Fixed issues with turbulence debug visualization.

Known Issues

  • CUDA/D3D9 interop is unsupported.
  • When using the new turbulence dissipation time feature, some other field samplers may appear to start late. Also cleaning time may not work. These issues will be fixed in a future release of APEX.

APEX Particles 1.3

New Features

  • Particle and field sampler modules including IOFX, Emitter, BasicIOS, ParticleIOS, and BasicFS have been merged into one “Particles” module. TurbulenceFS is still a separate module.
  • APEX now supports Effect Packages, a collection of particle-related assets that can be instantiated together in an applications. APEX provides the Particle Effect Tool for authoring.
  • APEX now requires Sprite and Instance Buffers implementations to specify their layout (NxRenderSpriteLayoutElement and NxRenderInstanceLayoutElement) by using semantic/format specification defined in corresponding enumerations.
  • Added 2 counters to APEX IOFX Stats - SimulatedSpriteParticlesCount, SimulatedMeshParticlesCount
  • Added Noise and Vortex Field Samplers in the BasicFS module (now in Particles module).
  • APEX Emitter Actor now provides an optional user emitter position validation callback (NxApexEmitterActor::setApexEmitterValidateCallback) used to allow the application to prevent particles from being emitted in invalid locations (for instance, on the other side of a wall).
  • APEX Sphere and Sphere Shell Emitter now supports ‘hemisphere’ property (allows using only specified sphere cap as emitter).
  • APEX requires minimal GPU Compute Capability 1.1 now (G92 or better GPU).
  • Changed ‘min’ ‘max’ hints for APEX Particle IOS Asset to ‘uimin’ and ‘uimax’ so they are treated as hints only for the user-interface code; but will not ‘invalidate’ assets.

Removed

  • Removed fluidVelocityMultiplier and fluidVelocityClamp parameters from TurbulenceFS asset.
  • Removed redundant parameter ‘position’ from APEX Heat Source

Fixes

  • APEX Turbulence moving grid behaviour is fixed.
  • CUDA/D3D11 interop is now working. Note that CUDA/D3D9 interop still has known issues and is not supported or recommended.

Known Issues

  • CUDA/D3D9 interop is unsupported.
  • Mixing interop and non-interop IOFX rendering at the same time is unsupported.

APEX Particles 1.2.4

Fixes

  • Fixed a race condition issue due to improper scene locking with PhysX 3.2.x in turbulence.
  • Fixed GPU memory leak with turbulence/convex collision.
  • Fixed an LOD issue with ParticleIOS that could cause a crash.

Known Issues

  • (PhysX 3.2.4 only) You may see the nuisance error stream warning “Adding particles before the first simulation step is not supported” when using ParticleIOS. This warning may be ignored.

APEX Particles 1.2.3

New Features

  • IOFX sprite rendering was reworked to allow writing sprite rendering data more efficiently. See the new NxUserRenderResourceManager::getSpriteTextureData() and NxUserRenderSpriteBuffer::writeTexture() callbacks and the new NxUserRenderSpriteTextureDesc.
  • Added NxApexEmitterActor::getSimParticlesCount() to get the number of simulated particles. Works with BasicIOS and ParticleIOS.
  • Added NxApexEmitterActor::getRateRange().
  • Added ColorByVelocity IOFX modifier.
  • Added includeVerticalDirection rotation modifier to control whether vertical speed affects rotation.
  • Added getPose() and setPose() methods for NxHeatSourceActor.

APEX Particles 1.2.2

New Features

  • Added Turbulence Heat Source assets and actors instead of them being only part of the Turbulence module C++ API
  • Added setEnabled API to JetFS and AttractorFS to enable/disable a field sampler actor at runtime
  • BasicIOS: Added NxParameterized collisionWithConvexMesh and collisionWithTriangleMesh to BasicOS to enable/disable different shape collision
  • Added fluidViscosity to TurbulenceFS.

Fixes

  • Added 64bit collision filtering between the ParticleIOS (PhysX 3.x particles) and APEX Field Samplers (in the fieldSamplerFilterData member of ParticleIosAssetParam)
  • Changed grid resolution type to an enum. Before it was a float, so it was possible to set invalid values that would cause errors.

Improvements

  • Particle rendering is now done with a single render buffer for non-interop and a double render buffer for D3D-CUDA interop. Previously it was always double buffered and possibly triple buffered for interop. Note that the placement of the NxApexScene::prepareRenderResourceContexts() changes from just before calling the UpdateRenderResources methods to outside of the simulation (after FetchResults).
  • EditorWidgets: Flipped “Life Remaining” axes to show “Life Time” instead, based on user feedback.

APEX Particles 1.2.1

New Features

  • Added noise feature to turbulence grid simulation.
  • Added drag coefficient parameter to turbulence grids.
  • Attractor field sampler works inside of turbulence grids.
  • New FieldVelocityWeight parameter, which controls how strongly the field velocity affects particles.
  • Support convex mesh collision with turbulence grids.
  • Support convex mesh collision with basic IOS.
  • Clearer emitter debug visualization hints.
  • New semantics for particle rendering: COLOR_FLOAT4 and generic 32-bit USER_DATA.
  • All turbulence grid parameters now exposed through NxParameterized interface.
  • Temperature visualization now shows different colors for temperatures.

Fixes

  • Fixed collision issues with turbulence grids which used to cause unrealistic rigid body interaction.
  • Turbulence actor LOD is now properly disabled when the module’s LOD is disabled.
  • Fixed crash issue in turbulence simulation.

APEX Particles 1.2

Removed

  • Particles are only supported on Windows.
  • maxObjectCount is no longer an IOFX property
  • Most NxFluidIOSActor methods have been removed, this class is not exposed at runtime.
  • NxModuleIofx::createRenderableIterator() removed. IOFX Actors are now only reachable via NxApexRenderVolumes.
  • NxModuleIofx::getIofxTypeName() removed. Use NX_IOFX_AUTHORING_TYPE_NAME from NxIofxAsset.h

New Features

  • NxApexRenderVolume - this new class adds the ability to partition particle world space in many practical ways. See the IOFX programmers guide for details.

Improvements

  • Render resource optimizations. Only one writeBuffer() call is made per fluid simulation (IOS actor) per frame, no matter how many IOFX assets or volumes in use.
  • Deferred IOFX actor creation keeps render resource churn and renderable counts to reasonable levels.
  • IOFX CUDA and CPU performance should be roughly linear to the number of particles in simulation. The number of IOFX assets should have a limited effect.
  • More robust CUDA interop with writeBuffer() fallbacks for frames where mapped buffers are not available.
  • Interop can be restricted to double buffering if certain guarantees are met by the game rendering thread.
  • Improved level of detail particle culling.