Runtime | Development | ||
---|---|---|---|
Apple iOS (tested on 12.1) | Xcode (tested with 10.1) | ||
Apple macOS (tested on 10.13) | Xcode (tested with 10.1) | ||
Google Android ARM (tested with API Level 19 - KITKAT) | NDK r13b | ||
Linux (tested on Ubuntu 16.04), GPU acceleration: display driver and GPU supporting CUDA 10 / CUDA ARCH 3.0 | Clang (tested with 3.8) | ||
Microsoft Windows, GPU acceleration: display driver and GPU supporting CUDA 10 / CUDA ARCH 3.0 | Microsoft Visual Studio 2013, 2015, 2017 | ||
Microsoft XBox One* | |||
Nintendo Switch* | |||
Sony Playstation 4* |
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.
Runtime | Development | ||
---|---|---|---|
Apple iOS (tested on 12.1) | Xcode (tested with 10.1) | ||
Apple macOS (tested on 10.13) | Xcode (tested with 10.1) | ||
Google Android ARM (tested with API Level 16, Android 4.1 - JELLY_BEAN) | NDK r13b-win32 | ||
Linux (tested on Ubuntu 16.04, GPU acceleration: NVIDIA Driver version R361+ and CUDA ARCH 3.0) | GCC (tested with 4.8) | ||
Microsoft Windows XP or later (NVIDIA Driver version R304 or later is required for GPU acceleration) | Microsoft Visual Studio 2012, 2013, 2015 | ||
Microsoft XBox One* | |||
Nintendo Switch* | |||
Sony Playstation 4* |
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android ARM (version 2.2 or later required for SDK, 2.3 or later required for snippets)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver version R304 or later is required for GPU acceleration)
- Microsoft XBox One
- Nintendo Switch
- Sony Playstation 4
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2012, 2013, 2015
- Xcode 8.2
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android ARM (version 2.2 or later required for SDK, 2.3 or later required for snippets)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver version R304 or later is required for GPU acceleration)
- Microsoft XBox One
- Nintendo Switch
- Sony Playstation 4
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2012, 2013, 2015
- Xcode 8.2
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.General
- Added:
- nbAggregates, nbArticulations, nbDiscreteContactPairsTotal, nbDiscreteContactPairsWithCacheHits and nbDiscreteContactPairsWithContacts have been added to PxSimulationStatistics.
- PxSceneLimits::maxNbBroadPhaseOverlaps has been added.
- A new midphase has been added. See PxMeshMidPhase enum for details.
- Midphase descriptor has been added. See PxMidphaseDesc for details.
- PxHeightField::getTimestamp() has been added
- PxCloneShape has been added to enable cloning of shapes.
- acquireReference() has been added to increment the reference count of shapes, materials, triangle meshes, convex meshes heightfields and cloth fabrics.
- The global filter shader data block can now be set through PxScene::setFilterShaderData().
- PxGpuLoadHook and PxSetPhysXGpuLoadHook has been added to support loading of GPU dll with a different name than the default.
- A new profile zone has been added for debug visualization.
- Changed:
- PxMathUtils.h has moved from include/common to include/foundation
- GPU support requires SM2.x (Fermi architecture, GeForce 400 series) or later hardware. SM1.x is no longer supported.
- Windows XP 64-bit and Windows Vista no longer support GPU acceleration. Windows XP 32-bit still supports GPU acceleration.
- PxTaskManager::createTaskManager requires error callback and does not accept SPU task manager.
- PxCreatePhysics and PxCreateBasePhysics now take an optional pointer to an physx::PxPvd instance.
- PxConstraintConnector::updatePvdProperties now takes an optional pointer to an physx::pvdsdk::PvdDataStream instance.
- PxInitExtensions now takes an optional pointer to an physx::PxPvd instance.
- Shared objects (triangle mesh, convex mesh, heightfield, material, shape, cloth fabric) no longer issue an eUSER_RELEASE event when their release() method is called
- PxBase::isReleasable() is now a property only of the type of an object, not the object state. In particular, isReleasable() returns true for PxShape objects whose only counted reference belongs to their owning actor.
- PxCollection::releaseObjects() now calls release() even on shapes whose only counted reference belongs to their owning actor. An optional parameter releaseExclusiveShapes, which defaults to true, has been added to this method to assist with common scenarios in which all shapes are created with the deprecated method PxRigidActor::createShape() or its replacement PxRigidActorExt::createExclusiveShape()
- Negative mesh scale is now supported for PxTriangleMeshGeometry. Negative scale corresponds to reflection and scale along the corresponding axis. In addition to reflection PhysX will flip the triangle normals.
- PxDelayLoadHook is now inherited from PxFoundationDelayLoadHook. PxFoundation dll and PxPvdSDK dll are now delay loaded inside the SDK, their names can be provided through the delay load hook.
- Removed:
- Sony Playstation 3 is not supported any longer. Any related APIs have been removed.
- Microsoft XBox 360 is not supported any longer. Any related APIs have been removed.
- Nintendo Wii U is not supported any longer. Any related APIs have been removed.
- Sony Playstation Vita is not supported any longer. Any related APIs have been removed.
- Visual Studio 2010 is not supported any longer.
- Microsoft Windows RT is not supported any longer.
- Google Android X86 is not supported any longer.
- PhysX Samples are not supported anymore except on Microsoft Windows.
- Linux 32-bit no longer support GPU acceleration. Linux 64-bit still supports GPU acceleration.
- Fixed:
- PxScene::setFlag() does now properly send error messages in CHECKED builds if a non-mutable scene flag gets passed in.
- Fixed a bug in force threshold based contact reports, which caused events to be lost.
- Fixed a bug in aggregates that led to a crash when rigid bodies are added to an aggregate after removing all rigid bodies from an aggregate. This only occurred with aggregates that were added to the scene and with rigid bodies that had shapes attached.
- Fixed a bug where non-breakable joints could break, leading to a crash.
- Fixed RepX load of kinematic rigid bodies with mesh shapes.
- Fixed a divide by zero bug in SIMD distanceSegmentTriangle function.
- Debug visualization for compound bounds (PxVisualizationParameter::eCOLLISION_COMPOUNDS) now works even when all the compounds' shapes have their debug viz flag (PxShapeFlag::eVISUALIZATION) disabled.
- Double-buffering now works properly for the debug visualization culling box.
- The default debug visualization culling box now works correctly with heightfields.
- Rare crashes in PxShape::setGeometry() and PxShape::getMaterials() have been fixed.
- A crash happening when doing an origin shift on a scene containing an empty aggregate has been fixed.
- Deprecated:
- PxSceneLimits::maxNbObjectsPerRegion has been deprecated. It is currently not used.
- PxComputeHeightFieldPenetration has a new signature, and the old one has been deprecated
- PxComputeMeshPenetration has been deprecated. Use PxComputeTriangleMeshPenetration.
- The PhysX particle feature has been deprecated.
- PxTolerancesScale::mass has been deprecated. It is currently not used.
- PxActorClientBehaviorFlag has been marked as deprecated and will be removed in future releases.
- Removed deprecated API:
- PxPairFlag::eCCD_LINEAR removed. Use PxPairFlag::eDETECT_CCD_CONTACT | PxPairFlag::eSOLVE_CONTACT instead.
- PxPairFlag::eRESOLVE_CONTACTS removed. Use PxPairFlag::eDETECT_DISCRETE_CONTACT | PxPairFlag::eSOLVE_CONTACT instead.
- PxTriangleMeshFlag::eHAS_16BIT_TRIANGLE_INDICE removed. Use PxTriangleMeshFlag::e16_BIT_INDICES instead.
- PxTriangleMeshFlag::eHAS_ADJACENCY_INFO removed. Use PxTriangleMeshFlag::eADJACENCY_INFO instead.
- PxTriangleMeshDesc::convexEdgeThreshold removed.
- PxSceneQueryFlag renamed to PxHitFlag.
- PxHitFlag::eDIRECT_SWEEP renamed to PxHitFlag::ePRECISE_SWEEP.
- PxHitFlag::eIMPACT renamed to PxHitFlag::ePOSITION.
- PxSceneQueryHitType renamed to PxQueryHitType.
- PxSceneQueryCache renamed to PxQueryCache.
- PxSceneQueryFilterFlag renamed to PxQueryFlag.
- PxSceneQueryFilterFlags renamed to PxQueryFlags.
- PxSceneQueryFilterData renamed to PxQueryFilterData.
- PxSceneQueryFilterCallback renamed to PxQueryFilterCallback.
- PxScene::raycastAll,PxScene::raycastSingle,PxScene::raycastAny replaced by PxScene::raycast.
- PxScene::overlapAll,PxScene::overlapAny replaced by PxScene::overlap.
- PxScene::sweepAll,PxScene::sweepSingle,PxScene::sweepAny replaced by PxScene::sweep.
- PxQuat, PxTranform, PxMat33, PxMat44 createIdentity and createZero removed. Use PxIdentity, PxZero in constructor.
- PxJointType::Enum, PxJoint::getType() removed. Use PxJointConcreteType instead.
- PxVisualDebugger removed. Use PxPvd instead.
- PxControllerFlag renamed to PxControllerCollisionFlag.
- PxCCTHit renamed to PxControllerHit.
- PxCCTNonWalkableMode renamed to PxControllerNonWalkableMode.
- PxControllerNonWalkableMode::eFORCE_SLIDING changed to PxControllerNonWalkableMode::ePREVENT_CLIMBING_AND_FORCE_SLIDING.
- PxControllerDesc::interactionMode, groupsBitmask, callback removed.
- PxController::setInteraction, getInteraction, setGroupsBitmask, getGroupsBitmask removed.
- PxControllerManager::createController no longer needs PxPhysics and PxScene.
- PxControllerFilters::mActiveGroups replaced with PxControllerFilters::mCCTFilterCallback.
- PxSerialization::createBinaryConverter(PxSerializationRegistry&) changed to PxSerialization::createBinaryConverter().
- PxConstraintDominance renamed to PxDominanceGroupPair.
- PxScene::flush renamed to PxScene::flushSimulation.
- PxClothFabric::getPhaseType removed.
- PxCollection::addRequired removed.
- PxRigidActor::createShape discontinued support for initial transform.
- PxShape::resetFiltering removed.
- PxParticleBase::resetFiltering removed.
- PxSceneDesc::meshContactMargin removed.
- PxSceneDesc::contactCorrelationDistance removed.
- Indexing operators taking signed integers in PxVec3, PxVec4, PxMat33, PxMat44, PxStrideIterator have been removed.
- PxHitFlag::ePOSITION, PxHitFlag::eDISTANCE and PxHitFlag::eNORMAL are now supported in PxMeshQuery::sweep function.
- PxClothFlag::eGPU renamed to PxClothFlag::eCUDA.
- PxActorTypeSelectionFlag/PxActorTypeSelectionFlags. Use PxActorTypeFlag/PxActorTypeFlags instead.
- PxConstraintFlag::eDEPRECATED_32_COMPATIBILITY flag removed.
PxShared
APEX 1.4 can now be used independently of PhysX. In order to achieve that a new shared code base was created called "PxShared". PhysX functionality such as common types, PxFoundation, the task infrastructure are now part of PxShared.
Rigid Bodies
- Added:
- An alternative simulation API has been introduced. This makes use of the following new functions: PsScene:collide(), PxScene::fetchCollision() and PxScene::advance(). Expected usage of these functions is illustrated in a new snippet SnippetSplitSim. This feature is also described in the manual in Section Simulation->SplitSim.
- PxSceneFlag::eDEPRECATED_TRIGGER_TRIGGER_REPORTS has been introduced to re-enable the legacy behavior of trigger shape pairs sending reports. This flag and the corresponding legacy behavior will be removed in version 4.
- The active actors feature has been added. See PxSceneFlag::eENABLE_ACTIVE_ACTORS.
- Functionality to compute and manipulate mass, inertia tensor and center of mass of objects has been exposed in the new class PxMassProperties.
- The option to exclude kinematics from the active actors/transforms list has been added. See PxSceneFlag::eEXCLUDE_KINEMATICS_FROM_ACTIVE_ACTORS for details.
- The integrated pose of dynamic rigid bodies can be accessed earlier in the pipeline through a new callback (see the API documentation for PxSimulationEventCallback::onAdvance() and PxRigidBodyFlag::eENABLE_POSE_INTEGRATION_PREVIEW for details).
- PxConvexMeshGeometryFlag::eTIGHT_BOUNDS has been added. See the user manual for details.
- New split fetchResults methods introduced, see PxScene::fetchResultsBegin(), PxScene::fetchResultsFinish() and PxScene::processCallbacks(). This is intended to permit the application to parallelize the event notification callbacks.
- New flag introduced to suppress updating scene query pruner trees inside fetchResults, see PxSceneFlag::eSUPPRESS_EAGER_SCENE_QUERY_REFIT. Instead, pruners will be updated during the next query.
- Introduced GPU rigid body simulation support, see PxSceneFlag::eENABLE_GPU_DYNAMICS. GPU rigid body support requires SM3.0 or later.
- Introduced a new GPU-accelerated broad phase. See PxBroadPhaseType::eGPU. GPU broad phase support requires SM3.0 or later.
- Introduced a new enhanced determinism mode. See PxSceneFlag::eENABLE_ENHANCED_DETERMINISM. This provides additional levels of rigid body simulation determinism at the cost of some performance.
- Introduced a new speculative contacts CCD approach. See PxRigidBodyFlag::eENABLE_SPECULATIVE_CCD. This is a slightly cheaper, less robust solution to PxRigidBodyFlag::eENABLE_CCD. There is no need to turn CCD on the scene using PxSceneFlag::eENABLE_CCD or enable PxPairFlag::eDETECT_CCD_CONTACT with this CCD mode as it functions as an extension to the discrete time-stepping scheme. This form of CCD can be enabled on kinematic actors.
- New "immediate mode" API has been added. This exposes access to the low-level contact generation and constraint solver, which allows the application to use these PhysX low-level components to perform its own simulations without needing to populate and simulate a PxScene.
- RigidDynamic lock flags added which permit the application to disallow rotation/translation of PxRigidDynamics around specific axes.
- Changed:
- PxRigidStatic objects can now have zero shapes while being part of a scene.
- PxContactPairFlag::eINTERNAL_HAS_FACE_INDICES is obsolete and has been removed.
- PxConstraintFlag::eDEPRECATED_32_COMPATIBILITY was previously only implemented for spring constraints. It is now correctly implemented for equality constraints.
- PxSceneFlag::eENABLE_PCM is enabled by default. This means PhysX uses PCM distance-based collision detection by default.
- Calls to PxRigidDynamic::setWakeCounter() following PxScene::collide() do now explicitly get taken into account in the subsequent call to PxScene::advance().
- Calls to contact modification callbacks can be made from multiple threads simultaneously. Therefore, modification callbacks should must be thread-safe.
- Unified heightfield contact generation is now the default heightfield contact generation approach. This approach offers similar performance and behavior to contact generation with triangle meshes. Unified heightfields have no thickness because contact genreation operates on triangles so objects may tunnel if CCD is not enabled.
- When unified heightfield contact generation is in use, the bounds of heightfield shapes are no longer extruded by "thickness".
- PxArticulationJoint::setTwistLimit and PxArticulationJoint::getTwistLimit were incorrectly documented with zLimit and yLimit in the wrong order. The behavior of both functions remains unchanged but now they are correctly documented with zLimit and yLimit in the correct order. This is simply a clarification of the existing function behavior.
- Removed:
- The deprecated class PxFindOverlapTriangleMeshUtil has been removed. Please use PxMeshOverlapUtil instead.
- The deprecated flag PxConstraintFlag::eREPORTING has been removed. Force reports are now always generated.
- The following deprecated simulation event flags have been removed: PxContactPairHeaderFlag::eDELETED_ACTOR_0, ::eDELETED_ACTOR_1, PxContactPairFlag::eDELETED_SHAPE_0, ::eDELETED_SHAPE_1, PxTriggerPairFlag::eDELETED_SHAPE_TRIGGER, ::eDELETED_SHAPE_OTHER. Please use the following flags instead: PxContactPairHeaderFlag::eREMOVED_ACTOR_0, ::eREMOVED_ACTOR_1, PxContactPairFlag::eREMOVED_SHAPE_0, ::eREMOVED_SHAPE_1, PxTriggerPairFlag::eREMOVED_SHAPE_TRIGGER, ::REMOVED_SHAPE_OTHER.
- The deprecated method PxPhysics::createHeightField(const PxHeightFieldDesc&) has been removed. Please use PxCooking::createHeightField(const PxHeightFieldDesc&, PxPhysicsInsertionCallback&) instead. The insertion callback can be obtained through PxPhysics::getPhysicsInsertionCallback().
- Deprecated:
- PxRigidActor::createShape() has been deprecated in favor of PxRigidActorExt::createExclusiveShape()
- Trigger notification events for trigger-trigger pairs have been deprecated and will be omitted by default. See the 3.4 migration guide for more information.
- The active transforms feature (PxSceneFlag::eENABLE_ACTIVETRANSFORMS) has been deprecated. Please use PxSceneFlag::eENABLE_ACTIVE_ACTORS instead.
- PxRegisterHeightFields has been modified to register unified heightfields, which are now the default implementation. PxRegisterLegacyHeightFields() has been added to register the legacy (deprecated) heightfield contact gen approach.
- PxHeightFieldDesc::thickness has been deprecated, as the new unified height field (see PxRegisterUnifiedHeightFields()) does not support thickness any longer.
- Fixed:
- The capsule-vs-heightfield contact generation had a rare bug where a vertical capsule standing exactly on a shared edge could fall through a mesh. This has been fixed.
- The bounding box of a shape was not always properly updated when the contact offset changed.
- Fixed a bug in the GJK sweep caused by lost precision in the math
- Calls to PxScene::shiftOrigin() can crash when PxRigidDynamic actors with PxActorFlag::eDISABLE_SIMULATION are present.
- Fixed a bug when PxShape::setMaterials was called with less materials than shape had before.
- Fixed a bug in CCD that could lead to a hang in the simulation.
- Fixed a bug in PCM mesh edge-edge check for the parallel case.
- Fixed a bug in CCD where contact modify callbacks could be called when the CCD did not detect a contact.
- Fixed a bug with applying external force/torque to a body in buffered insertion stage.
- A rare capsule-vs-mesh contact generation bug has been fixed.
- A rare crash due to an invalid assert in the MBP broad-phase has been fixed. This error only affected debug & checked builds; release & profile builds were unaffected.
Particles
- Gpu: Maxwell Optimizations
- The PhysX particle feature has been deprecated.
- Fixed particle collision issue with PxParticleBaseFlag::ePER_PARTICLE_COLLISION_CACHE_HINT (on by default). When particles collided against very dense triangle mesh areas an assert would be triggered or particles would leak through the triangle mesh. A workaround was to disable PxParticleBaseFlag::ePER_PARTICLE_COLLISION_CACHE_HINT.
Cloth
- Continuous collision (PxClothFlag::eSWEPT_CONTACT) behavior has been optimized to reduce cloth sticking to collision shape.
- Added air resistance feature (see PxCloth::setWindVelocity(PxVec3), PxCloth::setWindDrag(PxReal), PxCloth::setWindLift(PxReal), PxClothFabricDesc::nbTriangles, PxClothFabricDesc::triangles.
Serialization
- Fixed:
- PxTriangleMesh instances with adjacency information were not correctly initialized when created with cooking.createTriangleMesh. This caused a crash when converting the binary serialized triangle mesh data.
Character controller
- Added:
- Profile zones have been added for the character controller.
- Added PxControllerDesc::registerDeletionListener boolean defining if deletion listener for CCT should be registered.
- Fixed:
- Character controllers cannot stand on dynamic triggers anymore.
- Fixed: the capsule-vs-sphere sweep now returns a normal in the correct direction.
- Fixed a bug where CCT shapes initially overlapping static geometry would be moved down by an incorrect amount (the length of the step offset).
- The overlap recovery module now works against kinematic objects.
Vehicles
- Added:
- Anti-roll suspension has been added. The class PxVehicleAntiRollBar and the functions PxVehicleWheelsSimData::setAntiRollBar, PxVehicleWheelsSimData::getAntiRollBar, PxVehicleWheelsSimData::getNbAntiRollBars allow anti-roll bars to be configured and queried.
- A new function PxVehicleSuspensionSweeps has been introduced. This sweeps the PxShape that represents the wheel along the suspension direction. The hit planes resulting from the sweep are used as driving surfaces similar to those found by PxVehicleSuspensionRaycasts.
- A new snippet SnippetVehicleContactMod has been added. This snippet demonstrates how to use sweeps and contact modification to allow the wheel's volume to fully interact with the environment.
- A new function PxVehicleModifyWheelContacts has been introduced. This function analyses contact in the contact modification callback and rejects contact points that represent drivable surfaces.
- A new function PxVehicleSetMaxHitActorAcceleration has been introduced. This function sets the maximum acceleration experienced by a PxRigidDynamic that finds itself under the wheel of a vehicle.
- Changed:
- In checked build the functions PxVehicleDrive4W::allocate, PxVehicleDriveNW::allocate, PxVehicleDriveTank::allocate, PxVehicleNoDrive::allocate all return NULL and issue a warning if called before PxInitVehicleSDK.
- Tire width is no longer accounted for when computing the suspension compression from raycasts (PxVehicleSuspensionRaycasts). Instead, tire width is incorporated into the suspension compression arising from swept wheels (PxVehicleSuspensionSweeps). It is recommended to use PxVehicleSuspensionSweeps if there is a strict requirement that the inside and outside of the wheel don't visibly penetrate geometry.
- Fixed:
- Suspension force calculation now applies an extra force perpendicular to the spring travel direction. This force is calculated to satisfy the constraint that the sprung mass only has motion along the spring travel direction. This change mostly affects vehicles with suspension travel directions that are not vertical.
- PxVehicleWheelsSimData::mThresholdLongitudinalSpeed and PxVehicleWheelsSimData::mMinLongSlipDenominator are now given default values that reflect the length scale set in PxTolerancesScale.
- Unphysically large constraint forces were generated to resolve the suspension compression beyond its limit when the suspension direction and the hit normal under the wheel approach perpendicularity. This has been fixed so that the constraint force approaches zero as the angle between the hit normal and suspension direction approaches a right angle.
Scene queries
- Added:
- PxPruningStructure was introduced as an optimization structure to accelerate scene queries against large sets of newly added actors.
- PxScene::addActors(PxPruningStructure& ) has been added.
- PxMeshQuery::sweep now supports PxHitFlag::eMESH_ANY.
- PxHitFlag::eFACE_INDEX was introduced to reduce the perf cost for convex hull face index computation. In order to receive face index for sweeps against a convex hull, the flag PxHitFlag::eFACE_INDEX has to be set. Note that the face index can also be computed externally using the newly introduced method PxFindFaceIndex from the extensions library.
- PxGeometryQuery::isValid was added to check provided geometry validity.
- Changed:
- Raycasts against triangle meshes with PxHitFlag::eMESH_MULTIPLE flag now return all hits, code for discarding hits close to each other has been removed.
- PxPruningStructure enum has been renamed to PxPruningStructureType
- Deprecated:
- PxHitFlag::eDISTANCE has been deprecated.
- The batched query feature has been deprecated.
- Volume cache feature has been deprecated.
- Spatial index feature has been deprecated.
- Fixed:
- PxScene::sweep now properly implements PxHitFlag::eMESH_BOTH_SIDES (returned normal follows the same convention as for raycasts).
- Raycasts against heightfields now correctly return multiple hits when PxHitFlag::eMESH_MULTIPLE flag is used.
- PxSweepHit.faceIndex was computed incorrectly for sweep tests initially overlapping convex objects. The face index is now set to 0xffffffff in these cases.
- Convex vs convex sweeps in PxGeometryQuery::sweep() do now correctly return the face index of the convex mesh that gets passed in as parameter geom1 (and not the one from geom0).
- PxMeshQuery::sweep now supports PxHitFlag::eMESH_ANY.
- Deprecated definition PxSceneQueryHit has been removed. Please use PxQueryHit instead.
- PxGeometryQuery::computePenetration with convex geometries.
- On Android platforms, the eDYNAMIC_AABB_TREE pruning structure could pass already released objects into the scene query filter callback.
Cooking
- Added:
- PxTriangleMeshCookingResult added, cookTriangleMesh now does return additional PxTriangleMeshCookingResult. Please see the manual for more information.
- New convex hull generator added. It is now possible to switch between a new quickhull implementation and the legacy inflation based hull. Quickhull is the default algorithm.
- Convex hulls can now be directly inserted in PxPhysics as triangle meshes and height fields.
- A separate convex hull validation function has been added, it is now possible to create hulls without validation.
- Convex hull generator vertex limit has two different algorithms - plane shifting and OBB slicing.
- PxConvexFlag::eFAST_INERTIA_COMPUTATION added. When enabled, the inertia tensor is computed faster but with less precision.
- PxConvexFlag::eGPU_COMPATIBLE added. When enabled convex hulls are created with vertex limit set to 64 and vertex limit per face is 32.
- PxConvexFlag::eSHIFT_VERTICES added. When enabled input points are shifted to be around origin to improve computation stability.
- PxCookingParams::gaussMapLimit has been added. The limit can now be fully user-defined. Please refer to the migration guide and best practices sections of the manual.
- Changed:
- The performance of convex creation from polygons has been improved.
- Deprecated:
- The PxPlatform enum and the PxGetGaussMapVertexLimitForPlatform function have been deprecated.
- Removed:
- The deprecated flags PxMeshPreprocessingFlag::eREMOVE_UNREFERENCED_VERTICES and ::eREMOVE_DUPLICATED_TRIANGLES have been removed. Meshes get cleaned up by default unless PxMeshPreprocessingFlag::eDISABLE_CLEAN_MESH is set.
- Fixed:
- Mesh cooking was sometimes crashing for meshes with less than 4 triangles. This has been fixed.
- Cooking convex mesh from a flat input mesh produced incorrect large mesh.
Extensions
- Added:
- PxRaycastCCD has been added, to improve the visibility of the raycast-based CCD solution, which was previously only available in the Sample framework. This is a simpler and potentially cheaper alternative to the SDK's built-in continuous collision detection algorithm.
- PxFindFaceIndex has been added. The function computes the closest polygon on a convex mesh from a given hit point and direction.
- Changed:
- Memory churn of PxDefaultMemoryOutputStream has been reduced.
- The signatures for the PxComputeMeshPenetration and PxComputeHeightFieldPenetration functions have changed.
Profiling
- Changed:
- Profiling information is now available only in debug, checked and profile configuration.
- PxProfileZoneManager::createProfileZoneManager now takes PxAllocatorCallback as input parameter instead of PxFoundation.
Physx Visual Debugger
- PhysXVisualDebuggerSDK, PvdRuntime projects replaced with PxPvdSDK.
- PxPvdSceneClient::drawPoints now takes physx::pvdsdk::PvdDebugPoint as input parameter instead of PxDebugPoint. drawLines, drawTriangles, drawText and so on.
- The SDK's Debug visualization data is not sent to PVD anymore in ePROFILE mode.
- PxPvdSceneFlag::eTRANSMIT_CONTACTS (instead of PxPvdSceneFlag::eTRANSMIT_CONSTRAINTS) was sometimes incorrectly used to control the transmission of constraint-related data. This has been fixed. In addition, the PxPvdSceneFlag flags are now consistently ignored when PxPvdInstrumentationFlag::eDEBUG is not set.
Aggregates
Snippets
- Snippet profile zone has been removed.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android ARM & x86 (version 2.2 or later required for SDK, 2.3 or later required for samples)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver version R304 or later is required for GPU acceleration)
- Microsoft Windows RT (formerly known as Windows on ARM) (SDK only, no samples yet)
- Microsoft XBox One (SDK only, no samples)
- Microsoft XBox 360
- Nintendo Wii U
- Sony Playstation 3
- Sony Playstation 4 (SDK only, no samples)
- Sony Playstation Vita
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2012, 2013 and 2015
- Xcode 6.3
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.General
- Added support for Microsoft Visual Studio 2015 for Windows builds. Note that the GPU features are not currently supported with Visual Studio 2015.
- Removed support for Microsoft Visual Studio 2010
- Added support for Android platform API Level 16 and removed support for platform API Level 8 and 9.
- Fixed:
- Fixed a bug in aggregates that led to a crash when rigid bodies are added to an aggregate after removing all rigid bodies from an aggregate. This only occurred with aggregates that were added to the scene and with rigid bodies that had shapes attached.
Rigid Bodies
- Fixed:
- Creating a PxConstraint or using PxConstraint::setActors() could cause a crash in situations where one of the two newly connected actors was part of a previously simulated graph of connected constraints (with some of them having projection enabled, i.e., PxConstraintFlag::ePROJECT_TO_ACTOR0 or ::ePROJECT_TO_ACTOR1 set).
- PxD6Joint::getTwist(), getSwingY(), getSwingZ() returned incorrect angle values when the corresponding components of the quaternion were negative
- The thickness of a heightfield was incorrectly applied when the heightfield transform had a non-identity quaternion.
- PxD6Joint angular projection now functions correctly when there is one free axis and it is not the twist axis.
- The bounding box of a shape was not always properly updated when the contact offset changed.
- Fixed an edge case bug in PCM contact gen that could result in a QNAN reported as the contact point.
- Fixed an uninitialized variable bug in the GJK algorithm resulting in unintialized closest points reported.
- Fixed an edge case in which the constraint solver could access invalid memory in constraint partitioning.
- Fixed a bug in capsule vs heightfield contact generation that could produce incorrect penetration depths.
- Fixed a bug in Unified MTD code path which transformed the normal twice for the polygon index calculation.
- Fixed a crash in height fields when a capsule collided with an edge whose shared triangles had a hole material.
Serialization
- Fixed:
- PxTriangleMesh instances with adjacency information were not correctly initialized when created with cooking.createTriangleMesh. This caused a crash when converting the binary serialized triangle mesh data.
Scene Queries
- Fixed:
- Sweeps against scaled meshes.
Cooking
- Fixed:
- Mesh cooking was sometimes crashing for meshes with less than 4 triangles. This has been fixed.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android ARM & x86 (version 2.2 or later required for SDK, 2.3 or later required for samples)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver version R304 or later is required for GPU acceleration)
- Microsoft Windows RT (formerly known as Windows on ARM) (SDK only, no samples yet)
- Microsoft XBox One (SDK only, no samples)
- Microsoft XBox 360
- Nintendo Wii U
- Sony Playstation 3
- Sony Playstation 4 (SDK only, no samples)
- Sony Playstation Vita
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2010, 2012 and 2013
- Xcode 6.2
- The combination of releasing an actor and reassigning the actors of any affected joint so that the joint no longer references the released actor will lead to a crash if these operations are performed as buffered calls ie after simulate but before fetchResults.
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.General
- Added support for Microsoft Visual Studio 2013 and removed support for Microsoft Visual Studio 2008.
- Where applicable, mutexes on Unix flavored platforms now inherit priority to avoid priority inversion. This is a default behavior of Windows mutexes.
- Added arm64 support for the iOS version of the PhysX SDK.
- Removed samples from the iOS version of the PhysX SDK.
- Fixed:
- x64 samples running on Windows 8.
- Concurrent calls to PxPhysics::(un)registerDeletionListener() and PxPhysics::(un)registerDeletionListenerObjects() were not safe.
- PxGeometryQuery::pointDistance() could sometimes read uninitialized memory. This has been fixed.
- The SDK will not crash anymore if an object is involved in more than 65535 interactions. Instead, it will emit an error message and the additional interactions will be ignored.
- The PxPhysics::getMaterials() function did not work with a non-zero 'startIndex' parameter. This has been fixed.
- The following static Android libs are now packed into a single library called PhysX3: LowLevel, LowLevelCloth, PhysX3, PhysXProfileSDK, PhysXVisualDebuggerSDK, PvdRuntime, PxTask, SceneQuery and SimulationController. This fixes cyclic dependencies between these libraries.
- FSqrt(0), V4Sqrt(0), V4Length(0) and V3Length(0) will return 0 instead of QNan in Android and iOS.
Rigid Bodies
- Fixed:
- The Prismatic joint limit now acts correctly when its frame is not the identity.
- Calling PxRigidDynamic::setGlobalPose() with the autowake parameter set to true could result in an assert when the rigid body got released and had the PxActorFlag::eDISABLE_SIMULATION flag set.
- Added errors on misuse of PxRegister[Unified]Heightfields() function, and documented it.
- PxConstraint has a eDISABLE_PREPROCESSING flag and minResponseThreshold attribute to assist in stabilizing stiffness caused by infinite inertias or mass modification.
- Island manager performance in the presence of large numbers of kinematic actors has been improved.
- Using PxConstraint::setActors() or PxJoint::setActors() could cause a crash if the new actors resulted in the constraint/joint being removed from the scene.
- The functions PxRigidActor::setGlobalPose and PxShape::setLocalPose failed to update cached contact data internal to PhysX. This led to contacts being generated with transforms that were no longer valid. Similarly, contacts could be missed due to transforms being invalid. This defect affected the classes PxRigidStatic and PxRigidDynamic, though it was more immediately noticeable with the PxRigidStatic class.
- The sphere-vs-mesh contact generation code has been improved. It could previously generate wrong contacts. This has been fixed.
- The capsule-vs-convex contact generation had a bug that could lead to rare invalid contacts. This has been fixed.
- The mesh contact generation had a bug on PS3 that could lead to invalid contacts. This has been fixed.
- The PxRigidBody::clearForce() and PxRigidBody::clearTorque() were not properly decoupled - they both cleared the force and the torque. This has been fixed.
- Repeatedly calling PxRigidActor::attachShape and PxRigidActor::detachShape in between calls to simulate resulted in a memory leak. This has been fixed.
- Added:
- Enabling CCD on kinematic actors is now disallowed. When the kinematic flags are raised on a CCD-enabled actor, CCD is automatically disabled.
Particles
- Fixed:
- Consistency between GPU and CPU particles has been improved in the case of a spatial date structure overflow. The positions and velocities of particles that have the PxParticleFlag::eSPATIAL_DATA_STRUCTURE_OVERFLOW set are now updated also for CPU particles.
- Fixed potential deadlocks from occurring in the GPU particle kernels running on GM204 and above GPUs.
- Fixed fluid simulation crash on Titan X.
Cloth
- Fixed:
- A bug related to hitting the sphere or plane limit while world collision is enabled has been fixed.
- PxCloth::getParticleAccelerations() implementation was fixed for GPU cloth.
Character controller
- Fixed:
- Character controllers cannot stand on dynamic triggers anymore.
- Added:
- added lockingEnabled parameter to PxCreateControllerManager(), to support thread-safe release of objects while the character controller's move() routine is executing.
Scene Queries
- Fixed:
- Raycasts against triangle meshes with large scales potentionaly failed to register a hit.
- Overlaps against height field meshes with the flag eNO_BOUNDARY_EDGES potentionaly failed to register a hit.
- Sweeps using shapes modelled around a space significantly offset from their geometric center could fail to register a hit.
Vehicles
- Fixed:
- Sticky tire friction was unreliable with more than one substep but is now fixed. This defect led to vehicles sliding down slopes where the sticky friction should have held firm.
- An error in the jounce speed calculation that led to lift force at high forward speeds has been fixed. This defect led to instabilities at high speed.
- Improved documentation for PxVehicleSuspsensionData::mSprungMass.
Cooking
- Fixed:
- Convex meshes generated from PhysX 3.2 were not able to load inside PhysX 3.3.
Runtime
- Apple iOS
- Apple Mac OS X
- Google Android ARM & x86 (version 2.2 or later required for SDK, 2.3 or later required for samples)
- Linux (tested on Ubuntu)
- Microsoft Windows XP or later (NVIDIA Driver version R304 or later is required for GPU acceleration)
- Microsoft Windows RT (formerly known as Windows on ARM) (SDK only, no samples yet)
- Microsoft XBox One (SDK only, no samples)
- Microsoft XBox 360
- Nintendo Wii U
- Sony Playstation 3
- Sony Playstation 4 (SDK only, no samples)
- Sony Playstation Vita
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010, 2012 (Windows RT only)
- Xcode 4.6|5.0|5.0.1
- The combination of releasing an actor and reassigning the actors of any affected joint so that the joint no longer references the released actor will lead to a crash if these operations are performed as buffered calls ie after simulate but before fetchResults.
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.General
- Added:
- The PhysXCommon/64.dll, nvcuda.dll and PhysXUpdateLoader/64.dll are loaded and checked for the NVIDIA Corporation digital signature. The signature is expected on all NVIDIA Corporation provided dlls. The application will exit if the signature check fails.
- Added the PxDefaultBufferedProfiler extension for simplified SDK profile events extraction.
- PxSceneDesc::sanityBounds allows a bounding box to be set for validating the position coordinates of inserted or updated rigid actors and articulations.
- Linux: Now supports GPU PhysX.
- Added set/getRunProfiled() for PxDefaultCpuDispatcher to control profiling at task level.
- Android: Support for x86 based devices was added.
- PxProfileEventHandler::durationToNanoseconds() added. Translates event duration in timestamp (cycles) into nanoseconds.
- Added SnippetProfileZone to show how to retrieve profiling information.
- Added SnippetCustomJoint to better illustrate custom joint implementation, and removed SnippetExtension.
- Added SnippetStepper to demonstrate kinematic updates while substepping with tasks.
- Fixed:
- PxTask::runProfiled() now takes threadId as a parameter.
- The static pruner now issues a performance warning in debug and checked configurations when a tree rebuild occurs and the tree is not empty.
- PxSceneDesc::staticStructure now defaults to PxPruningStructure::eDYNAMIC_AABB_TREE.
- Linux: Switched to shared libraries.
- Profile zone event names changed to match function calls.
- Overlapping read/write errors will now issue a PxErrorCode::eINVALID_OPERATION rather than PxErrorCode::eDEBUG_INFO.
- Improved SnippetToleranceScale to better demonstrate the intended use case.
- Increased 126 characters limit for warnings on unix platforms, 1k limit on all platforms.
- PhysXCommon dll load within PhysX dll now respects dll name. Please see the manual's PhysXCommon DLL load section.
- Significant revision of the user's guide. Both structure and most content have been modified.
- Fixed search function of user's guide.
- Foundation math classes now have in-place arithmetic operators (+= etc).
- PxScene::checkResults() no longer counts as a read API method. Hence it is now possible to call this method in blocking mode without causing all writes to block until it returns.
- Deprecated:
- Indexing operators taking signed integers in PxVec3, PxVec4, PxMat33, PxMat44, PxStrideIterator have been deprecated.
Rigid Bodies
- Fixed:
- A minor bug in contact generation between capsules and triangle meshes has been fixed, reducing the amount of tunneling cases when CCD is not used.
- Discrete contact reports are no longer produced for pairs without PxPairFlag::eDETECT_DISCRETE_CONTACT raised in the filter shader. Previously, discrete contact generation would always have been performed regardless of the presence of the PxPairFlag::eDETECT_DISCRETE_CONTACT flag. This change potentially improves performance when using specific shapes for CCD-only collision, which would have previously generated discrtete contacts and then ignored them in the solver.
- Trigger reports are no longer produced for pairs without PxPairFlag::eDETECT_DISCRETE_CONTACT raised in the filter shader. PxPairFlag::eTRIGGER_DEFAULT has been modified to include the PxPairFlag::eDETECT_DISCRETE_CONTACT flag.
- An incorrect PX_DEPRECATED annotation on the default constructor for PxD6JointDrive has been removed.
- PxRigidDynamic::getKinematicTarget() returned a wrong transform if the actor center of mass pose was different from the actor global pose.
- Switching a PxRigidDynamic from dynamic to kinematic did not properly suppress existing pairs which turned into kinematic-kinematic or kinematic-static pairs.
- PxRigidDynamic::isSleeping() did not return the correct value on the frame the object got inserted if PxScene::addActors() was used and if the object was awake.
- PxSceneFlag::eDISABLE_CONTACT_CACHE now correctly works on PS3/SPU.
- If an object was added to the scene, put asleep and had overlap with another sleeping object then contact points for that pair might not have been reported once the object woke up.
- Potential crash when calling PxScene::resetFiltering() mulitple times for the same actor while the simulation was running has been fixed.
- Potential crash when using PxScene::resetFiltering() with shapes that were just added while the simulation was running has been fixed.
- A crash in MBP when deleting an object that just went out of broad-phase bounds has been fixed.
- A new drive mode has been added to drive articulation joints using rotation vectors.
- In contact and trigger reports, the shape references in PxTriggerPair and PxContactPair might not have been properly marked as removed shapes if the removal took place while the simulation was running.
- PxPairFlag::eSOLVE_CONTACT is now properly observed if the flag is not set on a contacting pair. A consequence of this fix is that sleeping actors will no longer be woken up due to contact or lost contact with awake actors if PxPairFlag::eSOLVE_CONTACT is not set for the pair. This also affects kinematic-kinematic pairs if one kinematic of the pair moves out of contact with the other. Behaviour is unaffected for any pair that has PxPairFlag::eSOLVE_CONTACT set.
- A memory leak with buffered shape and actor removal has been fixed. The memory leak occurred when the release of an actor's shapes was followed by the release of the actor, all in-between simulate() and fetchResults().
- A bug was fixed which caused incorrect force reports to sometimes be reported.
- Fixed a bug where incorrect normals were reported when using PCM contact gen.
- Fixed some issues with scaled convex hulls in the PCM contact gen code path.
- The accuracy of capsule collision code has been improved.
- An isValid() method has been added to constraints, that is satisfied if and only if at least one actor is a dynamic body or articulation link
- A check has been added to prevent constraint construction or modification that would leave the constraint invalid.
- In checked builds the PxScene methods addActor(), addActors(), addAggregate() and addCollection() will warn and return if an invalid constraint would be added to the scene
- Deprecated:
- The following flags have been renamed and deprecated because the name did not properly reflect the root cause.
- PxContactPairHeaderFlag
- eDELETED_ACTOR_0 (use eREMOVED_ACTOR_0 instead)
- eDELETED_ACTOR_1 (use eREMOVED_ACTOR_1 instead)
- PxContactPairFlag
- eDELETED_SHAPE_0 (use eREMOVED_SHAPE_0 instead)
- eDELETED_SHAPE_1 (use eREMOVED_SHAPE_1 instead)
- PxTriggerPairFlag
- eDELETED_SHAPE_TRIGGER (use eREMOVED_SHAPE_TRIGGER instead)
- eDELETED_SHAPE_OTHER (use eREMOVED_SHAPE_OTHER instead)
Vehicles
- Added:
- In profile config the functions PxVehicleUpdates, PxVehiclePostUpdates and PxVehicleSuspensionRaycasts are now tracked with profile events (provided that a PxProfileZoneManager instance was passed to PxCreatePhysics). These profile events can be viewed in profile view in pvd, where the names of the profile events match the names of the tracked vehicle functions.
- Fixed:
- In checked config PxVehicleDriveTank::allocate enforces the rule that only tanks with even numbers of wheels are legal and warns when this rule is broken.
- In checked config PxVehicleDrive4W::allocate enforces the rule that only vehicles with 4 wheels or more are legal and warns when this rule is broken.
- PxWheelQueryResult::localPose was incorrectly only set when the vehicle had a corresponding PxShape, as described by PxVehicleWheelsSimData::setWheelShapeMapping. The localPose is now properly set independent of the mapping between wheel and shape.
- Wheels resting on moving actors now properly observe the relative speed of the two actors when their relative speed is small. This fixes a bug where at small relative speeds the velocity of the other actor was assumed to be zero.
- Repx serialization failed to serialize PxVehicleWheelsSimData::setMinLongSlipDenominator, PxVehicleWheelsSimData::setSubStepCount, PxVehicleWheelsSimData::disableWheel, PxVehicleWheelsSimData::enableWheel and the number of entries in the engine torque curve. These have now been fixed.
- PxVehicleConcreteType used for vehicle serialization is now in the public API and has been moved to PxVehicleSDK.h.
- Very small longitudinal and lateral slip angles could lead to numerical instabilities in some circumstances. A threshold has been introduced to reject very small slip angles by setting them to zero when they are below the threshold.
- Vehicles now account for rigid bodies that have been given a zero inertia component in order to lock rotation around the corresponding axis.
- Fixed a bug where the sticky wheel constraints sometimes didn't function correctly.
Cloth
- Fixed:
- The version number written to the fabric stream changed from PX_PHYSICS_VERSION to 1. A fabric can be created from streams written with version 3.3.0 and later until the stream format changes. Previously, the version of the producer and the consumer of the stream needed to match.
- GPU cloth friction against convexes has been fixed.
- A crash resulting from deleting a shape in proximity of a cloth with scene collision enabled has been fixed.
Scene Queries
- Fixed:
- PxMeshQuery::sweep now respects PxHitFlag::eMESH_BOTH_SIDES, and supports double-sided input triangles.
- PxRigidBodyExt::linearSweepSingle and PxRigidBodyExt::linearSweepMultiple now correctly use query filter data instead of simulation filter data if filter data is not provided.
- The spec for raycasts whose origin is located inside a solid object (sphere, box, capsule, convex) has changed back to what it was in 3.3.0. It was accidentally changed in 3.3.1. See the manual for details.
- Convex sweeps against heightfields worked only when the heightfield had the identity transform. This has now been fixed to support arbitrary transforms again.
Cooking
- Added:
- Using PxMeshPreprocessingFlag::eFORCE_32BIT_INDICES will always cook meshes with 32-bit triangle indices.
- Fixed:
- Convex hull cooking fix. Some input points could be ignored during cooking, fixed.
- Inserted triangle meshes now respect 16 bit indices flag.
Geometry
- Fixed:
- PxHeightFieldDesc::thickness is now limited to [-PX_MAX_BOUNDS_EXTENTS, PX_MAX_BOUNDS_EXTENTS range]. (Previously unbounded).
Particles
- Fixed:
- Setting PxParticleReadDataFlag::eREST_OFFSET_BUFFER on a PxParticleBase instance that was not created with the per particle rest offset option (see PxPhysics::createParticleSystem, PxPhysics::createParticleFluid and PxParticleBaseFlag::ePER_PARTICLE_REST_OFFSET) is not supported. The unsupported configuration may have resulted in crashes. The SDK now rejects this configuration on calling PxParticleBase::setParticleBaseFlag and issues an appropriate warning to the error stream.
- Performance improvements on Kepler and above GPUs running SPH.
- In rare cases particle systems could access released memory when all interactions with a rigid body shape were lost.
Serialization
- Fixed:
- PxBinaryConverter::convert potentially failed in checked mode with allocators that don't set 0xcd pattern. This has been fixed now.
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 version R304 or later is required for GPU acceleration)
- Microsoft Windows RT (formerly known as Windows on ARM) (SDK only, no samples yet)
- Microsoft XBox One
- Microsoft XBox 360
- Nintendo Wii U
- Sony Playstation 3
- Sony Playstation 4 (SDK only, no samples)
- Sony Playstation Vita
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010, 2012 (Windows RT only)
- Xcode 4.6|5.0|5.0.1
Note: Platform specific issues and changes can be found in the readme file of the corresponding platform.General
- Added:
- The friction model can now be changed after scene instantiation with PxScene::setFrictionType. The friction model can also be queried with PxScene::getFrictionType.
- Changed:
- PxDefaultSimulationFilterShader now supports particles and cloth as well.
- PxSimulationFilterCallback: the provided actor and shape pointers are now defined as const. Note: this is no behavior change, it was never allowed to write to those objects from within the callback.
- The PxTriangleMeshFlag::eHAS_16BIT_TRIANGLE_INDICES and PxTriangleMeshFlag::eHAS_ADJACENCY_INFO enums have been deprecated. Please use PxTriangleMeshFlag::e16_BIT_INDICES and PxTriangleMeshFlag::eADJACENCY_INFO instead.
- Removed following functions from the API for platforms which do not support CUDA: PxGetSuggestedCudaDeviceOrdinal, PxCreateCudaContextManager, PxLoadPhysxGPUModule.
- Fixed:
- Fixed concurrency issue on windows. Calling PxScene::simulate on multiple scenes concurrently may have caused a deadlock. This only happened if the scenes shared a single PxCpuDispatcher and the dispatcher was configured to use one worker thread only.
Rigid Bodies
- Added:
- The projection direction for constraints can now be specified through the flags PxConstraintFlag::ePROJECT_TO_ACTOR0, ::ePROJECT_TO_ACTOR1.
- A parameter has been added to PxRigidBodyExt::updateMassAndInertia() and ::setMassAndUpdateInertia() to optionally take non-simulation shapes into account for computing the mass and the inertia tensor of a rigid body.
- It is now possible to retrieve additional information in contact reports. See the API documentation of PxContactPairHeader.extraDataStream, PxPairFlag::ePRE_SOLVER_VELOCITY, ::ePOST_SOLVER_VELOCITY, ::eCONTACT_EVENT_POSE for details.
- The contact report system has been extended to support multiple notification events if the same two objects collide multiple times in multipass CCD scenarios. See the API documentation of PxPairFlag::eNOTIFY_TOUCH_CCD for details.
- Changed:
- If touching objects were added to the scene asleep and one of them got woken up, then all contact pairs of the touching objects which contained a static rigid body were resolved with a delay of one simulation step. Now these pairs get resolved without delay in the next simulation step.
- If touching objects were added to the scene asleep, eNOTIFY_TOUCH_FOUND contact reports were sent out for pairs of dynamic rigid bodies if requested. These reports will not be sent at the end of the simulation step after insertion anymore but rather at the end of the simulation step after the touching objects have been woken up.
- Rigid bodies now permit zeroes in passed to setMass and setMassSpaceInertiaTensor. Zeroes are interpreted to indicate infinite mass or infinite moment of inertia around a given principal axis of inertia. Previously, zeroes were illegal values to these methods. Note that zeroes are still illegal for instances of PxArticulationLink.
- Fixed:
- Reading back the kinematic target in the PxSimulationEventCallback::onContact() callback through PxRigidDynamic::getKinematicTarget() will now work.
- Contact reports are no longer generated for contact pairs involving two sleeping kinematic actors or for pairs involving a sleeping kinematic actor in contact with a static actor. This fixes a bug that was introduced in 3.3.0.
- No PxPairFlag::eNOTIFY_TOUCH_LOST event was sent in contact reports if a pair of sleeping rigid bodies got woken up after setting the pose on one of them (with autowake parameter set to false) and if the bounding boxes of the two objects still overlapped.
- No PxPairFlag::eNOTIFY_TOUCH_PERSISTS event was sent in contact reports during the first simulation step after a pair of sleeping rigid bodies got woken up.
- The inertia tensor computation for convex meshes has been adjusted to be more stable in certain cases where floating point precision issues arise. Furthermore, a fallback routine has been added to use an approximation if the diagonalized inertia tensor still ends up with invalid entries.
- PxRigidBody::clearForce() and ::clearTorque() did not properly clear the respective properties if used with force mode PxForceMode::eIMPULES or PxForceMode::eVELOCITY_CHANGE.
- Setting PxSceneFlag::eENABLE_KINEMATIC_STATIC_PAIRS also enabled PxSceneFlag::eENABLE_KINEMATIC_PAIRS internally and vice versa.
- Missing validation checks for some joint set() methods have been added. Similarly to other API calls, when validation fails in the checked build PhysX will report an error and return without updating the joint.
- Switching a kinematic rigid body to dynamic could lead to a crash in a subsequent simulation step, if the kinematic was moved and connected to another kinematic through a breakable PxConstraint/PxJoint.
- Deleting a breakable PxConstraint/PxJoint while the simulation is running could lead to a crash if the PxConstraint/PxJoint broke in the same simulation step.
- A bug in the PxScene::addBroadPhaseRegion() function, that could lead to a crash when using 'populateRegion=true', has been fixed.
Particles
- Added:
- Added triangle mesh cache statistics for GPU particles. Triangle mesh cache statistics are also captured by PVD as part of simulation statistics.
- Added new option to query approximate particle velocities relative to colliding rigid actors. This can be used for debris rotation on moving objects. Enable with PxParticleReadDataFlag::eCOLLISION_VELOCITY_BUFFER and read from PxParticleReadData::collisionVelocityBuffer.
- Fixed:
- Fixed a bug which might lead to GPU particle pipeline failures on low end GPUs.
- Enabled warning when a spatial data structure overflow occured for GPU particles (see the guide for more information).
Cloth
- Fixed:
- PxFilterFlag::eSUPPRESS was ignored for collision pairs that involved a PxCloth object. This does work now, however, please note that PxFilterFlag::eSUPPRESS is treated as PxFilterFlag::eKILL for pairs with a PxCloth object.
Serialization
- Added:
- Support for binary compatibility between different sdk releases and patches has been added (PX_BINARY_SERIAL_VERSION). The current sdk version can load binary data of the older sdk versions listed in the documentation of PX_BINARY_SERIAL_VERSION.
- SnippetLoadCollection has been added. It illustrates loading repx or binary serialized collections and instatiating the objects in a scene. It only compiles and runs on authoring platforms (windows, osx and linux).
- SnippetConvert has been added. It illustrates how to convert PhysX 3 serialized binary files from one platform to another. It only compiles and runs on authoring platforms (windows, osx and linux).
- Deprecated:
- Method PxCollection::addRequire is deprecated, use PxCollection::add and PxCollection::contains instead.
- Method PxCollection::createBinaryConverter(PxSerializationRegistry&) is deprecated, use PxCollection::createBinaryConverter() instead.
Character controller
- Added:
- PxControllerManager::setPreventVerticalSlidingAgainstCeiling() has been added, to control the behaviour of characters against ceilings.
Vehicles
- Added:
- Vehicles may now be updated concurrently through the addition of a new function PxVehiclePostUpdates and passing a PxVehicleConcurrentUpdateData array to PxVehicleupdates.
- A new snippet SnippetVehicleMultiThreading has been added to show the operation of concurrent vehicle updates.
- PxVehicleDriveTankControl and PxVehicleDriveTankControlModel now have improved doxy comments.
- A new function PxVehicleUpdateCMassLocalPose has been added to help update a vehicle after the center of mass pose of the vehicle's actor has been modified.
- PxWheelQueryResult now records the local pose of the wheel.
- Changed:
- PxVehcicleDrive4W::setup now tests that at least 4 wheels are specified and returns wtih an error message if numWheels < 4. It is only possible to create a PxVehicleDrive4W instance with less than 4 active wheels by disabling wheels after instantiating a 4-wheeled car.
- In debug and checked build configurations PxVehicleComputeSprungMasses now reports whether the sprung masses were successfully computed. Warnings are passed to the error stream in checked configuration if the function does not complete successfully. Apart from error checking the operation of the function is unchanged.
- Fixed:
- The doxy comment describing the default setting for PxVehicleWheelsSimData::setWheelShapeMapping was incorrect. This now correctly documents the default mapping as PxVehicleWheelsSimData::setWheelShapeMapping(i,i).
- Suspensions raycasts that start inside geometry are ignored for all geometry types. Prior to this release this was true for all geometry types except for heightfields and triangle meshes. This inconsistency has now been fixed so that all geometry types obey the rule that suspension raycasts starting inside geometry are neglected.
Scene queries
- Added:
- Added eMTD flag. If an initial overlap is detected, this flag triggers the sweep to compute the MTD (Minimum Translation Direction), which can be used to de-penetrate the query shape from the shape with which an initial overlap was found. In this case, the distance reported will be negative. This negative distance can be used to scale the reported normal to generate the translation vector required to de-penetrate the query shape.
- Added PxTriangle::pointFromUV.
- Fixed:
- A rare ray-capsule intersection bug has been fixed, when the capsule's height is close to zero.
- A capsule-capsule distance bug has been fixed, when the tested capsules are large and parallel.
- Raycasts against heightfields now correctly return triangle UVs.
- Changed:
- PxBatchQuery::raycast, overlap and sweep previously had an incorrect const modifier indicating that these methods were safe to call from multiple threads simultaneously. This has been removed. Multiple batch queries can still be executed (via PxBatchQuery::execute()) in parallel.
Cooking
- Added:
- PxCookingParams::meshSizePerformanceTradeOff parameter can be used to make the mesh smaller at the expense of reduced simulation and scene query performance (or the other way around).
- PxCookingParams::meshCookingHint parameter can be used to specify mesh hierarchy construction preference (cooking speed or simulation speed).
- PxMeshPreprocessingFlag::eDISABLE_CLEAN_MESH disables mesh clean proces. Vertices duplicities are not searched, huge triangles test is not done. Vertices welding is not done. Does speed up the cooking.
- PxMeshPreprocessingFlag::eDISABLE_ACTIVE_EDGES_PRECOMPUTE disables vertex edge precomputation. Makes cooking faster but slow up contact generation.
- PxPhysicsInsertionCallback adds the support for inserting cooked triangle mesh or height field directly into PxPhysics without the stream serialization.
- PxCooking::createTriangleMesh creates triangle mesh and inserts it to PxPhysics without using the stream serialization.
- PxCooking::createHeightField creates height field and inserts it to PxPhysics without using the stream serialization.
- PxCooking::validateTriangleMesh validates mesh in separate function before it can be cooked without the mesh cleaning.
- PxConvexFlag::eCHECK_ZERO_AREA_TRIANGLES checks and removes almost zero-area triangles during the computation of the convex hull.
- PxCookingParams::areaTestEpsilon triangle area size was added. This epsilon is used for the zero-area test in the computation of the convex hull.
- Changed:
- PxCooking::computeHullPolygons does now return also vertices used by the polygons. Redundant vertices are removed.
- PxCooking::cookConvexMesh now returns a PxConvexMeshCookingResult::Enum with additional error information.
Aggregates
- Added:
- PxSceneLimits has a new member variable maxNbAggregates. Setting this value to a good approximation of the peak number of aggregates will avoid the need for internal run-time allocations that can occur when aggregates are added to the scene.
- Fixed:
- PxScene::removeActor will auotmatically remove that actor from all PxAggregate instances that contain the removed actor. Likewise, PxScene::removeArticulation will automatically remove all articulation links from all relevant aggregates. This fix upholds the rule that all actors of an aggregate must be in same scene.
- The condition of an internal assert that triggered after calling PxScene::addAggregate has been corrected. This assert triggered when an aggregate was added to the scene after removal of all aggregates from the scene. The operation of the function PxScene::addAggregate is unchanged apart from the asserted condtition.
Samples
- Changed:
- Starting with Release 302 drivers, application developers can direct the Optimus driver at runtime to use the High Performance Graphics to render any application - even those applications for which there is no existing application profile. The samples now make use of this feature to enable High Performance Graphics by default.
- Added PhysXDevice/64.dll to the PC packages. See the Windows readme for details.
- Added support for the NVIDIA Kepler GPU architecture.
- Added support for the Nintendo Wii U console.
- Added support for Windows 8 Modern UI applications (ARM and x86).
- Ported our SIMD library to the ARM NEON architecture.
- Multi Box Pruning (MBP) is offered as an alternative broad phase algorithm to Sweep And Prune (SAP). MBP shows improved performance when most objects are moving or when inserting large numbers of objects. SAP can be faster in scenarios with few moving (many sleeping) objects.
- Significant performance and stability optimizations for rigid body solver.
- New function to compute the minimum translational distance and direction to separate two overlapping geometry objects.
- New 'PCM' contact generation mode which is often faster and more robust than the still available legacy path.
- Improved performance of scene queries and contact reports.
- Improved behavior and performance of Continuous Collision Detection (CCD).
- Reduced memory footprint of rigid body classes.
- Added support for sharing shapes among rigid bodies.
- Significantly improved cloth behavior and GPU performance.
- Added support for cloth colliding against itself, other cloth instances, and scene geometry.
- Improved useability of binary and xml serialization.
- Memory can be saved for objects that do not participate in the simulation and are used for scene queries only. For details see the new flag PxActorFlag::eDISABLE_SIMULATION.
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 version R304 or later is required for GPU acceleration)
- Microsoft Windows RT (formerly known as Windows on ARM) (SDK only, no samples yet)
- Microsoft XBox One
- Microsoft XBox 360
- Nintendo Wii U
- Sony Playstation 3
- Sony Playstation 4 (SDK only, no samples yet)
- Sony Playstation Vita
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010, 2012 (Windows RT/PS4/XboxOne only)
- Xcode 4.6
- PxSimulationOrder::eSOLVE_COLLIDE feature is not implemented in this release. Calls to PxScene::solve() and PxScene::collide() will be ignored with a warning added to the error stream
- Reading back the kinematic target through PxRigidDynamic::getKinematicTarget() in the PxSimulationEventCallback::onContact() callback will fail.
- Cloth self-collision without rest position is not supported on GPUs with SM capability lower than 2.0.
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:
The previous names have been retained for compatibility but are deprecated.
- 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
- 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.
Supported PlatformsUnchanged from from 3.2.3 except:Development
- Upgraded to Xcode 4.6
Known Issues And LimitationsUnchanged 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.
Supported PlatformsRuntime
- 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
Known Issues And LimitationsUnchanged 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.
Supported PlatformsRuntime
- 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
Known Issues And LimitationsGeneral
- 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 PlatformsUnchanged from from 3.2.
Known Issues And LimitationsUnchanged 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.
Supported PlatformsRuntime
- 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
Known Issues And LimitationsBinary 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 LimitationsUnchanged 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.
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 (tested on Ubuntu)
- Mac OS X
Development
- Microsoft Windows XP or later
- Microsoft Visual Studio 2008, 2010
- Xcode 3
Known Issues And LimitationsUnchanged 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
Known Issues And LimitationsGeneral
- 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
Known Issues And LimitationsRigid 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-2018 NVIDIA Corporation, 2701 San Thomas Expressway, Santa Clara, CA 95050 U.S.A. All rights reserved. www.nvidia.com