New release of NVIDIA APEX framework is now available for public download.
Update: APEX SDK 1.2.1 is released
This release includes several major features, like PhysX SDK 3 support and new modules – APEX Turbulence and APEX ForceField.
If you are experiencing troubles with registration, please refer to our updated guide.
Although APEX 1.2 is the first APEX release to feature PhysX 3 support (SDK 3.2 specifically), standalone variant, compatible with SDK 2.8.4, is also available for developers who haven’t upgraded their physics integration to a new engine, but still want to take advantage of the new capabilities of APEX 1.2.
Addition of SDK 3.2 support is distinctive feature of this release, which not only allows developers utilizing the PhysX 3 engine to implement APEX in their games, but also brings all the advancements present in 3.x branch of PhysX SDK.
However, currently there is feature parity for core APEX functionality between the 2.8.4 and 3.2 ports, for most part.
Updated APEX SDK 1.2.1, which will add several missing features, like GPU Rigid Bodies support for 3.x branch, will be available shortly.
Pleasant and unexpected feature awaits users of the APEX Destruction module – thanks to PhysX SDK 3.2, overall performance of rigid body simulation on CPU has been improved significantly – up to 200-300% (in comparison to APEX 1.1/1.2 using SDK 2.8.4).
The improvements are combination of various optimizations in SDK 3.2, including but not limited to multi-threading, extensive SIMD usage and algorithmic optimizations.
HallMark - benchmark built into the destruction sample, during which a number of actors (3.. 10 in our case) gets fractured one by one, throughout 1000 frames sequence.
System Specs: i7 2600K, GTX 580, 8 GB RAM, Win 7 64-bit | V-sync disabled.
Next – new Voronoi fracturing mode which allows artist to break objects into nice, convex, physics engine friendly chunks inside PhysXLab or via API interface.
Another important new feature is the ability to apply different fracturing options to individual chunks (or groups of chunks) inside single destructible asset, thus providing ability to create complex assets, consisting of materials with different properties (wood and concrete, for example).
If you want more details on other authoring improvements in APEX 1.2, please refer to our PhysXLab 1.2 overview.
The APEX Clothing module has undergone major change, as it now includes two cloth solvers – old one from PhysX SDK 2.8.4 and new specialized embedded solver for clothing simulation, introduced in PhysX SDK 3.
Note the word “embedded” – the new cloth solver (equal to the one used in PhysX SDK 3.3) is a standalone module and can be utilized by both APEX on SDK 3.2 and APEX on SDK 2.8.4. At the same time, 2.8.4 cloth solver is supported only in 2.8.4 version of APEX 1.2
In comparison to all-purpose cloth solver from SDK 2.8.4, new clothing simulation solution (more details here) includes several improved features in regards to cloth behavior (bending, stiffness, fast moving animations), greatly improved CPU performance and enhanced collision volumes. PhysX 3 solver also incorporates Long Range Attachments method to eliminate unwanted stretchiness of the cloth.
Graphs show simulation time (per frame in ms) for given number of clothing actors. Assets with roughly similar structure and number of particles were used - TrenchCoatMedium.apb and ctdm_trenchcoat_800.apb (~ 800 cloth vertices each).
PhysX 3 cloth solver is also optimized for GPU execution on CUDA-capable GPUs, resulting in a nice performance boost for heavy-load scenes.
Graphs show simulation time (per frame in ms) for given number of clothing actors. High-detalized "Summer Dress" (2400 simulated vertices, high solver iteration count) asset was used for testing.
Updated 2.8 DCC plug-ins already contain corresponding cloth authoring pipeline.
User can run old assets with the 2.8.4 solver or with the new embedded clothing solver (parameters will be automatically adjusted for the new solver). In addition, it is possible to load old assets (2.8.4) into the DCC plug-ins and save them out as APEX 1.2 assets. However, new assets, created with APEX 1.2 (embedded solver), will be not compatible with 2.8.4 APEX releases.
For the first time, the APEX Turbulence module is provided within APEX distribution. In comparison to more common SPH-like simulation systems, Turbulence module is using grid-based eulerian fluid solver to simulate high-resolution smoke, dust and particle effects, affected by turbulent forces.
Turbulence module supports jet force effectors, thermodynamics (heat sources can be added to the simulation and the temperature will be advected through the grid, affecting particle behavior) and interaction with rigid bodies.
Level of Detail (LOD) is implemented with the use of the “simulation updates per frame” variable, while scalable parameter is exposed as the resolution of the simulation grid.
As interesting note, Turbulence does not have its own particle emitters of any kind, instead, it only simulates turbulence grid and velocity fields, while resulting forces are applied to particles from APEX Particles module.
In addition, turbulence simulation can be performed only on CUDA-capable GPUs, there is no CPU backend for this module.
APEX Particles module was also updated, now it includes all previously missing functionality.
(click on the picture to enlarge)
New features like particle .dll widget can help the developers to integrate Particles module in their game or game engine more easily.
New APEX ForceField module allows direct application of highly-customizable forces to objects such as particles, rigid bodies and cloth. ForceField module targets to create variety of force effects like explosions, zero-gravity zones, wind or tornados, but works only with PhysX SDK 3.2.
This new module is more flexible and robust solution than previous force fields mechanism, built into PhysX SDK 2.x.
APEX DESTRUCTION 1.2
- New Features
- FractureTool – new command-line utility for fracturing and exporting meshes. It provides a subset of the fracturing features exposed by PhysXLab, and serves as a convenient way of batch processing meshes and testing new features.
- NxDestructibleActor: Serialization support for actor state provided via the actor’s NxParameterized interface.
- NxDestructibleActor: Deserialization support for actor state provided via NxParameterized constructor argument.
- Added setGlobalPose/getGlobalPose to NxDestructibleActor (sets the pose of static chunks only).
- Added impactDamageDefaultDepth to NxDestructibleParameters. Chunks up to this depth will take impact damage, unless an override flag is set (see below).
- TAKE_IMPACT_DAMAGE flag has been changed to OVERRIDE_IMPACT_DAMAGE or OVERRIDE_IMPACT_DAMAGE_VALUE. At the given depth, the OVERRIDE_IMPACT_DAMAGE flag tells APEX to use OVERRIDE_IMPACT_DAMAGE_VALUE (true or false) instead of the behavior it would get from impactDamageDefaultDepth (see above).
- New dust and crumble callbacks, using NxUserChunkParticleReport.
- Visibility event buffer for NxDestructibleActors using acquireChunkEventBuffer or releaseChunkEventBuffer.
- Option for second bone buffer for frame-delayed chunk transforms, using keepPreviousFrameBoneBuffer.
- LOD performance improvements.
- Better instancing of cutout chunks, allows for UV offset instancing so that texture maps don’t need to tile with the chunk instance tiling. This requires a renderer which uses the new NxRenderInstanceSemantic::UV_OFFSET semantic for the ApexRenderMesh instance buffer.
- Authoring Improvements
- Voronoi fracturing mode using NxDestructibleAssetAuthoring::createVoronoiSitesInsideMesh and ::createVoronoiSplitMesh.
- Voronoi cell visualization utility using NxDestructibleAssetAuthoring::visualizeVoronoiCells.
- Several performance optimizations.
- Ability to fracture a single chunk using NxDestructibleAssetAuthoring::hierarchicallySplitChunk.
- Ability to re-calculate a collision hull for a chunk using different settings, or a custom-made hull, and trim the hulls against neighbors to eliminate initial overlap: NxDestructibleAssetAuthoring ::rebuildCollisionGeometry and NxDestructibleAssetAuthoring ::trimCollisionGeometry.
- Ability to control interior UV mapping direction and offset in slice and cutout mode. See FractureTools::FractureMaterialDesc.
- Utility to deliver a render mesh which displays a typical noisy slice surface for the current settings, using NxDestructibleAssetAuthoring::buildSliceMesh.
- Better fracture behavior (fewer errors such as missing or extra polygons).
- Known Issues
- Known crash in ApexHelloWorld sample destruction scene on PS3 with heavy destruction load.
APEX CLOTHING 1.2
- New Features
- Support for embedded PhysX 3 cloth solver. Even builds with PhysX 2.8.x will be able to run the new solver if the ClothingPhysX3 module is present (will be autoloaded).
- Removed bitangent semantic for rendering. All rendered data now uses float4 for the tangent semantic, tangent.w being the sign of the cross product of normal and tangent.
- Local space simulation. The user can either chose a local space himself or specify a bone in the hierarchy to which the simulation will be done locally (embedded solver only).
- Tapered capsules as collision volumes (embedded solver only).
- Velocity shader can take positions and velocities now. Velocities can be modified by the shader.
- Added several exclusive clothing material parameters for PhysX 3 embedded solver: compression & streching stiffness for stretching, bending and shearing constraints, inertia scale & drag (for localspace sim), mass scale for better collision handling.
- Turned ‘parallelize fetch results’ on by default (in module descriptor) and added functionality to run the additional fetch results work delayed until the first actor gets rendered.
- Known Issues
- Running multiple NxApexScenes simultaneously is only supported with the 3.x solver. The 2.8 solver can generate writelock NxScene access failures.
- The new 3.x cloth solver does not send debug visualization data to PhysX Visual Debugger.
- The “Generate Tangent Space” button in Clothing Tool can generate several warning dialogs for certain older clothing assets.
APEX PARTICLES 1.2
- NxApexRenderVolume – this new class adds the ability to partition particle world space in many practical ways. See the IOFX programmers guide for details.
- 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.
- 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
APEX FRAMEWORK 1.2
- Visual Studio 2010 Support. Both the APEX SDK source and sample projects are distributed solely as Visual Studio 2010 solutions.
- Added an optional completionTask to NxApexScene::simulate that will be called when fetchResults is ready to be called.
- The ‘pxtask_cuda’ DLL, which contains the CUDA Context Manager and associated CUDA PxTask functionality, was renamed ‘PhysX3Gpu’.
- APEX no longer supports using apexuser.dll to override the file stream returned from NxApexSDK::createStream.
- APEX stats are reported in milliseconds instead of seconds. This was a change done very late in the 1.1 product cycle, so when upgrading from an early 1.1 this is still new in 1.2.
- NxApexScene::acquirePhysXLock() is now available so that both APEX and the application may access the PhysX 3.2 scene during simulation without performing concurrent write operations. PhysX 3.2 allows “multiple reader/single writer” access, but this has not yet been implemented within APEX.
- NxApexScene::simulate() has a new parameter called ‘scratchMemBlock’, which may be used by PhysX 3.2 for temporary data during simulation.
- The Wind and Explosion modules are deprecated and may be removed from a future APEX release. They do not support PhysX 3.2.
- PS3 gcc support is deprecated in APEX PS3 source distributions. All PS3 gcc support may be removed from a future APEX release in favor of SNC.
- Added AndroidARM target.
- Better error checking in xml serializer.
- Unified behaviour of initParamRef() and setParamRef().
- Known Issues
- Some key and button mappings in the APEX samples are incomplete on PS3 and Xbox360.
- There may be issues connecting to PVD from consoles with the PhysX 2.8.4 build of APEX.
Thanks to PhysX Team for early SDK access and commentaries.