Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.
General
- Added:
- PxScene::setLimits: Hint to preallocate capacities of various data structures. See PxSceneLimits.
- Scalar constructors PxQuat(r), PxMat33(r), PxMat33(r).
- identity constructors for PxMat33, PxMat44, PxQuat, PxTransform - e.g. PxTransform(PxIdentity).
- zero constructors for PxMat33, PxMat44, PxVec3 - e.g. PxMat33(PxZero).
- PxTransform(x, y, z) constructor was added as a shortcut for PxTransform(PxVec3(x,y,z)).
- The GPU code uses CUDA version 5.0 and supports Kepler GPUs (SM version 3.0 and 3.5).
- Helper method PxContactPair::bufferContacts() has been added to copy the contact pair data stream into a user buffer.
- PxGeometryQuery::computePenetration() has been added, to compute the Minimum Translational Distance between geometry objects.
- Ability for APEX and other PhysX extensions to change the PhysX Visual Indicator.
- Reporting allocation names can now be enabled or disabled (see PxFoundation::setReportAllocationNames). When enabled, some platforms allocate memory through 'malloc'.
- The scene origin can now be shifted to better support big world scenarios. See PxScene::shiftOrigin() for details.
- PxAssertHandler got extended with a boolean parameter to support ignoring specific asserts. See windows implementation of DefaultAssertHandler.
- Added new PxPairFlags - PxPairFlag::eSOLVE_CONTACT and PxPairFlag::eDETECT_DISCRETE_CONTACT.
- Removed:
- The obsolete PxConvexFlag::eUSE_UNCOMPRESSED_NORMALS flag has been removed.
- The PxSceneFlag::eDISABLE_SSE was obsolete, and has now been removed.
- The obsolte PxPtrArray has been removed
- Changed:
- Mesh BVH construction was significantly improved for meshes with a mix of large and small triangles. Mesh sizes are now slightly increased, but traversals are substantially faster. As a side effect, cooked mesh format has changed. This requires meshes to be recooked!
- The specification for valid PxBounds3 representations has changed. See the API documentation for details (especially the newly introduced PxBounds3::isValid() method).
- PxBounds3::transform(), ::scale() and ::fatten() have been split into a fast and a safe version to avoid unnecessary checks and improve stability for empty bounds respectively.
- PxBounds3::setInfinite() has been renamed to PxBounds3::setMaximal() to better fit the actual behavior.
- PxTask: PVD profile events for tasks are now only emitted in profile builds (all platforms).
- Platform mutex implementations now verify that lock/unlock come from correct thread in debug builds.
- PxWindowsDelayLoadHook.h has been moved from Include/foundation/windows to Include/common/windows.
- API instances of 'Num' as in 'maxNum' and 'getNum' have changed uniformly to 'Nb'.
- The following classes have been renamed:
- PxSceneQueryHit to PxQueryHit
- PxSceneQueryFlags to PxHitFlags
- PxSceneQueryHitType to PxQueryHitType
- PxSceneQueryFilterData to PxQueryFilterData
- PxSceneQueryFilterCallback to PxQueryFilterCallback
- PxSceneQueryFilterFlags to PxQueryFlags
- PxSceneQueryCache to PxQueryCache
- PxCCTNonWalkableMode to PxControllerNonWalkableMode
- PxControllerFlags to PxControllerCollisionFlags
- PxCCTHit to PxControllerHit
- PxConstraintDominance to PxDominanceGroupPair
- PxActorTypeSelectionFlags to PxActorTypeFlags
- PxFindOverlapTriangleMeshUtil to PxMeshOverlapUtil
The previous names have been retained for compatibility but are deprecated.
- PX_SLEEP_INTERVAL has been replaced with the new parameter PxSceneDesc::wakeCounterResetValue to specify the wake counter value to set when wakeUp() gets called on dynamic objects.
- PxClientBehaviorBit has been renamed PxClientBehaviorFlag, PxActorClientBehaviorBit has been renamed PxActorClientBehaviorFlag. Names of related functions have also changed.
- queryClient parameter in raycast(), sweep(), overlap() functions was moved inside of PxQueryFilterData struct.
- The PxObserver/PxObservable system has been replaced by the PxDeletionListener API. The supported object types have been extended from PxActor to all core objects inheriting from PxBase. Furthermore, two kinds of deletion events are now distinguished: user release and memory release. Please read the API documentation for details.
- Deprecated PxPairFlag::eRESOLVE_CONTACT. Use PxPairFlag::eDETECT_DISCRETE_CONTACT and PxPairFlag::eSOLVE_CONTACT instead.
- Number of materials per shape is now PxU16 instead of PxU32, contact material information also now returns PxU16.
- Maximum number of touching hits in batched queries is now PxU16 instead of PxU32.
- SweepEpsilonDistance has been replaced by meshContactMargin and marked as deprecated. Please read the API documentation for details.
- PxShape::resetFiltering() and PxParticleBase::resetFiltering() have been deprecated. Please use one of the new overloaded methods PxScene::resetFiltering() instead.
- The pxtask namespace has been removed and it's types have been added to the physx namespace with a Px* prefix
- The delay load hook PxDelayLoadHook::setPhysXInstance has been renamed to PxSetPhysXDelayLoadHook and PxDelayLoadHook::setPhysXCookingInstance has been renamed to PxSetPhysXCookingDelayLoadHook
- Fixed:
- Calling Thread::setAffinityMask() before the thread has been started is now supported.
- PxDefaultSimulationFilterShader ignored the value of the second filter constant in the collision filtering equation and used the value of the first filter constant instead.
- Deprecated:
- The PxScene::flush() method has been deprecated, please use PxScene::flushSimulation().
- PxRigidDynamicFlag has been deprecated and replaced with PxRigidBodyFlag to allow flags to be shared between PxArticulationLink and PxRigidDynamic.
- PxTransform::createIdentity(), PxQuat::createIdentity(), PxMat33::createIdentity(), PxMat44::createIdentity(), PxMat33::createZero(), PxMat44::createZero()
Character controller
- Added:
- The PxControllerBehaviorFlag::eCCT_USER_DEFINED_RIDE flag has been added.
- A new helper function PxController::resize() has been added to facilitate character controller resizing.
- A new runtime tessellation feature has been added that can help reducing FPU accuracy issues in the sweep tests.
- PxControllerFilterCallback has been added to make CCT-vs-CCT filtering more flexible.
- An overlap recovery module has been added. See PxControllerManager::setOverlapRecoveryModule
- PxObstacle notifications has been added to handle touched obstacles.
- PxObstacleContext::getObstacleByHandle has been added.
- The origin of character controllers and obstacles can now be shifted to stay in sync when the origin of the underlying PxScene is shifted. See PxControllerManager::shiftOrigin() for details.
- Changed:
- The PxControllerManager is now tightly coupled to a PxScene which has to be provided on creation. See PxCreateControllerManager().
- The PxObstacleContext instances of a PxControllerManager will now get released automatically when the manager is released.
- PxController::reportSceneChanged() has been renamed to PxController::invalidateCache().
- PxControllerBehaviorFlag::eCCT_CAN_RIDE_ON_OBJECT is not the default behavior anymore.
- PxCCTNonWalkableMode::eFORCE_SLIDING has been renamed to PxCCTNonWalkableMode::ePREVENT_CLIMBING_AND_FORCE_SLIDING.
- PxCCTInteractionMode has been renamed PxControllerInteractionMode
- PxCCTNonWalkableMode has been renamed PxControllerNonWalkableMode
- PxCCTHit has been renamed PxControllerHit
- Touched PxObstacle has been replaced by touched ObstacleHandle.
- PxControllerInteractionMode and PxControllerFilters::mActiveGroups have been removed. Please use the new PxControllerFilterCallback instead.
- Fixed:
- Bugs with respect to deleting shapes from a touching actor have been fixed.
- Touched actor's scene is checked in CCT::move before rideOnTouchedObject is called to ensure that the touched shape is valid.
- Touched shape's scene query flag is checked in CCT::move before rideOnTouchedObject is called to ensure that the touched shape is valid.
- Touched shape's user CCT filtering is triggered in CCT::move before rideOnTouchedObject is called to ensure that the touched shape is valid.
- The PxControllerBehaviorCallback was not called when a PxUserControllerHitReport was not defined.
- It is not possible anymore to create a CCT whose contact offset is zero. The doc has always said a non-zero value was expected, but corresponding check was missing.
- Box & capsule controllers' resize function now properly take the up direction into account
CCD
- Added:
- Introduced PxRigidBodyFlag::eENABLE_CCD_FRICTION to control whether friction is applied inside CCD on a given body. This is disabled by default. In general, disabling friction in CCD improves the behavior of high-speed collisions.
- Introduced PxSceneDesc::ccdMaxPasses field, which controls the maximum number of CCD passes. Each CCD pass will advance each object to its next TOI. By default, we use 1 pass. Increasing the number of passes can reduced the likelihood of time being dropped inside the CCD system at the cost of extra CCD procesing overhead.
- Introduced per-body value to control how far past the initial time of impact the CCD advances the simulation. Advancing further can improve fluidity at the increased risk of tunneling.
- CCD now has limited support contact modification. It supports disabling response to contacts by setting max impulse to 0. It does not yet support target velocity, non-zero max impulse values or scaling mass or inertia.
- Introduced new PxPairFlag eDETECT_CCD_CONTACT. This flags is used to control whether CCD performs sweep tests for a give pair. Decision over whether any collisions are responded to is made by the presence of the flag eSOLVE_CONTACT.
- Removed:
- CCD is now enabled per-body instead of per-shape. As a result, PxShapeFlag::eUSE_SWEPT_BOUNDS has been removed and replaced with PxRigidBodyFlag::eENABLE_CCD.
- Changed:
- API attributes previously named SWEPT_INTEGRATION have now been renamed 'ccd': specifically PxSceneFlag::eENABLE_SWEPT_INTEGRATION, PxSceneFlag::eSWEPT_INTEGRATION_LINEAR, PxSceneDesc::sweptIntegrationLinearSpeedFactor, PxSceneDesc::sweptIntegrationAngularSpeedFactor, PxPairFlag::eENABLE_SWEPT_INTEGRATION
- PxPairFlag::eCCD_LINEAR has been deprecated. Use (PxPairFlag::eDETECT_CCD_CONTACT | PxPairFlag::eSOLVE_CONTACT) instead.
- Fixed:
- Updated CCD algorithm which improves the fluidity of motion of the CCD system while reducing the processing overhead significantly.
- Contact notification is now reliable in CCD. CCD contacts are appended to the end of the contact list for a given pair so that both discrete and continuous contacts are reported
- CCD contact notification now reports applied forces. These contacts will be correctly filtered by force thresholds.
Serialization
- Added:
- Added extension PxSerialization::isSerializable method to query whether a collection is serializable.
- Added extension PxSerialization::complete which allows to prepare a collection for serialization.
- Added extension PxSerialization::createNames which adds reference names to serializables.
- Added extension PxCollectionExt::remove which removes all serializables of a certain type and optionally adds them to another collection.
- Added extension function PxCollectionExt::releaseObjects to remove and release objects from a collection
- Added class PxSerializationRegistry for handling custom serializable types.
- Added PxSerialization::serializeCollectionToXml and PxSerialization::createCollectionFromXml
- Included pre-built binary meta data with SDK at [path to installed PhysX SDK]/Tools/BinaryMetaData
- Added class PxSerializer to provide serialization specific functionality to serializable classes.
- Added classes PxSerializationContext and PxDeserializationContext to provide functionality for serialization and deserialization operations.
- Removed:
- Removed PxUserReferences class and PxPhysics::createUserReferences.
- Removed RepX.h and unified serialization interfaces for xml and binary serialization.
- Changed:
- PxCollection was reworked to improve reference management rendering PxUserReferences obsolete. PxCollection was also decoupled more from Serialization/Deserialization functionality. Serialization of incomplete collections fails now early at serialization as opposed to late at deserialization.
- Replaced PxPhysics::createCollection with PxCreateCollection.
-
- Replaced RepXCollection with PxCollection, and unified corresponding interfaces.
- Replaced PxCollection::serialize with PxSerialization::serializeCollectionToBinary.
- Replaced PxCollection::deserialize with PxSerialization::createCollectionFromBinary.
- Replaced PxSerializable::collectForExport(PxCollection& c) with PxSerializer::requires. The new method works in a non-recursive way.
- Replaced PxDumpMetaData with PxSerialization::dumpMetaData.
- Replaced PxCollectForExportSDK with PxCollectionExt::createCollection(PxPhysics& sdk).
- Replaced PxCollectForExportScene with PxCollectionExt::createCollection(PxScene& scene).
- Moved PxCooking::createBinaryConverter to PxSerialization
- Changed PxShape release semantics for shapes. As a consequence deserialized shapes are never autmatically released, but need to be released by the application. Exception: PxPhysics::release.
Cloth
- Added:
- Improved GPU cloth performance significantly with new parallel solver.
- Added tether constraints, which allow minimum amount of cloth stretching even for large gravity scales. See PxClothFabric.
- Added support for dynamic addition and deletion of collision primitives. See PxCloth::addCollision* and PxCloth::removeCollision*.
- Added triangle mesh collider support. See PxCloth::setCollisionTriangles.
- Added support for self collision and inter-cloth collision. See PxCloth::setSelfCollision*() and PxScene::setClothInterCollision*().
- Added direct access to CUDA particle data for graphics interoperability, see PxCloth::lockParticleData()
- Added PxRegisterCloth to reduce binary size by stripping unused code on platforms where static linking is used.
- Added methods setWakeCounter/getWakeCounter() (see the corresponding API documentation for details).
- It is illegal to call wakeUp/putToSleep/isSleeping() on a PxCloth that has not been added to a scene.
- Changed:
- Cloth solver does not use fibers any more. See PxClothFabric for changes in fabric API.
- Moved PxCooking.cookClothFabric() to extensions. See PxClothFabricCooker and PxClothFabricCreate.
- PxClothMeshDesc has been moved to extensions and now supports both triangle and quad representations. See PxClothMeshDesc.
- The scaling of damping and stiffness coefficients has been separated from the solver frequency and can now be set indepedently using PxCloth::setStiffnessFrequency().
- PxCloth::setInertiaScale() has been split into linear, angular, and centrifugal components. See PxCloth::set*IntertiaScale.
- Drag coefficient has been split into linear and angular coefficient. See PxCloth::setLinearDragCoefficient and PxCloth::setAngularDragCoefficient.
- Renamed PxCloth::lockClothReadData() to lockParticleData(). Added support for update operations on the returned particle arrays (as an alternative to setParticles()).
- PxCloth::wakeUp() does not have a parameter anymore. Use setWakeCounter() instead to set a specific value.
- PxCloth::getNbCollisionSpherePairs() has been renamed to PxCloth::getNbCollisionCapsules()
- Fixed:
- Fixed a crash bug in the clothing collision code appearing on iOS.
Rigid Bodies
- Added:
- The contact distance parameter for a limit is automatically estimated if not supplied in the constructor for the limit structure.
- The new callback PxConstraintConnector::onOriginShift() has been introduced. It gets called for all constraints of a scene, when its origin is shifted.
- New helper function PxRigidBodyExt::computeVelocityDeltaFromImpulse has been added.
- Shapes may be declared as shared on creation, and then attached to multiple actors, see the user manual for restrictions.
- Since a shape is no longer necessarily associated with a unique actor, references to shapes in callbacks from the engine are accompanied by the
a reference to the associated actor
- Joints and contact modification now support tuning relative mass and inertia for the bodies on a per-contact basis. Inertia and mass can be tuned independently.
- Removed:
- PxShape::overlap(), PxShape::sweep() and PxShape::raycast() have been removed. Equivalent functionality is provided in PxGeometryQuery.
- Changed:
- It is illegal to call resetFiltering() on a PxShape or PxParticleBase if they have not been added to a scene.
- It is illegal to call addForce/addTorque/clearForce/clearTorque() on a PxRigidBody that has not been added to a scene.
- The sleep behavior of dynamic rigid bodies has changed significantly (for details on the current behavior see the API documentation of isSleeping(), wakeUp(), putToSleep(), setKinematicTarget(), PxRigidBodyFlag::eKINEMATIC, ...). Among the changes are:
- The methods setWakeCounter/getWakeCounter() have been added for PxRigidDynamic and PxArticulation objects (see the corresponding API documentation for details).
- The wakeUp() method of PxRigidDynamic and PxArticulation has lost the wake counter parameter. Use setWakeCounter() instead to set a specific value.
- It is illegal to call wakeUp/putToSleep/isSleeping() on a PxRigidDynamic or PxArticulation that has not been added to a scene.
- Putting a dynamic rigid actor to sleep will clear any pending force updates.
- Switching a dynamic actor to kinematic will put the actor to sleep immediately.
- Switching a kinematic actor back to dynamic will not affect the sleep state (previously the actor was woken up).
- Calling wakeUp/putToSleep() on a kinematically controlled dynamic actor is not valid any longer. The sleep state of a kinematic actor is solely defined based on whether a target pose has been set (see API documentation of isSleeping() for details).
- A call to PxRigidBody::setCMassLocalPose() does not wake up the actor anymore. Note: this also affects related methods in PhysXExtensions like PxRigidBodyExt::updateMassAndInertia() etc.
- If a non-zero velocity or force is set through PxRigidBody::setLinearVelocity(), ::setAngularVelocity(), ::addForce() or ::addTorque(), the actor will get woken up automatically even if the autowake parameter is false.
- PxRigidBody::clearForce() and ::clearTorque() do not have the autowake parameter, to optionally wake the actor up, anymore. These methods will not change the sleep state any longer. Call ::wakeUp() subsequently to get the old default behavior.
- Adding or removing a PxConstraint/PxJoint to/from the scene does not wake the connected actors up automatically anymore.
- It is now possible to avoid automatic wake up of previously touching objects on scene removal. See the additional parameter wakeOnLostTouch in PxScene::removeActor(), ::removeArticulation(), ::removeAggregte(), PxRigidActor::detachShape().
- PxJointLimit and PxJointLimitPair are now PxJointLinearLimit, PxJointLinearLimitPair, PxJointAngularLimitPair, depending on whether the limit is linear or angular.
- Joints now solve for the entire position error rather than a ratio of 0.7 of it. The flag PxConstraintFlag::eDEPRECATED_32_COMPATIBILITY can be used to restore this behavior
- PxConstraintFlag::Type has been renamed to PxConstraintFlag::Enum
-
- The spring constant parameter in joints and articulations that was previously 'spring' is now 'stiffness'.
- The tangential spring constant parameter in articulations that was previously 'tangentialSpring' is now 'tangentialStiffness'.
- Constraints do not respect PxDominanceGroup settings. Use PxJoint::setInvMassScale and setInvInertiaScale
- Shapes are reference counted. PxShape::release() now decrements the reference count on a shape, and its use is deprecated for detaching a shape from its actor - use detachShape() instead.
- Shape creation methods do not take a local transform parameter anymore. Instead PxShapeFlags can be specified. Triangle meshes, height fields and plane geometry shapes cannot be combined with non-kinematic PxRigidDynmic actors if PxShapeFlag::eSIMULATION_SHAPE is specified. Corresponding calls to PxRigidActor::createShape() or PxRigidActor::attachShape() are not supported.
- PxShape::getActor() now returns a pointer, which is NULL if the shape is shareable.
- PxShape::getWorldBounds() has been replaced with PxShapeExt::getWorldBounds().
- PxContactPoint has been renamed PxFeatureContact.
- The internal format for contact storage has been modified; applications directly accessing the internal contact representation rather than PxContactPair::extractContacts should be modified accordingly.
- Friction mode flags eENABLE_ONE_DIRECTIONAL_FRICTION and eENABLE_TWO_DIRECTIONAL_FRICTION have been replaced by PxFrictionType::Enum PxSceneDesc::frictionType.
- PxSceneDesc::contactCorrelationDistance has been deprecated.
- PxSceneDesc::contactCorrelationDistance no longer has an influence on how many friction anchors are created in a single frame, only on when they are removed in later frames. This may cause a very minor change in friction behavior.
- Fixed:
- Rigid bodies now properly accumulate the forces/torques that are applied with addForce/addTorque while scene insertion is still pending. This affects bodies added to the scene while the scene is simulating and then given forces/torques with addForce/addTorque while the scene is simulating. These accumulated forces and torques are applied during the next simulate() call. Prior to this fix the forces/torques that accumulated while scene insertion was pending were lost and never applied.
- Its now possible to serialize collections with jointed actors without including the corresponding joints in the collection. The deserialized actors will not be jointed anymore.
- Joint drive force limits are actual force limits rather than impulse limits. Set the flag PxConstraintFlag::eDRIVE_LIMITS_ARE_FORCES to false to support legacy behavior
- Angular drive constraints for revolute joints were wrongly computed, resulting in a negative angular velocity when a positive drive target was set.
- Scene addActors will now correctly remove all actors that were passed to add, if some insert failed.
- Contact modification now enforces max impulse field correctly. Previously, it only enforced it if max impulse was set to 0.
- Contact modification now supports target velocity in all directions. Previously, it only enforced the target velocity components that were perpendicular to the contact normal.
- Jittering of small spheres & capsules on very large triangles has been fixed.
- Setting sleep threshold to 0 now guarantees that bodies won't fall asleep even if their kinetic energy reaches exactly 0.
- Deprecated:
- PxShape::release() now decrements the reference count on a shape, and its use is deprecated for detaching a shape from its actor - use detachShape() instead.
- PxJoint::getType() is deprecated - use getConcreteType() instead.
- PxConstraintFlag::eREPORTING is deprecated - constraints always generate force reports
- PxConstraintDominance is deprecated - use PxDominanceGroupPair instead.
Scene queries
- Added:
- PxVolumeCache, a volumetric cache for local collision geometry.
- Parameter inflation was added to some PxGeometryQuery functions.
- Flag eMESH_BOTH_SIDES can be now used to control triangle mesh culling for raycasts and sweeps.
- Added PxBatchQueryMemory as a part of PxBatchQueryDesc, to allow memory buffers to be set before execution.
- PxBatchQueryDesc() constructor now requires 3 parameters at initialization - see migration guide for more details.
- PxBatchQuery::raycast, sweep, overlap calls will now issue a warning and discard the query when over maximum allowed queries.
- There is a new flag to allow manually updating the scene query representation, see: PxSceneFlags::eENABLE_MANUAL_SQ_UPDATE and PxScene::flushQueryChanges().
- Added PxScene::forceDynamicTreeRebuild() function to immediately rebuild the scene query structures.
- Added bool PxSweepHit::hadInitialOverlap() returning true if a sweep hit occurred early due to initial overlap at distance=0.
- Removed:
- PxBatchQuery::linearCompoundGeometrySweepSingle and PxBatchQuery::linearCompoundGeometrySweepMultiple functions are no longer supported.
- Globals PxPS3ConfigParam::eSPU_OVERLAP, eSPU_RAYCAST, eSPU_SWEEP that were previous set via setSceneParamInt call are replaced with PxBatchQueryDesc::runOnSpu. See migration guide for more details.
- Changed:
- Scene Query raycastAny/Single/Multiple APIs were merged into a single raycast() call (same for overlaps and sweeps). Please refer to user and migration guides for details.
- Scene Query raycast() API now uses a PxRaycastBuffer or a PxRaycastCallback parameter for reporting hits. Blocking hits are now reported separately from toching and PxRaycastCallback class supports reporting an unbounded number of results (same for overlaps and sweeps).
- A const templated PxRaycastBufferN object was added to allow convenient creation of fixed size scene query touch buffers. Same for overlaps and sweeps.
- Support for compound sweeps was moved out from core SDK to extensions.
- Support for compound sweeps was moved from PxScene to extensions (see PxRigidBodyExt::linearSweepSingle, PxRigidBodyExt::linearSweepMultiple).
- PxQueryFilterCallback::preFilter now passes an actor pointer as well as a shape pointer.
- PxSceneQueryFlag::eINITIAL_OVERLAP and PxSceneQueryFlag::eINITIAL_OVERLAP_KEEP have been replaced with PxHitFlag::eINITIAL_OVERLAP_DISABLE and PxLocationHit::hadInitialOverlap(). Note that checking for initial overlap is now the defaut for sweeps.
- Sweeps in 3.3 execute using a new faster code path, in some cases with reduced precision. If you encounter precision issues not previously experienced in earlier versions of PhysX, use ePRECISE_SWEEP flag to enable the backwards compatible more accurate sweep code.
- The default behavior for overlap queries with query filters returning eBLOCK has changed to only return one of eBLOCK hits. Please refer to the migration guide for details.
- Fixed:
- Scene Query performance was significantly improved in a variety of scenarios.
- Fixed a bug in capsule/mesh overlap code that occasionally caused unreported and misreported faces.
- Fixed a crash in raycastMultiple when a convex was hit by the ray and eMESH_MULTIPLE flag was specified as a query flag.
- Fixed a rare crash in heightfield raycast code.
- Internal limit of 65536 results has been removed.
- Accuracy in sphere/capsule-vs-triangle overlap and sweep tests has been improved.
Cooking
- Added:
- Added support for convex hull creation with limited output vertices count.
- Added support for convex hull creation directly from polygons rather than triangles.
- Added support function computeHullPolygons in cooking, that creates hull polygons from given vertices and triangles. The resulting polygons can be used to create the convex hull directly.
- Changed:
- Changed convex hull volume integrals.
- PxCookingParams constructor requires now PxTolerancesScale as an additional parameter. This enables us to perform further checks on the triangles during cooking. A warning will be emitted to the error stream if too huge triangles were found. This will ensure better simulation stability.
- Fixed:
- Optimized heightfield load code for no-endian conversion case.
Triangle meshes
- Added:
- Added PxTriangleMeshFlag::eHAS_ADJACENCY_INFO flag for adjacency information checks.
- Removed:
- Removed has16BitTriangleIndices(), replaced by triangleMesh->getTriangleMeshFlags() & PxTriangleMeshFlag::eHAS_16BIT_TRIANGLE_INDICES.
Particles
- Added:
- Direct read access to CUDA particle data has been added for graphics interoperability, see PxParticleBase::lockParticleReadData(PxDataAccessFlags flags) and PxParticleFluid::lockParticleFluidReadData(PxDataAccessFlags flags)
- Added PxRegisterParticles to reduce binary size by stipping unused code on platforms where static linking is used.
- Added setExplicitCudaFlushCountHint to allow early flushing of the cuda push buffer.
- Added caching of triangle meshes. setTriangleMeshCacheSizeHint is supported on Kepler and above GPUs.
- Fixed:
- Creating and immediately setting the position of particles failed and possibly crashed with GPU acceleration enabled. This would only happen after one or more simulation updates.
- Creating many spread out particles might have crashed the GPU pipeline.
Broad Phase
- Added:
- The SDK now supports multiple broad-phase algorithms (SAP & MBP). See Release Highlights, PxBroadPhaseType and PxBroadPhaseDesc.
- PxVisualizationParameter::eMBP_REGIONS has been added to visualize MBP regions
- Fixed:
- The sap broadphase now gracefully handles PxShape instances whose axis-aligned bounding boxes have min/max limits with value +/- PX_MAX_F32 or QNAN or INF. Such bounds values can occur if a PxShape is given a global transform that is either illegal or close to the upper limit of the floating point range. Prior to this release, the sap broadphase could crash when the axis-aligned bounds of shapes had values that weren't within the floating point range. This has now been fixed. The overlap pairs reported by the broadphase for bounds with such values is undefined.
Vehicles
- Added:
- Vehicles now support serialization. A PxSerializationRegistry instance may be passed into PxInitVehicleSdk and PxCloseVehicleSdk in order to enable support.
- Vehicle telemetry graphs can now be queried per channel for the most recent value with the function PxVehicleGraph::getLatestValue.
- New vehicle PxVehicleDriveNW type has been introduced. This class makes use of a new differential type PxVehicleDifferentialNW, which allows specified wheels to be equally coupled to the differential, and allows all for some or all of the N wheels to be driven.
- Support for camber angles has been added to the PxVehicleSuspensionData class.
- Moment of inertia parameter has been added to the PxVehicleEngineData class. Prior to this a value of 1.0 was assumed internally. A default value of 1.0 has been used in the constructor for backwards compatability.
- Vehicle manual contains new section describing the conversion of default vehicle parameter values from SI units to any system of units with particular reference to the use of centimetres instead of metres .
- The SI units of each parameter in PxVehicleComponents.h has been documented.
- Vehicle manual contains updated troubleshooting section.
- The requirements for disabled wheels (PxVehicleWheelsSimData::disableWheel) have been documented to make it clear that disabled wheels must be no longer associated with a PxShape, must have zero rotation speed, and must be decoupled from the differential. This is also now discussed in the guide.
- Wheel raycasts documentation has been improved to clarify the start and end points of each raycast.
- Suspension line raycasts do not need to be performed for each vehicle prior to update with PxVehicleUpdates. This feature is implemented with a boolean array passed as an extra function argument to PxVehicleSuspensionRaycasts. This feature is useful for vehicles that require only low level of detail.
- The clutch model now supports two accuracy modes (PxVehicleClutchAccuracyMode::eESTIMATE and PxVehicleClutchAccuracyMode::eBEST_POSSIBLE). If the estimate mode is chosen the computational cost and accuracy of the clutch can be tuned with PxVehicleClutchData::mEstimateIterations.
- PxVehicleSuspensionData now has a function setMassAndPreserveNaturalFrequency. This modifies the mass and stiffness of the spring in a way that preserves the spring natural frequency.
- A new helper function PxVehicleCopyDynamicsData has been added that allows dynamics data such as engine rotation speed, wheel rotation speed, gear etc to be copied from one vehicle to another of the same type. This is particularly useful if a vehicle has a number of different versions where each represents a different level of detail.
- A new function PxVehicleWheelsSimData::copy has been added to allow per wheel dynamics data to be copied from one vehicle to another.
- The vehicle manual contains a new section "Level of Detail" describing the available options for vehicles that require only a low level of detail.
- PxVehicleTireLoadFilterData now requires that mMinNormalisedLoad is greater than or equal to zero.
- PxVehicleTireLoadFilterData now has a new member variable mMinFilteredNormalisedLoad. This value describes the filtered normalised load that occurs when the normalised is less than or equal to mMinNormalisedLoad.
- PxVehicleWheelsSimData now has a new function setMinLongSlipDenominator. This can be used to tune stability issues that can arise when the vehicle slows down in the absence of brake and drive torques.
- A new section "PxVehicleAutoBoxData" has been added to the vehicle tuning guide to describe operation of the automatic gearbox.
- A new section "The Vehicle Under-steers Then Over-steers" has been added to the vehicle troubleshooting guide to describe steps to avoid twitchy handling on bumpy surfaces.
A new section "The Vehicle Never Goes Beyond First Gear" has been added to the vehicle troubleshooting guide to describe a common scenario that occurs when the automatic gearbox is given a latency time that is shorter than the time taken to complete a gear change.
- A new section "The Vehicle Slows Down Unnaturally" has been added to the vehicle troubleshooting guide to describe the steps that can be taken to help the vehicle slow down more smoothly.
- A number of vehicle snippets have been added.
- Changed:
- Minor api change for consistency: PxVehicleDrive4WWheelOrder has been introduced to replace the enum beginning with PxVehicleDrive4W::eFRONT_LEFT_WHEEL.
- Minor api change for consistency: PxVehicleDrive4WControl has been introduced to replace the enum beginning with PxVehicleDrive4WControl::eANALOG_INPUT_ACCEL.
- Minor api change for consistency: PxVehicleDriveTankWheelOrder has been introduced to replace the enum beginning with PxVehicleDriveTankWheelOrder::eFRONT_LEFT.
- Minor api change for consistency: PxVehicleDriveTankControl has been introduced to replace the enum beginning with PxVehicleDriveTank::eANALOG_INPUT_ACCEL.
- Minor api change for consistency: PxVehicleDriveTankControlModel has been introduced to replace the enum beginning with PxVehicleDriveTank::eDRIVE_MODEL_STANDARD.
- Minor api change for consistency: PxVehicleTypes has been introduced to replace the enum beginning with eVEHICLE_TYPE_DRIVE4W.
- Minor api change for consistency: PxVehicleWheelGraphChannel has been introduced to replace the enum beginning with PxVehicleGraph::eCHANNEL_JOUNCE.
- Minor api change for consistency: PxVehicleDriveGraphChannel has been introduced to replace the enum beginning with PxVehicleGraph::eCHANNEL_ENGINE_REVS.
- Minor api change for consistency: PxVehicleGraphType has been introduced to replace the enum beginning with PxVehicleGraph::eGRAPH_TYPE_WHEEL.
- PxVehicleUpdates now checks in checked and debug config that the wheel positioning of the driven wheels in a PxVehicleDrive4W obey the wheel ordering specified in PxVehicleDrive4WWheelOrder. Vehicles that are back-to-front or right-to-left are also allowed. A warning is issued if the check fails.
- PxVehicleUpdates now checks in checked and debug config that the odd wheels of a PxVehicleDriveTank are either all to the left or all to the right of their even-wheeled complement, as specified in PxVehicleDriveTankWheelOrder. A warning is issued if the check fails.
- To improve api consistency the arguments of the function PxVehicleDriveDynData::setAnalogInput(const PxReal analogVal, const PxU32 type) have been swapped so that it is now of the form PxVehicleDriveDynData::setAnalogInput(const PxU32 type, const PxReal analogVal).
- Non-persistent wheel dynamics data (slip, friction, suspension force, hit data etc) has been moved out of the PxVehicleWheelsDynData class and is now recorded in a PxWheelQueryResult buffer that is passed as a function argument to the PxVehicleUpdates function.
- PxVehicleWheels::isInAir() has been replaced with PxVehicleIsInAir(const PxVehicleWheelQueryResult& vehWheelQueryResults) to reflect the change to non-persistent data storage.
- The origin of vehicles can now be shifted to stay in sync when the origin of the underlying PxScene is shifted. See PxVehicleShiftOrigin() for details.
- PxVehicleWheels::setWheelShapeMapping and PxVehicleWheels::getWheelShapeMapping have been moved to PxVehicleWheelsSimData::setWheelShapeMapping and PxVehicleWheelsSimData::getWheelShapeMapping
- PxVehicleWheels::setSceneQueryFilterData and PxVehicleWheels::getSceneQueryFilterData have been moved to PxVehicleWheelsSimData::setSceneQueryFilterData and PxVehicleWheelsSimData::getSceneQueryFilterData
- PxVehicle4WEnable3WTadpoleMode and PxVehicle4WEnable3WDeltaMode now take an extra function argument: a non-const reference to a PxVehicleWheelsDynData.
- The section "SI Units" in the vehicle guide has been updated to include the new functon PxVehicleWheelsSimData::setMinLongSlipDenominator.
- PxVehicleTireData::mCamberStiffness has been replaced with PxVehicleTireData::mCamberStiffnessPerUnitGravity. PxVehicleTireData::mCamberStiffnessPerUnitGravity should be set so that it is equivalent to the old value of PxVehicleTireData::mCamberStiffness divided by the magnitude of gravitational acceleration.
- PxVehicleComputeTireForceDefault has been removed from the public vehicle api. Custom tire shaders that call PxVehicleComputeTireForceDefault are best implemented by taking a copy of PxVehicleComputeTireForceDefault and calling the copy instead.
- Fixed:
- Sticky tire friction is now activated in the tire's lateral direction at the tire force application point when the velocity at the base of the tire has low longitudinal and low lateral components. Longitudinal sticky tire friction is unaffected and is still activated when the vehicle has low forward speed. This fixes a minor bug where vehicles positioned on a slope perpendicular to the slope's downwards direction can slowly drift down the slope.
- Bugs in the suspension force and tire load computation have been fixed that affected handling when the car was upside down.
- The tire load passed to the tire force computation is now clamped so that it never falls below zero.
- A bug in the tank damping forces has now been fixed. Tanks now slow down more aggressively from engine and wheel damping forces.
Release Notes - NVIDIA® PhysX® SDK 3.2.4
April 2013
What's New In NVIDIA PhysX 3.2.4
General
- Note: PS3 platform specific changes can be found in the PS3 readme file.
- Fixed a bug which caused actors to return wrong world bounds if the bounds minimum was above 10000 on any axis.
- Reporting allocation names can now be enabled or disabled (see PxFoundation::setReportAllocationNames). When enabled, some platforms allocate memory through 'malloc'.
- eEXCEPTION_ON_STARTUP is removed from PxErrorCode and it is no longer needed.
- Added boilerplate.txt to the Tools folder. SpuShaderDump.exe and clang.exe require it.
- PxWindowsDelayLoadHook.h has been moved from Include/foundation/windows to Include/common/windows.
- PxScene::saveToDesc now reports the bounceThresholdVelocity value.
- Fixed a bug in PxDefaultSimulationFilterShader: the value of the second filter constant in the collision filtering equation was ignored and instead the value of the first filter constant was used.
- Fixed a crash bug in PCM collision.
Rigid Bodies
- Forces applied to bodies (with PxRigidBody::addForce) that go to sleep in the subsequent update now have their applied forces cleared when the body is set to sleep to avoid them being applied in a later update when the body is once more awake. This bug broke the rule that forces applied with PxRigidBody::addForce do not persist beyond the next scene update.
- Jittering of small spheres & capsules on very large triangles has been fixed.
Cooking
- PxCookingParams constructor is now marked as deprecated. PxToleranceScale is needed for PxCookingParams in order to perform additional triangle check during cooking. This triangle check will trigger warning if too huge triangles are used. This check will ensure better simulation stability.
Scene Queries
- Added PxScene::forceDynamicTreeRebuild() function to immediately rebuild the scene query structures.
- Accuracy in sphere/capsule-vs-triangle overlap and sweep tests has been improved.
Broad Phase
- Fixed assert in debug mode that wrongly asserted when an overlap pair was removed with perfect equality between the min of one bound and the max of the other along at least one axis.
Character controller
- PxControllerFilterCallback has been added, to make CCT-vs-CCT filtering more flexible.
- Fixed a bug where PxControllerBehaviorCallback was not called when a PxUserControllerHitReport was not defined.
- PxObstacle notifications has been added to handle touched obstacles.
- Touched PxObstacle has been replaced by touched ObstacleHandle.
- PxObstacleContext::getObstacleByHandle has been added.
- Touched actors scene is checked before ride on shape, to ensure valid touched shape.
- Touched shape scene query flag is checked before ride on shape, to ensure valid touched shape.
- Touched shape user CCT filtering is triggered before ride on shape, to ensure valid touched shape.
- Box & capsule controllers' resize function now properly take the up direction into account
Vehicles
- Documented potential problem with PxVehicleWheelsDynData::getTireDrivableSurfaceType() and PxVehicleWheelsDynData::getTireDrivableSurfaceShape() whereby the pointer returned may reference a PxShape or PxMaterial that has been released in-between storing the pointer in PxVehicleUpdates and any subsequent query.
- PxVehicleWheelsSimData::disableWheel has been documented in more detail. PxVehicleWheelsSimData::enableWheel has been added.
- Fixed a bug where the denominator of the longitudinal slip calculation didn't take into account the value of PxTolerancesScale::length. This will only have an impact if PxTolerancesScale::length != 1.0f.
- Fixed a bug where the engine torque would be incorrectly applied if PxTolerancesScale::length != 1.0f. This will only have an impact if PxTolerancesScale::length != 1.0f.
Particles
- Creating and immediately setting the position of particles failed and possibly crashed with GPU acceleration enabled. This would only happen after one or more simulation updates.
Unchanged from from 3.2.3 except:
Development
Unchanged from from 3.2.3.
Release Notes - NVIDIA® PhysX® SDK 3.2.3
November 2012
What's New In NVIDIA PhysX 3.2.3
General
- Note: PS3 platform specific changes can be found in the PS3 readme file.
- Quaternions passed through the API are now considered valid if their magnitude is between 0.99 and 1.01.
- Fixed crash when running out of memory on creation of a triangle mesh.
- For applications using floating point exceptions, the SDK will now mask or avoid exceptions arising from invalid floating point operations (inexact and underflow exceptions may still be generated).
- Fixed a bug with recursive use of the PxScene read/write lock.
- Fixed a shutdown bug with very short lived threads on Linux platforms.
- PhysX version number in error messages now printed in hex for easier reading.
- Fixed memory barrier and prefetch implementation for all posix based platforms (android, ios, osx, linux).
Broad Phase
- Fixed a broad phase crash bug that occurred when deleting shapes with bounds very far from the origin.
Collision Detection
- Documentation of limits of PxShape counts has been added for affected platforms.
- Made kinematics interact better with CCD.
- Adding support for disabled contact response in CCD by respecting the dominance setting. In this case, CCD will emit events but will not alter the motion of the bodies.
- Fixed potential crash in eENABLE_PCM codepath.
Rigid Bodies
- Fixed bug in force based contact reports. An assert could occur when PxPairFlag::eNOTIFY_THRESHOLD_FORCE_PERSISTS was set and PxPairFlag::eNOTIFY_THRESHOLD_FORCE_FOUND was not set.
- Twist Limit range is documented for revolute and D6 joints, and validated.
- Reduced the number of SDK allocations when using CCD.
Scene Queries
- Raycasts against heighfields now return correct actual mesh index, which can be used for getTriangle().
- Fixed bug that caused scene queries to miss hits for static rigid bodies that got moved around (after having been added to the scene).
- Fixed rebuilding the dynamic structure properly when used for static rigid bodies.
- Fixed a rare crash in heightfield raycast code.
Character controller
- A new runtime tessellation feature has been added, that can help reducing FPU accuracy issues in the sweep tests.
Convex hulls
- Zero-sized convex hull data double delete detection fix.
Vehicles
- Vehicles with rigid body actors that are asleep and also have no acceleration or steer inputs are treated as though they are asleep too; that is, they are bypassed completely in the PxVehicleUpdates function. Vehicles with sleeping rigid body actors but with non-zero acceleration or steer inputs are processed as normal in PxVehicleUpdates and will automatically have their rigid body actor woken up.
- New function PxVehicleSetUpdateMode to allow PxVehicleUpdates to select between applying accelerations to vehicle rigid bodies or immediate updating of their velocity.
Particles
- Fixed a non-deterministic crash appearing with rigid bodies using CCD and gpu particles in the same scene.
Physx Visual Debugger
- Material release events are now correctly sent to PVD.
RepX
- Add more RepX class information in PhysXAPI document.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android (version 2.2 or later for SDK, 2.3 or later required for samples)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver ver 295.73 or later is required for GPU acceleration)
- Microsoft Windows RT (formerly known as Windows on ARM) (SDK only, no samples yet)
- Microsoft XBox 360
- Sony Playstation 3
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010
- Xcode 4.5
Unchanged from from 3.2.2.
Release Notes - NVIDIA® PhysX® SDK 3.2.2
October 2012
What's New In NVIDIA PhysX 3.2.2
General
- Note: PS3 platform specific changes can be found in the PS3 readme file.
- Added Microsoft Windows RT (formerly known as Windows on ARM) support.
- Suspended Sony Playstation Vita support.
- PxScene now exposes methods to make multithreaded sharing of scenes easier, see PxSceneFlags::eREQUIRE_RW_LOCK for details.
- Enabled Win64 DEBUG build to use SIMD enabled code path.
- Fixed bug in quaternion to axis/angle routine which failed on negative w values.
- Fixed crash when using ConvX on a PxCollection with external references.
- Fixed a spurious overlapping read/write error report when using simulation call backs in checked builds.
- The bounce threshold velocity can be set at run-time with PxScene::setBounceThresholdVelocity. Likewise, it can be queried with PxScene::getBounceThresholdVelocity
- Fixed return value of Ps::atomicExchange for POSIX based platforms: Linux, Android, IOS and OSX
- PxGeometryQuery::computePenetration() has been added, to compute the Minimum Translational Distance between geometry objects.
Broad Phase
- Fixed a broad phase crash bug.
Collision Detection
- Collision detection now more robust when confronted with ill-conditioned scenarios.
- Fixed crash when SDK is unable to create more contact pairs. Now a warning is emitted and the contacts are ignored.
Rigid Bodies
- Improved the numerical stability of articulations.
- The target pose of a kinematically controlled dynamic actor can now get extracted through PxRigidDynamic::getKinematicTarget().
- The new flag PxRigidDynamicFlag::eUSE_KINEMATIC_TARGET_FOR_SCENE_QUERIES makes scene queries use the target pose of a kinematically controlled dynamic actor instead of the actual pose.
- Fixed PxConstraintFlag::eVISUALIZATION having no effect.
- Fixed bug that caused sleep/wake-up notification events to get lost.
- Fixed a bug where sleeping objects were not waking up properly.
- Fixed potential assert when switching a rigid body between kinematic and dynamic with contact reports enabled.
- Fixed a bug where CCD didn't consider the scaling transform for triangle meshes.
- Fixed a potential crash bug when PxConstraintFlag::ePROJECTION gets raised after a joint (that connects to other projecting joints) has been created.
- Fixed a bug that resulted in joint breakage being reported every frame for any broken joint
- Added PxArticulationDriveCache for applying an impulse to an entire articulation
- fixed various crash bugs when sleeping articulations were removed from the scene and re-added
-
GPU Physics
- Fixed a possible out of bounds array access in GPU particle collision code.
- Updated the GPU PhysX Visual Indicator to allow APEX to hook into it.
- Fixed sample particles crash when there is a cuda kernel error.
- Upgraded GPU tech to CUDA 4.2.
Scene Queries
- PxSceneQueryHit::faceIndex is now filled in for sweeps against convex meshes.
- Added support for sphere and capsule shaped heightfield overlap queries.
- Added an inflation parameter to all sweep queries in PxGeometryQuery, PxBatchQuery, and PxScene. This can be used to maintain a minimum distance between objects when moving them using sweeps.
- Made sure that raycast multiple will include the closest triangle in the results even if the output cannot hold all the triangles that are hit.
- Fixed swept sphere against capsule not properly testing for initial overlap.
- Fixed the normal vector returned from sweeps being sometimes negated.
- Fixed a scenario where raycasting could miss an actor after the user has moved it using setGlobalPose().
- Fixed swept convex against plane sometimes reporting false hits
- Fixed swept/overlap/raycast with convexes that don't have identity scale rotation.
- Fixed a culling bug for box-triangle mesh sweep.
Convex hulls
- Convex hull is rejected if it has less than 4 polygons.
- Additional convex hull check has been added to detect open volumes.
Triangle meshes
- Added triangle mesh flags for 16bit indices and adjacency information.
- Fixed adjacency information order for getTriangle with triangle meshes to respect the vertex order.
HeightFields
- Fixed bug where capsules would bounce as they roll across heightfield edges.
- Fixed bug where spheres would bounce as they roll across heightfield vertices.
- Added adjacency information for getTriangle with height fields.
Particles
- Fixed triangle mesh shapes with ePARTICLE_DRAIN colliding with particles.
- Fixed crash with GPU particles when a lot of grid cells get occupied and vacated within one time step.
Character Controller
- The PxControllerBehaviorFlag::eCCT_USER_DEFINED_RIDE flag has been added.
- Fixed character controller not walking up steps properly if they are not exactly 90 degrees vertical.
- Fixed a bug where the character controller was not able to move up slopes when using a small step offset setting.
- Fixed a bug where the character controller could rise off the ground when blocked by a step.
- Fixed a bug where the character controller could rise off the ground when hitting another character controller.
- Fixed a bug where releasing a shape of a touching actor and then releasing the character controller would crash. Releasing shapes of actors in touch may still lead to crashes in other situations. PxController::invalidateCache() can be used to work around these situations.
CCD
- Fixed culling bug in CCD sweeps with meshes with transforms that caused contacts to be missed
Vehicles
- The vehicle sdk used to make the assumption that wheels 0 and 1 (the front wheels) of a PxVehicleDrive4W responded positively to the input steering wheel angle, while wheels 2 and 3 (the rear wheels) responded in the opposite direction to that of the input steering wheel angle. A consequence of this assumed behaviour was the restriction that PxVehicleWheelData::mMaxSteer was limited to positive values. This restriction has now been relaxed with the caveat that PxVehicleWheelData::mMaxSteer must be in range (-Pi/2, Pi/2). It is now possible to turn each wheel positively or negatively relative to the input steering wheel angle by choosing positive or negative values for PxVehicleWheelData::mMaxSteer. Ackermann steer correction might result in the front and rear wheels competing against each other if the rear and front all steer in the same direction relative to the input steering wheel angle. If this is the case it will be necessary to set the Ackermann accuracy to zero.
- It is now possible to set the engine rotation speed (PxVehicleDriveDynData::setEngineRotationSpeed), the rotation speed of each wheel (PxVehicleWheelsDynData::setWheelRotationSpeed) and the rotation angle of each wheel (PxVehicleWheelsDynData::setWheelRotationAngle). The default values for each of these properties remains zero.
- Wheel contact reporting has been improved with the addition of a number of query functions to the PxVehicleWheelsDynData class. These are getTireDrivableSurfaceContactPoint, getTireDrivableSurfaceContactNormal, getTireLongitudinalDir, getTireLateralDir, getSuspensionForce, getTireDrivableSurfaceShape.
- It is now possible to store a userData pointer per wheel. This allows, for example, each wheel to be associated with a game object. The relevant functions are PxVehicleWheelsDynData::setUserData and PxVehicleWheelsDynData::getUserData.
- The default behavior of PxVehicleWheels::setWheelShapeMapping has changed. Previously, default values were automatically assigned to each wheel at construction so that the ith wheel was mapped to the ith body shape. This, however, made the assumption that there was a wheel shape for each wheel, which is not always true. As a consequence, the default value is now -1, meaning any mapping between body shape and wheel has to be explictily made by calling setWheelShapeMapping.
- It is now possible to query the mapping between wheel and body shape with PxVehicleWheels::getWheelShapeMapping.
- It is now possible to query the tire shader data that has been applied to each wheel with PxVehicleWheelsDynData::getTireForceShaderData.
- The helper function PxVehicleComputeSprungMasses has been added to aid the setup of the suspension sprung masses from the rigid body centre of mass and wheel center coordinates.
- The scene query filter data applied to the suspension raycasts was previously taken from the filter data of the associated body shape. This makes the assumption of a body shape per wheel, which is not always true. As a consequence, the filter data must be explictly set per wheel by calling PxVehicleWheels::setSceneQueryFilterData. The filter data can be queried with PxVehicleWheels::getSceneQueryFilterData.
- Sub-stepping of the vehicle update can now be applied per vehicle with PxVehicleWheelsSimData::setSubStepCount.
- PxVehicleDrivableSurfaceToTireFrictionPairs has been modified so that the dictionary of material pointers can be updated without the necessity of further allocation. The create function has been replaced with separate allocate and setup functions.
- A new vehicle type PxVehicleNoDrive has been added to provide a close approximation to backwards compatibility with the api of the 2.8.x NxWheelShape.
Visual Remote Debugger
- Added PVD compatible profile zones for batched queries.
- Added the ability to capture and inspect scene queries in PVD.
- SDK will now flush the pvd connection stream immediately after cloth or cloth fabric is created or released.
- Fixed the PVD support for articulations.
- Fixed PVD rendering wrong constraint limits.
Documentation
- Wrong statement in PxRigidStatic::release() has been corrected. Static rigid bodies do wake up touching dynamic rigid bodies on release.
- Wrong statement in PxShape::setFlag() has been corrected. It is a valid operation to clear all flags.
- Retroactively added more detail about changes to 3.2.1 release notes below.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android (version 2.2 or later for SDK, 2.3 or later required for samples)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver ver 295.73 or later is required for GPU acceleration)
- Microsoft Windows RT (formerly known as Windows on ARM) (SDK only, no samples yet)
- Microsoft XBox 360
- Sony Playstation 3
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010
- Xcode 4.2
General
- Memory leaks might get reported when using the debug versions of malloc and free together with the debug version of PhysX on Microsoft Windows platforms with Visual Studio 2010. This is caused by a bug in the Visual Studio 2010 runtime libraries. If such a leak appears immediately after releasing PhysX and all its components, please contact us for information about workarounds.
- Use of articulations may require an increase of 64K in the stack size for threads making API calls and engine worker threads
Please also see the previous lists from 3.2.1 and earlier.
Release Notes - NVIDIA® PhysX® SDK 3.2.1
June 2012
What's New In NVIDIA PhysX 3.2.1
General
- Note: PS3 platform specific changes can be found in the PS3 readme file.
- Added GRB hooks for APEX 1.2.1.
- Some incorrect usages of __restrict have been fixed.
- A crash when the user's code had FPU exceptions enabled has been fixed.
- A rare crash on Win64 has been fixed.
- Removed no longer needed RapidXML library from distribution.
- Binary serialization can now save the names of actors and shapes.
- Removed a RepXUtility.h reinterpret_cast compile warning that happened on some platforms.
- Fixed a spurious overlapping read/write error report when using simulation call backs in checked builds.
- Fixed a bug in PxBinaryConverter when processing PxConvexMesh and PxMaterial assets.
- Fixed bug in implementations of array accessors (PxPhysics::getScenes(), GuMeshFactory::getTriangleMeshes(), GuMeshFactory::getConvexMeshes(), GuMeshFactory::getHeightFields(), PxAggregate::getActors(), PxScene::getAggregates(), PxScene::getArticulations(), PxScene::getConstraints() ) when startIndex > bufferSize.
- Reduced the number of libraries provided for game consoles. The following core libraries are included in the PhysX3 library and are not available separately anymore: LowLevel, LowLevelCloth, PhysX3Common, PhysXProfileSDK, PhysXVisualDebuggerSDK, PvdRuntime, PxTask, SceneQuery, SimulationController.
Documentation
- Clarified documentation regarding use of eSEND_SLEEP_NOTIFIES flag.
- Clarified documentation regarding using different CRT libraries.
- Removed some confusing statements about meta data from the documentation.
- Updated PsPool, PsSort so they can use the user allocator.
Mesh Cooking
- A warning message about negative volumes in the convex mesh cooker could cause a crash.
- Fixed failure to create valid convex hull in cooking when using PxConvexFlag::eINFLATE_CONVEX.
- The convex mesh cooking has been made more robust and properly outputs some error messages that were previously missing.
- Fixed crash bug in x64 version of ClothEdgeQuadifier.
- Adjacency information option for TriangleMeshes. This is controlled using the PxCookingParams::buildTriangleAdjacencies flag, and returned if available by PxMeshQuery::getTriangle().
Broad Phase
- The sdk gracefully handles the case of more than 65536 broadphase pairs and reports a warning that some contacts will be dropped in the event that this limit is exceeded. This affects all platforms except win32/win64/linux/linux64, which support a maximum number of 4294967296 pairs.
Collision Detection
- Fixed a memory corruption bug in heightfield code.
- Fixed a bug in sphere vs mesh contact generation that could result in bad normals.
- Added a flag to enable or disable contact caching, to permit users to make a performance vs memory tradeoff.
- Fixed a crash bug in ContactReport cleanup code.
Rigid Bodies
- The simultaneous raising of both the PxShapeFlag::eSIMULATION_SHAPE and PxShapeFlag::eTRIGGER_SHAPE flags is now explicitly forbidden by the sdk. If any of the two is raised then any attempt to raise the other is rejected by the sdk and an error is passed to the error stream.
Articulations
- The API stubbed in 3.2.0 for applying an impulse to an entire articulation is now implemented.
GPU Physics
- Much more specific error messages for CUDA compute capability related failures.
- Added SM35 support for GK110 GPUs.
- The CUDA contexts provided by the gpu dispatcher can now be shared across scenes.
- Fixed a possible out of bounds array access in GPU particle collision code.
Scene Queries
- Resolved poor GJK sweep convergence.
- Batched queries accept sphere geometry for sweeps.
- Optimized performance of raycasts.
- An internal limit of 65536 objects in the scene-query subsytem has been lifted.
- Fixed a bug where raycasts that sliced through two adjoining heightfields did not return correct results.
- Fixed a crash bug in PxFindOverlapTriangleMeshUtil when doing a sphere overlap query against a heightfield.
Cloth
- PxCloth::setMotionConstraints() now works with NULL parameter.
Character Controller
- PhysX CCT code no longer sets PxShape::userData.
- Intersection of pairs of CCTs now uses the supplied filter data and the supplied callback prefilter. The callback postfilter is not yet hooked up.
- A bug has been fixed whereby the filterData was ignored in one of the scene queries initiated by the PhysX CCT code.
- Introduced a more automatic mechanism for invelidating the character controller's scene cache. As part of this, PxController::reportSceneChanged() was replaced with PxController::invalidateCache().
- Added helper functions PxController::get/setFootPosition() to let user specify the bottom point of the character controller, rather than the center.
- A new helper function, PxController::resize(), has been added to facilitate character controller resizing.
- PxControllerBehaviorFlag::eCCT_CAN_RIDE_ON_OBJECT is not the default behavior anymore.
- The slope limit is only observed when walking on static convex meshes, static triangle meshes, static boxes and static heightfields. The slope limit is not observed when walking on dynamic or kinematic rigid bodies or static capsules or static spheres. This partially fixes a bug where the slope limit was inadvertently considered for shapes attached to dynamic rigid bodies and inadvertently ignored for boxes attached to static shapes.
Vehicles
- The vehicle sdk now reports an error to the error stream and exits from PxVehicleUpates if PxInitVehicleSdk has not been called in advance. This avoids a divide-by-zero error that can arise if the vehicle sdk has not been initialised correctly.
Visual Debugger
- Releasing of cloth fabrics is reported to the VRD.
- Ext::Joint::setActors() call now reported to PVD.
- Fixed crash bug when removing an aggregate containing a PxArticulation, while PVD is running.
Supported Platforms
Unchanged from from 3.2.
Unchanged from from 3.2.
Release Notes - NVIDIA® PhysX® SDK 3.2
December 2011
What's New In NVIDIA PhysX 3.2
General
- Three new sample applications: SampleCharacterCloth (character with cloth cape and cloth flags), SampleBridges (character controller walking on dynamic bridges and moving platforms), SampleCustomGravity (character controller with arbitrary up vector).
- On Windows, the PxFoundation instance is now a process wide singleton and part of the new PhysX3Common.dll library
- PxCreatePhysics() does not create a PxFoundation instance any longer. The PxFoundation instance has to be created in advance through PxCreateFoundation().
- Calls to PxCreatePhysics() are not valid anymore if a PxPhysics instance already exists.
- If profiling information should be sent to the PhysX Visual Debugger, a PxProfileZoneManager instance has to be provided when creating the PxPhysics instance.
- The version number constant PX_PUBLIC_FOUNDATION_VERSION has been replaced with PX_PHYSICS_VERSION. Both PxFoundation and PxPhysics use the same version number now.
- The API now distinguishes between input and output stream types.
- Added mechanism to reduce code size by not linking optional components. See PxCreateBasePhysics() and the PxRegister*() functions.
- Added getConcreteTypeName() to API classes to provide run time type information.
- Added PxScene::getTimestamp() to retrieve the simulation counter.
- PxGetFoundation has been moved to PxGetFoundation.h
- Changed the functions PxPhysics::releaseUserReferences(), releaseCollection(), addCollection() and releaseCollected() to now take a reference rather than a pointer.
- The signature of PxCreatePhysics has changed: The Foundation SDK instance must be passed in explicitly. One can also hook profiling information by passing a PxProfileZoneManager.
- Platform conversion for serialized data has been moved from the ConvX command line tool to the PxBinaryConverter interface in the cooking library
- contact data block allocation now provides statistics on usage and max usage
- On all platforms except PS3, contact data blocks can be progressively allocated
- PxExtensionVisualDebugger has been renamed to PxVisualDebuggerExt, PxExtensionsConnectionType renamed to PxVisualDebuggerConnectionFlag
- Default implementations of memory and file streams added in PxDefaultStreams.h
- Renamed PxPhysics::getMetaData() to ::PxGetSDKMetaData().
- Scene::simulate() now takes a memory block which is used for allocation of temporary data during simulation
- On Windows, CudaContextManagerDesc support appGUID now. It only works on release build. If your application employs PhysX modules that use CUDA you need to use a GUID so that patches for new architectures can be released for your game.You can obtain a GUID for your application from Nvidia.
Rigid Bodies
- Introduced a new contact generation mode, see eENABLE_PCM. Note that this is an experimental feature that still shows simulation artifacts in some scenarios.
- Introduced two new friction simulation modes, see eENABLE_ONE_DIRECTIONAL_FRICTION and eENABLE_TWO_DIRECTIONAL_FRICTION.
- Introduced a new scene query flag PxSceneQueryFlag::eINITIAL_OVERLAP_KEEP to control how initial overhaps are treated in scene queries.
- Per-triangle materials have been implemented.
- Changes to material properties are automatically reflected in contact resolution.
- New helper methods to compute mass properties for a dynamic rigid body taking per shape density/mass values into account (see documentation on PxRigidBodyExt for details).
- A new set of methods for overlap, sweep and raycast tests based on PxGeometry objects has been introduced. See documentation on PxMeshQuery and PxGeometryQuery for details).
- The contact report API has changed (for details see the documentation on PxSimulationEventCallback::onContact()). Among the changes are:
- Reports only get sent for shape pairs which request them. Previously, reports were sent for an actor pair even if the requested shape pair event was not triggered (for example because other shapes of the same actors started colliding etc.)
- The following PxPairFlags have been removed eNOTIFY_CONTACT_FORCES, eNOTIFY_CONTACT_FORCE_PER_POINT, eNOTIFY_CONTACT_FEATURE_INDICES_PER_POINT. Forces and feature indices are now always provided if applicable.
- It is much easier now to skip shape pairs or contact point information when traversing the contact report data.
- The memory footprint of contact reports has been reduced.
- The members featureIndex0/1 of PxContactPoint have been renamed to internalFaceIndex0/1 for consistency.
- For trigger reports, the eNOTIFY_TOUCH_PERSISTS event has been deprecated and will be removed in the next release. For performance and flexibility reasons it is recommended to use eNOTIFY_TOUCH_FOUND and eNOTIFY_TOUCH_LOST only and manage the persistent state separately.
- Added PxConstraintVisualizer interface and code to visualize joint frames and limits.
- Improved PxBatchQuery API.
- PxPhysics::getProfileZoneManager() now returns a pointer rather than a reference.
- PxRigidDynamic::moveKinematic() has been renamed to setKinematicTarget() to underline its precise semantics.
- Added new function PxShape::getGeometry and class PxGeometryHolder to improve Geometry APIs.
- PxCreatePlane now takes a PxPlane equation as a parameter. Note that the interpretation of the distance value is negated relative to 3.1
- Added new actor creation helpers PxCloneStatic, PxCloneDynamic, PxScaleActor.
- Added new functions PxTransformFromSegment, PxTransformFromPlaneEquation to simplify creation of planes and capsules.
- added PxJoint::getConstraint() to access the underlying constraint object, from which the constraint force can be read
- Some methods of PxAggregate have been renamed for consistency or replaced for extended functionality.
- getMaxSize() is now called getMaxNbActors().
- getCurrentSize() is now called getNbActors().
- getActor() has been replaced by getActors() which copies the actor pointers to a user buffer.
- Added support for kinematic triangle meshes, planes and heighfields.
Scene queries
- Dynamic AABBTree has been set as the default dynamic pruning structure.
Particles
- Removed descriptors from particle API: The properties maxParticles and PxParticleBaseFlag::ePER_PARTICLE_REST_OFFSET need to be specified when calling PxPhysics::createParticleSystem() and createParticleFluid(). All other properties can be adjusted after creation through set methods.
Cloth
- Added convex collision shapes, see PxCloth::addCollisionConvex()
- Added friction support, see PxCloth::setFrictionCoefficient()
- Added angle based bending constraints, see PxClothPhaseSolverConfig::SolverType::eBENDING
- Added separation constraints, a spherical volume that particles should stay outside of, see PxCloth::setSeparationConstraints()
- Added drag, see PxCloth::setDragCoefficient()
- Added inertia scaling, controls how much movement due to PxCloth::setTargetPose() will affect the cloth
- Added support for setting particle previous positions, see PxCloth::setParticles()
- Added controls for scaling particle mass during collision, this can help reduce edge stretching around joints on characters, see PxCloth::setCollisionMassScale()
- Particle data is now copied asynchronously from the GPU after simulate (rather than on demand)
- Improved fabric layout, you can now share fabric data across multiple phases to reduce memory usage, see PxClothFabric
- Fixed bug in collision when capsules are tapered at a slope > 1
Vehicles
- Added PxVehicleDriveTank, a vehicle class that enables tank behaviors.
- Support for vehicles with more than 4 wheels, see PxVehicleDrive4W, PxVehicleDriveTank.
- Significant refactor of vehicle api to allow further types of vehicle to be added.
- Americal English spelling used in vehicle api.
- PxVehicle4W replaced with PxVehicleDrive4W, PxVehicle4WSimulationData replaced with PxVehicleDriveSimData4W.
- Removal of scene query helper functions and structs: PxVehicle4WSceneQueryData, PxVehicle4WSetUpSceneQuery, PxWheelRaycastPreFilter, PxSetupDrivableShapeQueryFilterData, PxSetupNonDrivableShapeQueryFilterData, PxSetupVehicleShapeQueryFilterData. See SampleVehicle_SceneQuery.h for their implementation in SampleVehicle.
- PxVehicle4WSimpleSetup and PxCreateVehicle4WSimulationData have been removed and replaced with default values in vehicle components, see PxVehicleComponents.h.
- PxVehicle4WTelemetryData has been replaced with PxVehicleTelemetryData, a class that supports vehicles with any number of wheels, see PxVehicleTelemetryData
- PxVehicleDrivableSurfaceType no longer stored in PxMaterial::userData. A hash table of PxMaterial pointers is instead used to associate each PxMaterial with a PxVehicleDrivableSurfaceType, see PxVehicleDrivableSurfaceToTireFrictionPairs.
- PxVehicleTyreData::mLongitudinalStiffness has been replaced with PxVehicleTireData::mLongitudinalStiffnessPerUnitGravity, see PxVehicleTireData.
- Tire forces now computed from a shader to allow user-specified tire force functions, see PxVehicleTireForceCalculator.
- Added helper functions to quickly configure 3-wheeled cars, see PxVehicle4WEnable3WTadpoleMode, PxVehicle4WEnable3WDeltaMode.
Serialization
- Changed the functions PxPhysics::releaseUserReferences(), releaseCollection(), addCollection() and releaseCollected() to now take a reference rather than a pointer.
- Platform conversion for serialized data has been moved from the ConvX command line tool to the PxBinaryConverter interface in the cooking library.
- Changed some functions in RepXUtility.h and RepX.h to take a reference rather than a pointer.
What we removed:
- Deformables have been removed. Use the optimized solution for clothing simulation instead (see documentation on PxCloth for details).
- PxSweepCache was replaced with PxVolumeCache.
- PVD is no longer enabled in the release build.
- Removed anisotropic friction.
- Removed the CCD mode eSWEPT_CONTACT_PAIRS.
- PxActorDesc has been removed.
- The ConvX tool has been removed.
- Removed empty default implementations of functions in PxSimulationEventCallback for consistency and because it can create bugs in user code if function prototypes change between releases. Users must now supply (eventually blank) implementations for all functions.
- Octree and quadtree pruning structures have been removed.
Fixed Bugs
- PxScene::getActors() might not work properly when the startIndex parameter is used.
- Improved the doc-comment of PxConvexMesh::getMassInformation().
- RepX instantiation can lose all internal references when addOriginalIdsToObjectMap is false.
- PxSetGroup crashed when used on a compound.
- PhysXCommon.dll can be delay loaded.
- ContactReportStream can now handle huge report numbers and size (resize-able flag) can be set in PxSceneDesc.h.
- Fixed assert in sweep tests.
- Concurrent read/write operations during a PxScene::fetchResults() call were not detected properly and no warning message got sent in checked builds. Forbidden write operations during callbacks triggered by PxScene::fetchResults() (contact/trigger reports etc.) were not covered either.
- Fixed crash bug that occurred during collision detection when more than 16K of contact data was generated. Contacts that generate more than 16K of contact data are now fully supported.
- Fixed crash bug when PhysX Visual Debugger is connected and an object gets modified and then released while the simulation is running.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android (version 2.2 or later for SDK, 2.3 or later required for samples)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver ver 295.73 or later is required for GPU acceleration)
- Microsoft XBox 360
- Sony Playstation 3
- Sony Playstation Vita
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010
- Xcode 4.2
Binary Serialization
- Meta data generation for PxParticleFluid and PxParticleSystem serializables currently fails.
- For collections that contain jointed rigid bodies all corresponding joints need to be added as well, otherwise deserialization will fail.
Rigid Body Simulation
- Capsules and spheres can struggle to come to rest on even perfectly flat surfaces. To ensure these objects come to rest, it is necessary to increase angular damping on rigid bodies made of these shapes. In addition, flagging the capsule/sphere's material with physx::PxMaterialFlag::eDISABLE_STRONG_FRICTION can help bring these shapes to rest.
Character Cloth Sample
- An NVIDIA GPU with Compute Capability 2.0 or higher is required for GPU accelerated simulation in the SampleCharacterCloth sample, if no such device is present then simulation will be performed on the CPU.
- Note that this is not a general SDK requirement, the clothing SDK supports cards with Compute Capability < 2.0 but with limitations on mesh size.
Character Controller
- Releasing shapes of actors that are in touch with a character controller may lead to crashes. Releasing whole actors doesn't lead to the same problems. PxController::invalidateCache() can be used to work around these issues.
Please also see the previous lists from 3.1.1 and earlier.
Release Notes - NVIDIA® PhysX® SDK 3.1.2
December 2011
What's New In NVIDIA PhysX 3.1.2
General
- Fixed wrong write/read clash checks.
- Removed some compiler warnings from public header files.
- Fixed PxScene::getActors() returning wrong actors when a start index is specified.
Rigid Bodies
- Fixed broken joint projection in connection with kinematics.
- Fixed inaccurate normals returned from height field scene queries.
- Fixed a crash when the geometry of a shape changes and then the actor gets removed from the scene while the simulation is running.
- Fixed a crash when re-adding scene-query shape actors to scene.
Particles
- Fixed crash bug in particle simulation code on GPU.
Cloth
- Fixed a crash when GPU fabrics are shared between cloths.
- Fixed a hang in cloth fiber cooker when handed non-manifold geometry.
Samples
- Fixed SampleVehicles doing an invalid write.
- Fixed SampleVehicle jitter in profile build.
Supported Platforms (available in separate packages)
Unchanged from from 3.1.1.
Known Issues And Limitations
Unchanged from from 3.1.
Release Notes - NVIDIA® PhysX® SDK 3.1.1
November 2011
What's New In NVIDIA PhysX 3.1.1
General
- Ported samples to Linux.
- Fixed crash bug in ConvX.
- Fixed crash bug in the allocator code of PXC_NP_MEM_BLOCK_EXTENSIBLE.
- Fixed crash bug when connected to PVD on various platforms.
- Fixed bogus asserts due to overly strict validation of quaternions.
- Fixed one frame lag in PVD scene statistics.
- Fixed a number of OSX PVD sockets issues.
- Fixed SampleSubmarine code that violated concurrent read/writes restriction.
- Added warnings about read/write hazards to the checked build.
- Fixed RepX not reading joint properties.
- Fixed support for concurrent scene queries.
- Fixed PhysX GPU Visual Indicator support.
- Made it more clear in documentation that simulate(0) is not allowed.
Rigid Bodies
- eNOTIFY_TOUCH_LOST trigger events do now get reported if one of the objects in contact gets deleted (see documentation of PxTriggerPair for details).
- Dynamic rigid bodies with trigger shapes only do not wake up other touching bodies anymore.
- Added lost touch events for trigger reports when objects get deleted.
- Fixed dynamic triggers waking up actors they are triggered by.
- Removed an inapropriate assert from articulation code.
- Fixed problem with the angular momentum conservation of articulations.
- Fixed articulation sleep problems.
- Fixed a linear velocity related bug in CCD.
- Fixed crash bug CCD.
- Optimized performance of joint information being sent to PVD.
Runtime
- Microsoft Windows XP or later
- Microsoft XBox 360
- Sony Playstation 3
- Android 2.2 or later for SDK, 2.3 or later required for samples
- Linux (tested on Ubuntu)
- Mac OS X
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010
- Xcode 3
Unchanged from from 3.1.
Release Notes - NVIDIA® PhysX® SDK 3.1
September 2011
What's New In NVIDIA PhysX 3.1
General
- VC10 support has been introduced.
- VC8 support has been discontinued.
- Namespaces cleaned up.
- Extensions, Character Controller and Vehicle source code made available in binary distribution.
- Added x86,x64 suffix to PxTaskCUDA.dll
- Removed boolean return value from PxScene::addActor(...), and similar API calls.
- Added MacOS, Android and Linux to the list of supported platforms. See Supported Platforms below for details.
- Upgraded GPU tech to CUDA 4.
- Cleaned up a large number of warnings at C++ warning level 4, and set SDK to compile with warnings as errors.
- Removed individual sample executables in favor of one Samples executable from PC and console builds.
- Fixed alpha blending in samples.
- Simplified some code in samples.
- Improved ambient lighting in samples.
- Made samples work with older graphics cards.
- Improved and added more content the user's guide.
- No longer passing NULL pointers to user allocator to deallocate.
- Various improvements to Foundation and classes shared with APEX.
Rigid Bodies
- Rigid Body: High performance alternative convex narrow phase code available to source licensees. See PERSISTENT_CONTACT_MANIFOLD in the code.
- Significant advancements in the continuous collision detection algorithm.
- Optimizations and robustness improvements for articulations.
- Added some helper code to the API.
- Added sleep code for articulations.
- Added support for vehicles with more than one chassis shape.
- Solver iteration count for articulations.
- Articulation limit padding configurable.
- The reference count of meshes does now take the application's reference into acount as well and thus has increased by 1 (it used to count the number of objects referencing the mesh only). Note that a mesh does only get destroyed and removed from the list of meshes once the reference count reaches 0.
- Fixed autowake parameter sometimes being ignored.
- Constraint solver optimizations.
- Improved behavior of character controller on steep slopes.
- Binary serialization now saves names.
- Removed some descriptors from API.
- Removed the angular velocity term in the joint positional drive error formula.
- Fixed bug in capsule sweep versus mesh.
- Fixed a crash bug in the tire model.
- Fixed crashing of single link articulations.
- Fixed bug related to removing elements of an aggregate.
- Fixed swapped wheel graphs in sample vehicle.
- Fixed some slow moving bodies falling asleep in midair.
- Fixed missing collisions after a call to resetFiltering.
- Fixed broken autowake option in setAngularVelocity.
- Fixed D6 joint linear limits being uninitialized.
- A large number of misc. bug fixes and optimizations.
- Improved documentation and error messages associated with running out of narrow phase buffer blocks.
- Added articulation documentation.
- Expanded manual sections on joints.
- Improved reference doc for PxSceneQueryHitType.
- Added reference doc for PxSerializable.
Particles
- Particle index allocation removed from SDK. Added index allocation pool to extensions.
- Replaced GPU specific side band API PxPhysicsGpu and PxPhysics::getPhysicsGpu() with PxParticleGpu.
- Memory optimizations on all platforms and options to reduce memory usage according to use case with new per particle system flags:
- PxParticleBaseFlag::eCOLLISION_WITH_DYNAMIC_ACTORS
- PxParticleBaseFlag::ePER_PARTICLE_COLLISION_CACHE_HINT
- Fixed rare crash appearing with multi-threaded non-GPU particle systems and rigid bodies.
- Fixed particles leaking through triangle mesh geometry on GPU.
- Fixed fast particles tunneling through scene geometry in some cases.
- Fixed erroneous collision of particles with teleporting rigid shapes (setGlobalPose).
- Fixed particle sample behavior with some older GPU models.
- Fixed a GPU particle crash bug.
Cloth
- A new solution for simulating cloth and clothing.
Deformables
- Deformables are deprecated and will be removed in the next release. There is a new optimized solution for clothing simulation (see documentation on PxCloth for details).
Supported Platforms (available in separate packages)
Runtime
- Microsoft Windows XP or later
- Microsoft XBox 360
- Sony Playstation 3
- Android 2.2 or later for SDK, 2.3 or later required for samples
- Linux (SDK tested on Ubuntu, samples not yet ported)
- Mac OS X
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010
- Xcode 3
General
- Under VC10, you may get warnings due to conflicting build configuration flags. Workaround: Clear the "Inherit from parent or project defaults" flag for all projects in Project->Properties->C/C++->Command Line. We plan to fix this for the 3.1 general availability release.
Scene Query
- Querying the scene (e.g. using raycastSingle()) from multiple threads simultaneously is not safe.
Cloth
- Even simple parameters of a PxCloth can not be set or accessed while the simulation is running.
RepX
- RepX fails to load elements of aggregate joint parameters (PxD6JointDrive etc.)
Please also see the previous lists from 3.0.
Release Notes - NVIDIA® PhysX® SDK 3.0
February 14th2011
What's New In NVIDIA PhysX 3.0
General
This third major version of the SDK is a significant rewrite of the entire technology. We did away with a large amount of legacy clutter and replaced them with a wealth of new features and improvements.
Because even the API changes are so significant, it is easier to see it as a whole new product rather than a long list of changes.
What we removed:
- The dedicated NVIDIA PhysX PPU hardware is not supported any more.
- Scene compartments are not supported anymore. All created physical objects are now part of one and the same compartment.
- Force fields are not part of the NVIDIA PhysX SDK anymore.
- Splitting a simulation timestep into multiple substeps is not a functionality of the NVIDIA PhysX SDK any longer and has to be implemented above the SDK.
Key new features:
- Articulations: A way to create very stiff joint assemblies.
- Serialization: Save objects in a binary format and load them back quickly!
- Broad Phase Clustering: Put objects that belong together into a single broadphase volume.
- Driverless Model: No need to worry about system software on PC anymore.
- Dynamic Character Controller: A character controller that can robustly walk on dynamic objects.
- Vehicle Library: A toolkit to make vehicles, including an all new tire model.
- Non-Simulation Objects: A staging are outside of the simulation from where you can add things into the simulation at high speed.
- Simulation Task Manager: Take control of the management of simulation tasks.
- Stable Depenetration: Large penetrations can be gracefully recovered from.
- Double Buffering: You can read from and write to the simulated objects while the simulation is running on another thread.
- Mesh Scaling: Create different nonuniformly scaled instances of your meshes and convexes without duplicating the memory.
- Distance Based Collision Detection: Have the simulation create contacts before objects touch, and do away with unsightly overlaps.
- Fast Continuous Collision Detection: Have small and high speed objects collide correctly without sacrificing performance.
- Significantly increased performance and memory footprint, especially on consoles.
- Unified solver for deformables and rigid bodies for great interaction.
- Triangle collision detection with deformables.
- Support for our new Physics Visual Debugger, including integrated profiling.
Math classes
- Matrix based transforms have been replaced by quaternions.
- All angles are now expressed in radians. IN PARTICULAR the PxQuat constructor from
axis and angle as well as the getAngleAxis and fromAngleAxis methods now use radians rather than degrees.
Rigid Bodies
- Capsules are now defined to extend along the x rather than the y axis.
- Triangle meshes do not support heightfield functionality anymore. Use the dedicated PxHeightField class instead.
- Dynamic triangle mesh actors are not supported any longer. However, you can decompose your mesh into convex parts and create a dynamic actor consisting of these convex parts.
- The deprecated heightfield property NxHeightFieldDesc::verticalExtent is not supported any longer. Please use the PxHeightFieldDesc::thickness parameter instead.
- NxSpringAndDamperEffector is not supported anymore. Use PxDistanceJoint instead.
- Joints are now part of the PhysX extensions library (PhysXExtensions).
- Wheel shapes have been replaced by the more flexible entity PxWheel. A default wheel implementation, encapsulating most of the old wheel functionality, can be found in the PhysX extensions library (see PxDefaultWheel).
- The NxUtilLib library has been removed. Sweep/overlap/raycast tests and other helper methods can be found in the new GeomUtils library.
- Materials can no longer be accessed through indices. Per triangle material meshes need a material table which can be specified per shape (see PxShape::setMaterials() for details).
- The default material is not available anymore.
Particle Systems, Particle Fluids
- The NxFluid class has been replaced with two classes for separation of functionality and ease of use.
- PxParticleSystem: Particles colliding against the scene.
- PxParticleFluid: Particles simulating a fluid (sph).
- Simplified parameterization for particle systems.
- Using absolute distances instead of relative multipliers to rest spacing
- Simplified sph parameters
- Unified collision parameters with deformable and rigid body features
- Creating and releasing particles is now fully controlled by the application.
- Particle lifetime management isn't provided through the SDK anymore.
- Emitters have been removed from the SDK.
- Drain shapes don't cause particles to be deleted directly, but to be flagged instead.
- Initial particle creation from the particle system descriptor isn't supported anymore.
- Particle data buffer handling has been moved to the SDK.
- Per particle collision rest offset.
- GPU accelerated particle systems.
- Application controllable mesh mirroring to device memory.
- Runtime switching between software and GPU accelerated implementation.
Supported Platforms (available in separate packages)
Runtime
- Microsoft Windows XP or and later
- Microsoft XBox360
- Sony Playstation 3
Development
- Microsoft Windows XP or and later
- Microsoft Visual Studio 2008
Rigid Bodies
- Adding or removing a PxAggregate object to the scene is not possible while the simulation is running.
Particle Systems
- Releasing the Physics SDK may result in a crash when using GPU accelerated particle systems.
This can be avoided by doing the following before releasing the Physics SDK:
- Releasing the PxScene objects that contain the GPU accelerated particle systems.
- Releasing application mirrored meshes by calling PxPhysicsGpu::releaseTriangleMeshMirror(...), PxPhysicsGpu::releaseHeightFieldMirror(...) or PxPhysicsGpu::releaseConvexMeshMirror(...).
Copyright (C) 2008-2016 NVIDIA Corporation, 2701 San Thomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com