PhysX SDK 3.2.4 release is available

PhysX SDK 3.2.4 release is availablenVidia released a  new bug-fixing release of the PhysX SDK 3.x. PhysX SDK 3.x represents a significant rewrite of the PhysX engine. This rewrite involved extensive changes to the API that effectively results in a new PhysX engine rather than a chart of changes based on its predecessor version.  The various platforms versions are generated from a unified code base, further differentiating it from version 2.x.  In addition to a new modular design, considerable legacy clutter has been removed. Collectively these changes have resulted in a physics SDK designed to facilitate easier on-going maintenance, enable simpler ports to emerging gaming platforms, and the addition of new features and capabilities. PhysX SDK 3.0 was designed to be competitive on current-gen consoles and anticipates devices with even less system resources.

 

 

These architectural changes include but are not limited to better overall memory management, improvements to cache efficiency, cross-platform SIMD implementations, intelligent SPU usage on PS3, multi-threading across multiple cores, and AltiVec/VMX optimizations on Xbox 360.

  • 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.

PhysX SDK 3.0 features new Task Manager feature that supports two Dispatchers (for PC both CPU and GPU Dispatchers are available) that are responsible for managing task dependencies and distributing tasks across as many worker threads as the developer defines. This feature allows the developer to balance the proper mix of resources to achieve the desired performance level. PhysX SDK 3.0 also incorporates a SolverBatch that supports multiple threads for Rigid Bodies and Deformable that are using different solver islands.  Additionally, narrow phase computation can use this feature to run multiple threads.

The particles and particle fluids pipeline currently provides tasks to run the following in parallel (PC/Xbox 360):

  • Multiple particle system instances (for collision and SPH phases)
  • Multiple work units for collision per particle system instance
  • Multiple work units for SPH per particle fluid instance

For PS3 there is additional parallelization available for shape generation, which isn’t implemented yet for PC/Xbox 360. However, it doesn’t provide the parallelization across multiple particle system instances.

A reworked vehicle model now includes components such as engine, clutch, gears, autobox, differential, wheels, tyres, suspensions and chassis, in comparison to simplified suspension/wheel/tire NXWheelShape class in PhysX SDK 2.x.  One of the interesting aspects of the new model is the ability to create tire types, drivable surface types, and specify the friction used in the vehicle simulator to combine different tire and drivable surface types. Like PhysX SDK 2.x, the vehicle model exists outside of the PhysX Core and so it does not have to be compiled into a game, to reduce executable size, if not needed. Source code is provided to facilitate developer customization.

  • 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.

Another changes in PhysX SDK 3.x

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.

Some of the fixes in PhysX SDK 3.x

General

  • 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.

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.

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.

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.

More information at: physxinfo

Popular