NVIDIA has revealed PhysX SDK 3.2 Beta-1, thus providing early public access to next general release of PhysX 3, enhanced with many features and improvements – as a Christmas present, we suppose.
Update [25.01.2012]: PhysX SDK 3.2 Beta-2 is available
Update #2 [20.03.2012]: SDK 3.2 Beta-3 is released
Update #3 [10.05.2012]: Final release is available
Binary SDKs are available for Windows PC, Linux, Mac OSX and Android platforms.
PhysX SDK 3.2 Beta-1/Beta-2/Beta-3 can be downloaded at Developer Support Center.
If you are experiencing trouble with registration of PhysX Developer account, please refer to our registration guide.
PhysX SDK 3.2 Beta-1/Beta-2/Beta-3 Release Notes:
- Three new sample applications: SampleCharacterCloth (character with cloth cape and cloth flags), SampleBridges (character controller walking on dynamic bridges and moving platforms), SampleGravity (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.
- [Beta-3] Contact data block allocation now provides statistics on usage and max usage.
- [Beta-3] On all platforms except PS3, contact data blocks can be progressively allocated.
- [Beta-3] Changed the functions PxPhysics::releaseUserReferences(), releaseCollection(), addCollection() and releaseCollected() to now take a reference rather than a pointer.
- [Beta-3] Default implementations of memory and file streams added in PxDefaultStreams.h
- [Beta-3] Renamed PxPhysics::getMetaData() to ::PxGetSDKMetaData().
- [Beta-2] Platform conversion for serialized data has been moved from the ConvX command line tool to the PxBinaryConverter interface in the cooking library.
- [Beta-2] Documentation has been updated.
- [Beta-3] Added migration guide page from 3.1 to 3.2 to user’s guide.
- [Beta-2] Samples have been updated.
- [Beta-2] Various bug fixes.
- Introduced a new contact generation mode, see eENABLE_PCM.
Persistent Contact Manifold (PCM) is a fully distance-based collision detection system, which uses the Gilbert-Johnson-Keerthi algorithm (GJK) and the Expanding Polytope Algorithm (EPA) to calculate one contact at the point of deepest penetration. It then uses an incremental method to build up a contact manifold by recycling contacts from past frames, accumulating up to four contacts per frame.
This approach is quite efficient in terms of performance and memory. However, it can reduce stacking stability when simulating with large timesteps, tall stacks and small objects. As this approach is distance-based, it will generate the correct contact points for arbitrary contact offsets/rest offsets.
- Introduced two new friction simulation modes, see eENABLE_ONE_DIRECTIONAL_FRICTION and eENABLE_TWO_DIRECTIONAL_FRICTION.
The Coulomb friction model is based on the Coulomb laws of friction. It is less efficient than the default friction model and it can require more solver iterations to achieve stable stacking behavior. However, its friction behaviors are much closer to the analytical results than the default friction model so could be preferable for applications where accurate friction behavior is important.
The Coulomb model comes in two variants, one-directional and two-directional. The one-directional approach is similar in terms of workload to the default friction model and can be stable at similar solver iteration counts. Its behavior is closer to the analytical results but diverges slightly. The one-directional approach is a simplification of the full Coulomb model, in which the friction for a given point of contact is reduced to a one-directional friction model.
- 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.
- [Beta-3] 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.
- 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.
- [Beta-3] Added support for kinematic triangle meshes, planes and heighfields.
- [Beta-3]: Dynamic AABBTree has been set as the default dynamic pruning structure.
- 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.
- 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.
- 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.
What we removed:
- Deformables have been removed. Use the optimized solution for clothing simulation instead (see documentation on PxCloth for details).
- PxSweepCache is deprecated.
- PVD is no longer enabled in the release build.
- Removed anisotropic friction.
- Removed the CCD mode eSWEPT_CONTACT_PAIRS.
- PxActorDesc has been removed.
- [Beta-2] The ConvX tool has been removed.
- [Beta-3] Removed empty default implementations of functions in PxSimulationEventCallback for consistency.
- [Beta-3] Octree and quadtree pruning structures have been removed.
- [Beta-3] PxScene.overlapAny has been removed. overlapMultiple with maxNumHits 1 does the same.
- [Beta-3] PxScene::getActors() might not work properly when the startIndex parameter is used.
- [Beta-3] Improved the doc-comment of PxConvexMesh::getMassInformation().
- [Beta-3] RepX instantiation can lose all internal references when addOriginalIdsToObjectMap is false.
- [Beta-3] PxSetGroup crashed when used on a compound.
- [Beta-3] PhysXCommon.dll can be delay loaded.
- [Beta-3] ContactReportStream can now handle huge report numbers and size (resize-able flag) can be set in PxSceneDesc.h.
- [Beta-3] Fixed assert in sweep tests.
- [Beta-3] Concurrent read/write operations during a PxScene::fetchResults() call were not detected properly and no warning message got sent in checked builds.