NVIDIA PhysX SDK 2.8.3 - Release Notes

Started by Stefan, September 30, 2009, 09:56:03 PM

Previous topic - Next topic

0 Members and 1 Guest are viewing this topic.


QuoteRelease Notes - NVIDIA PhysX SDK 2.8.3

30th September 2009

What's New In NVIDIA PhysX 2.8.3


·         This release enables clothing simulation. These new features are required to run the APEX clothing module

·         The release also adds a hierarchical solver for cloth

·         Introduction of split pair notification for cloth (existed for soft bodies only in previous versions)

·         Improved statistics to track GPU memory utilization

·         Updated with 64Bit Windows support

Supported Devices

·         The supported devices are the same as for PhysX 2.8.1 (see below), except that the AGEIA PhysX Processor (PPU) device support was removed


·         The hierarchical cloth solver runs before the regular solver at each time step. This does not immediately improve cloth simulation performance. However, running the hierarchical solver achieves the same stiffness of the cloth with fewer solver iterations of the regular solver. Thus, the performance is increased by explicitly reducing the number solver iterations.

·         Added support to run force field updates on the scene's worker threads. Can be enabled by raising the flag NxSceneFlags::NX_SF_MULTITHREADED_FORCEFIELD and by setting NxSceneDesc::internalThreadCount to the number of worker threads which will compute the force field updates besides the scene thread.

Fixed Bugs

·         NxArray::insert() did not work properly if elements were inserted anywhere else than at the end of the array.

·         Crash when fluid tries to access invalid convexes. Mirrored convexes can get corrupted when a heap allocation fails.

·         GPU fluids: Force and deletion updates are performed on wrong particles in case the updates address particles that have been added since the last execution of NxScene::simulate().

·         GPU fluid mesh collision kernel crashes on GT200 cards due to heavily unbalanced workload.

·         GPU fluids: Releasing static primitive rigid body shapes has no effect on particle collision.

·         Concurrency issues with multi compartment scene configurations.

·         Wrong contact normals in the mesh vs. capsule collision case could occur, if the capsule hit an edge shared by two mesh triangles. Please note that this fix may change the simulation behavior compared to previous versions of the SDK.

·         Contact reports: Under certain circumstances, incorrect contact normals in the capsule vs. mesh case were provided when continuous collision detection was enabled.

Known Issues and Limitations

·         NxScene::cookFluidMeshHotspot(...) is only supported for fluids configured to run on the GPU. Calling the method on a scene with just software (windows) fluids just has a memory impact and no benefit. There is no effect on consoles.

·         The 64 bit PhysX SDK has an extra limitation on Windows Xp64 due to an Xp64 thread local storage bug: The maximal number of scenes/compartments supported can be derived as follows:
#NxScene*4 + #NxCompartment(SW)*2 + #NxCompartment(HW)*1 < (65 - 25)
Note that the compartments can be inspected using NxScene::getCompartmentArray(...), including default compartments.

·         Please also see the previous lists from 2.8.1 and earlier.

API changes

·         Hierarchical cloth

o    NxClothMeshDesc.numHierarchyLevels - used for cooking a mesh hierarchy into the cloth mesh

o    NxClothDesc.hierarchicalSolverIterations - how many iterations of the hierarchical solver to run at each time step

o    NxCloth::getHierarchicalSolverIterations()/

o    NxCloth::setHierarchicalSolverIterations(NxU32 iterations)

·         Clothing

o    The constrain positions and normals are set at each time step via

§ void NxCloth::setConstrainPositions(void* buffer, NxU32 byteStride = sizeof(NxVec3)

§ void NxCloth::setConstrainNormals(void* buffer, NxU32 byteStride = sizeof(NxVec3))

o    The cloth vertices then stay within a certain distance to the constrain positions. The constrain positions are typically given by the animation of the clothing using skeletal skinning.

o    Coefficients like the maximum distance from the constrain positions are set using

§ void NxCloth::setConstrainCoefficients(const NxClothConstrainCoefficients *coefficients, NxU32 byteStride = sizeof(NxClothConstrainCoefficients))

§ class NxClothConstrainCoefficients

o    In a typical scenario, the coefficients are set only once after the cloth is created and remain constant during the simulation. They can also be updated between time steps.

o    The clothing functionality is also available for soft bodies. Use NxSoftBodyConstrainCoefficients instead of NxClothConstrainCoefficients in connection with soft bodies.

o    NxSoftBodyVertexFlags::NX_SOFTBODY_VERTEX_SECONDARY can be set per vertex in NxSoftBodyMeshDesc::vertexFlags before the mesh is cooked. This flag is used to make the softboy behave like cloth. Only the vertices without this flag set are simulated. The secondary vertices follow the primary ones keeping the tetrahedral mesh in shape for skinning of multi layered clothing.

o    Hard stretch limitation. This feature is enabled by setting the flag NX_CLF_HARD_STRETCH_LIMITATION. When the flag ist set, the solver keeps the maximal amount of stretchiness below a factor given by NxClothDesc.hardStretchLimitationFactor. The featurer only works when constrain positions and coefficients are provided. It is useful in connection with clothing simulation to make the cloth inextensible (limitation factor = 1.0). The method to achieve this is non-physical. It works best when the cloth is attached at the top and hangs down such as with skirts or capes.

o    Untangling. When self-collision handling is turned off (for performance reasons), the cloth can locally entangle and remain in this state. When this NX_CLF_UNTANGLING is set, the simulator tries to untangle the cloth locally. This is done non-physically and can introduce ghost forces! The flag can be turned on and off during run-time but it has to be set when the cloth is created in order for the necessary data structures to get initialized. The feature is supported for cloth only

·         Cloth

o    Added selfCollisionThickness parameter. Use selfCollisionThickness for for self collision, thickness for collision with other objects.

o    Added NX_CLF_INTER_COLLISION cloth flag, to enable cloth to collide with other cloth. (not implemented)

·         Soft bodies

o    Added selfCollisionThickness parameter. Use selfCollisionThickness for for self collision, particleRadius for collision with other objects.

o    Added NX_SBF_INTER_COLLISION cloth flag, to enable soft bodies to collide with other soft bodies. (not implemented)

·         Split pair notification

o    class NxClothSplitPairData

o    NxClothDesc.splitPairData

·         Added NxSceneFlags::NX_SF_MULTITHREADED_FORCEFIELD to enable the multi-threaded version of force field for fluids

·         Added NxSceneFlags::NX_SF_ALTERNATIVE_FLUID_TRIANGLE_COLLISION to enable an alternative fluids triangle-mesh collision CUDA kernel which could be significantly faster than the default one in some scenarios