<h2style="text-align: center;">28<sup>th</sup> September 2006</h2>
<pstyle="text-align: center;"> </p>
<h2>What's New In AGEIA PhysX 2.6 </h2>
<blockquote>
<h4>Hardware/Software Rigid Bodies </h4>
<ul>
<li>There is a new joint projection mode, NX_JPM_LINEAR_MINDIST, that uses only
linear projection for improved performance. </li>
<li>A new stack overflow protection scheme is in place, where too-large stack allocations are replaced by heap allocations when needed. If heap allocations are suddenly causing a slowdown, the threshold for this fallback can be set using NxFoundationSDK::setAllocaThreshold().</li>
<li>Fixed: Raycasts missing on the exact boundary of a heightfield.</li>
<li> Fixed: Filtering does not work correctly with HSM.</li>
<li>Fixed (SW): DistanceJoint will not work properly when attachment points coincide in worldspace.</li>
<li>Fixed: No contacts generated in Capsule-Capsule collision when capsule segments intersect.</li>
<li>Fixed: No contacts generated in capsule-convex collision when capsule penetrates convex.</li>
<li>Fixed: CCD collision response in FW scenes. </li>
</ul>
<h4>Hardware Fluids</h4>
<ul>
<li>Fluid collision improvements including support for a
collision distance between fluid particles and rigid
body geometry which is maintained during the
simulation
(NxFluidDesc::collisionDistanceMutliplier).</li>
<li>A new method, NxScene::cookFluidMeshHotspot, allows
for preparing static mesh, height field and convex
shapes for fluid collision, preventing on-the-fly
cooking.</li>
<li>More information about particles including particle
flags, IDs and notifications for particle
creations/deletions.</li>
<li>New runtime switches for degrading simulation
fidelity on heavy system load.</li>
<li> Fluids emitters are now attached to shapes not actors. </li>
</ul>
<h4>Hardware/Software Cloth</h4>
<ul>
<li>Cloth metal - a combination of deformable cloth and
nondeformable rigid body, useful for sheet metal and
similar objects. This mode can be activated by
attaching a piece of cloth to a rigid body via the
NxCloth::attachToCore method.</li>
<li>Cloth self collision is now implemented and can be activated by means of
NxClothFlag::NX_CLF_SELFCOLLISION.</li>
</ul>
<h4>Hardware Scene Manager(HSM)</h4>
<ul>
<li>The HSM now uses Compartments, allowing the utilization of multiple PhysX cards
in future versions.</li>
<li>The interface of the HSM has been completely revised.</li>
</ul>
<h4>Performance</h4>
<ul>
<li>The performance of some scenes with many kinematic actors and/or a lot of broadphase activity has been improved.</li>
<li>Fluid collision performance improved, especially for dynamic convex shapes.</li>
</ul>
<h4>Serialization</h4>
<ul>
<li>A new serialization library has been introduced called NxuStream</li>
<li>This is a source code library with an easy to use interface.</li>
<li>SampleAssetExport and SampleSceneExport demonstrate how to use this library.</li>
<li>It is now possible to serialize to and from an XML file format, as a high speed binary file, and in COLLADA 1.4.1 physics.</li>
</ul>
<h4>Documentation</h4>
<ul>
<li>Many small corrections and fixes for the user guide and API
reference.</li>
<li>Information in the User's Guide pertaining to hardware has been concentrated in one place.</li>
<li>User guide documentation for:
<ul>
<li>Compartments</li>
<li>Training programs</li>
<li>Cloth Metal</li>
</ul>
</li>
</ul>
<h4>Installer</h4>
<ul>
<li>The client installers have been replaced by a single client installer. This installer is based on the MSI/WISE installer which was distributed in the past. There is no longer an NSIS based installer.</li>
</ul>
</blockquote>
<h2>Supported Platforms</h2>
<blockquote>
<h4>Runtime</h4>
<ul>
<li>Software Runtime for Microsoft Windows XP (32bit and 64bit
editions; Pentium III / Athlon XP and higher only) </li>
<li>Software Runtime for Microsoft Windows Vista (32bit
edition; Pentium III / Athlon XP and higher only) </li>
<li>AGEIA PhysX Hardware Runtime for Microsoft Windows XP
(32bit and 64bit editions) </li>
<li>AGEIA PhysX Hardware Runtime for Microsoft Windows Vista
(32bit and 64bit editions) </li>
<li>Microsoft XBox360 </li>
<li>Sony Play Station 3 (provided by Sony)</li>
<li>Software Runtime for SuSE Enterprise Linux 10.0 (alpha release; 32bit and 64bit
editions; Pentium III / Athlon XP and higher only)</li>
<li>Software Runtime for Red Hat Enterprise Linux WS 4.0 (alpha release; 32bit and 64bit
editions; Pentium III / Athlon XP and higher only)<br></li>
</ul>
<h4>Development </h4>
<ul>
<li> Microsoft Windows XP </li>
<li> Microsoft Visual Studio .NET 2003 </li>
<li> Microsoft Visual Studio .NET 2005 </li>
<li> Microsoft XBox360 development tools </li>
<li> Sony Playstation 3 development tools</li>
<li> SuSE Enterprise Linux 10.0 (alpha release)</li>
<li> Red Hat Enterprise Linux 4.0 WS (alpha release)<br>
</li>
</ul>
</blockquote>
<h2><br>
Known Issues And Limitations</h2>
<blockquote>
<h4>Hardware/Software Rigid Bodies</h4>
<ul>
<li>Objects may not get woken if they lose contact but their bounds still overlap.</li>
<li> Objects may have difficulty falling asleep if they have alternating bounds overlaps with non sleeping bodies.</li>
<li>Joint projection may cause instability in the D6 joint.</li>
<li> joints may pull off each other when the mass relationship is not properly set up </li>
<li> joints' behavior may differ when actors are in very small size. </li>
units far from the world origin, collision and SPH computations will fail.
</li>
<li>If particles get trapped between two dynamic rigid
bodies, they jitter within the penetration depth of
the rigid bodies.</li>
<li> Switching from no-particle-interaction mode to mixed mode or even sph mode can cause instabilities in the simulation. </li>
<li> Fluids have a limit on the packet number. It's 1024. </li>
<li> Max 4096 new Particles per time step can be added by the function of NxFluid::addParticles(). </li>
<li>16 Mbytes are reserved on the PPUs external memory
for cooked static collision geometry for fluids. If
this is exceeded during runtime collision geometry is
dropped and a debug message
"Hardware heap ran out of memory" is generated. The call
NxScene::cookFluidMeshHotspot can't cause this, since
it only cooks data and doesn't transfer the data to
the PPUs external memory yet.</li>
<li>If more than 8192 static triangles are located in the range
of a fluid packet, triangles will be dropped.
A debug message is generated in this case.
</li>
</ul>
<h4>Hardware/Software Cloth</h4>
<ul>
<li>A self-collision enabled cloth can still intersect itself due to high relative
velocities of cloth particles, small cloth thickness, multiple collisions with
other objects or user interaction.</li>
<li>Untangling is not yet supported.</li>
<li>Collision handling between different pieces of cloth is not yet supported.</li>
<li>Supported core bodies for cloth metal are boxes,
spheres, capsules and compounds of spheres.</li>
<li>The metal deformation is penetration based. This
means that if the rigid body solver leaves a big
penetration, the result looks more dramatic. Thus, in
some range, the deformation is not predictable.
However, the cloth is moved towards the colliding
body by the penetrationDepth parameter at an impact
so the penetration just varies around this value.</li>
<li> Attaching a low density actor to cloth in NX_CLOTH_ATTACHMENT_TWOWAY mode can cause unstable simulation. </li>
<li> When the density of object collision with cloth is too high, the objects can easily penetrate cloth, even in very low speed. </li>
<li> In some cases a cloth can slip through a concave corner or a valley edge during mesh or terrain collisions. (Workaround: Increase the cloth's thickness or bending stiffness) </li>
</ul>
<h4>Hardware Scene Manager(HSM) </h4>
<ul>
<li>dynamic triangle meshes are not supported anymore.</li>
<li> Objects in compartments are not visualized.</li>
<li> Hardware objects from different hardware compartments do not interact (i.e., cloth and rigid). </li>
</ul>
<h4>Serialization</h4>
<ul>
<li>COLLADA does not retain all of the physics data in our SDK. It will not retain heightfields, wheel shapes, CCD information, cloth, fluids, or a number of other items that are not in the COLLADA 1.4.1 specification.
</li>
</ul>
<h4>Installers</h4>
<ul>
<li> The AGEIA PhysX SDK must be installed to run samples as they
rely on DLLs contained within the main SDK installer.</li>
</ul>
<h4>Windows Device Driver</h4>
<ul>
<li> No known issues.</li>
</ul>
<h4>Tools</h4>
<ul>
<li> There is currently no support for content creation tools in the Linux SDK release.</li>
Fluids can be allocated from all of the cards onboard memory. However
when hardware rigid bodies are used they compete for memory. </li>
<li> Issue: Slowdown on creating and releasing fluids in a row: The
reason for this issue has not been determined. This doesn't happen when
releasing the scene too.<br>
Workaround: Create fluids once and reuse them. Recreation may lead to
fragmentation on the PPU memory, which is bad anyway. </li>
</ol>
<h3>Version</h3>
2.3.2
<hr>
<pre>Old Release Notes / Changelog<br><br>2.3 - 2005.08.15<br>==================<br>- XBOX 360, PS3 support. (may require files separate from windows installer package)<br>- improved API reference documentation, doc comments.<br>- new static vs. dynamic continuous collision detection based on CCD Skeletons<br>- NxConvexShape introduced as independent class of NxTriangleMeshShape<br>- NxWheelShape introduced for better raycast car support<br>- added API to support selection between hardware and software implementation.<br>- NxMaterial::programData API replaced with strongly typed spring member. Behavior is unchanged.<br>- debug rendering API simplified. NxUserDebugRenderable removed, NxDebugRenderable interface class replaced by a simple struct.<br>- more strict parameter checking in several places<br>- removed raycast based CCD<br>- removed FPU manipulation API functions.<br>- intel assembly implementation of NxMath::sincos().<br>- changed implementation of NxMath::rand()<br>- replaced buggy TransformPlane() with correct NxPlane::transform() and NxPlane::inverseTransform().<br>- added NxQUat::fromAxisAngleFast() and NxQuat::invert().<br>- modified implementations for NxQUat::rot, invRot (), and ::transform().<br>- removed NX_MF_CONVEX and NX_COMPUTE_CONVEX from NxMeshFlags of NxSimpleTriangleMesh<br>- removed NX_NUM_SLEEP_FRAMES macro<br><br>2.2, 2.1.3 - 2005.03.21<br><br>==================<br><br>- new abstract core implementation for hardware compatibility<br>- lots of new features for the D6Joint.<br>- materials API completely rewritten<br>- new mesh cooking library. Raw meshes must be preprocessed by the cooking library before being handed to the SDK. This makes creation of meshes at runtime much faster.<br>- new character motion controller library<br>- new extensions library<br>- new external utils library<br>- Foundation SDK has been merged into the Physics SDK. Specifically:<br> - there is no more foundation.dll<br> - the user must no longer link to foundation.lib<br> - API documentation for the foundation SDK is now part of the Physics SDK API documentation.<br> - the function exports of the foundation.dll are now exported from physics.dll<br> - the member functions from foundation shape API classes (NxSphere, NxBox, etc.) that were calling foundation exports have been removed. Here is a list with the corresponding replacement export that must be called by the user instead:<br><br> Old Member Function Replacement Function<br><br> NxSphere::NxSphere(unsigned nb_verts, const NxVec3* verts) NxComputeSphere(sphere, nb_verts, verts);<br> NxSphere::NxSphere(const NxSphere& sphere0, const NxSphere& sphere1) NxMergeSpheres(sphere, sphere0, sphere1);<br> NxSphere::compute(unsigned nb_verts, const NxVec3* verts) NxComputeSphere(sphere, nb_verts, verts);<br> NxSphere::fastCompute(unsigned nb_verts, const NxVec3* verts) NxFastComputeSphere(sphere, nb_verts, verts);<br> NxBox::containsPoint(const NxVec3& p) NxBoxContainsPoint(box, p);<br> NxBox::create(const NxBounds3& aabb, const NxMat34& mat) NxCreateBox(box, aabb, mat);<br> NxBox::computePlanes(NxPlane* planes) NxComputeBoxPlanes(box, planes);<br> NxBox::computePoints(NxVec3* pts) const NxComputeBoxPoints(box, pts);<br> NxBox::computeVertexNormals(NxVec3* pts) const NxComputeBoxVertexNormals(box, pts);<br> NxBox::getEdges() NxGetBoxEdges();<br> NxBox::getEdgesAxes() NxGetBoxEdgesAxes();<br> NxBox::getTriangles() NxGetBoxTriangles();<br> NxBox::getLocalEdgeNormals() NxGetBoxLocalEdgeNormals();<br> NxBox::computeWorldEdgeNormal(NxU32 edge_index, NxVec3& world_normal) NxComputeBoxWorldEdgeNormal(box, edge_index, world_normal);<br> NxBox::computeCapsule(NxCapsule& capsule) NxComputeCapsuleAroundBox(box, capsule);<br> NxBox::isInside(const NxBox& box) NxIsBoxAInsideBoxB(box, box);<br> NxRay::distanceSquared(const NxVec3& point, NxF32* t = NULL) NxComputeDistanceSquared(ray, point, t);<br> NxRay::di
*="">(s) instead of s->isBox())<br>- added NxPlane NxPlaneShape::getPlane() const;<br>- removed methods deprecated in 2.1.2<br>- added NxScene &NxActor::getScene() const;<br>- added NxPhysicsSDK& NxScene::getPhysicsSDK() const; <br>- added NxJoint& NxActor::getScene() const; <br>- removed NX_INLINE void NxFPU::NxSinCos(NxF32& c, NxF32& s, NxF32 f); <br>- added NX_INLINE static void NxMath::sinCos(NxF32 & c, NxF32 & s, NxF32 f); <br>- new NX_ACCELERATION force mode. <br>- new getScene() method for objects contained in scene. <br>- moved public enums from various classes to Nxp.h <br>- new shape flag NX_SF_POINT_CONTACT_FORCE and NxContactStreamIterator::getPointNormalForce() for returning per-point contact forces. <br>- improved validation in NxJointLimitSoftDesc::isValid() <br>- added function NxGetValue(NxCookingValue). <br>- motor for pulley joint <br>- added NxU32 NxScene::setThreadAffinityMask(NxU32 mask) <br>- replaced MIN_SEPARATION_FOR_PENALTY with NxShape::get/setSkinWidth(), and a global skin width parameter. <br>- new 128 bit mask based collision filtering (NxShape::getGroupsMask(), NxGroupsMask) <br>- new NxRaycastBit NX_RAYCAST_FACE_NORMAL for retrieving non-smoothed normals. <br>- new method NxCapsuleShape::getWorldCapsule() <br>- new method NxSphereShape::getWorldSphere() - new NxScene::getNbStaticShapes(), getNbDynamicShapes(). <br>- new triangleIDs for raycasting. <br>- removed support for pmap-less nonconvex nonheightfield mesh-mesh collision detection which was working poorly. <br>- removed obsolete parameter NX_MESH_MESH_LEVEL <br>- removed obsolete parameter NX_MESH_HINT_SPEED - removed NxActor::setDynamic(). Workaround: Create the initially static actor as a kinematic. Later turn off the kinematic state.<br><br>2.1.2 - 2004.11.08<br><br>==================<br><br>- more strict error checking<br>- multithreaded implementation - shape descriptors in NxActorDesc can now be allocated using a custom allocator.<br>- fluid API - NX_MESH_SMOOTH_SPHERE_COLLISIONS now disabled by default<br>- made mesh instances default to flat and not smooth sphere mode <br>- removed neccesarily reentrant method NxContactPair::setPairNotify(NxU32). Workaround: use any of the<br>several different ways to set actor flags. <br>- actor group and actor group pair flags <br>- raycast car support, including: - New + improved 'multipatch' friction implementation. Fringe benefits are that rare contact situations with multiple contact normals or materials-per-triangle are now handled correctly. <br>- Capsule shapes now have a 'swept shape' mode that can be used to get raycast wheel behavior. This is enabled with the new NX_SWEPT_SHAPE flag in NxCapsuleShapeDesc.<br>- programData member in NxMaterial <br>- NX_MF_SPRING_CONTACT flag of NxMaterial, and the appropriate code to emit suspension-spring-like contacts when this is enabled. <br>- SampleRaycast car <br>- Reworked applyForce code: <br>- removed these methods of NxActor because they were causing user confusion (they were hoping that it did more than just read back what they have previously set...) setForce (), setTorque(), getForce(), getTorque()<br> The replacement for setForce/setTorque is calling addForce/addTorque just once (per frame).<br> The replacement of getForce ()/getTorque() is to keep track of the forces you add.<br>- removed the variables: NxBodyDesc::initialForce, NxBodyDesc::initialTorque. The replacement for initialForce, initialTorque is addForce/addTorque after creating the object.<br>- forces act over the entire time step, including all substeps<br>- NxMaterial's vectors are now in shape space not in actor space.<br>- added 3 new joint types: - Distance - Pulley - Fixed<br>- kinematics perform move over a whole step, not a substep<br>- added methods to add impulses and velocity changes <br>- exception handling in SDK off, was enabled by mistake in 2.1.1<br>- implemented more material combine modes<br>- fixed a debug rendering crash bug<br>- fixed debug rendering extra lines and zero length lines bugs<br>- NX_VISUALIZE_COLLIS