-
Notifications
You must be signed in to change notification settings - Fork 324
/
CHANGELOG.md
5106 lines (3165 loc) · 299 KB
/
CHANGELOG.md
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
346
347
348
349
350
351
352
353
354
355
356
357
358
359
360
361
362
363
364
365
366
367
368
369
370
371
372
373
374
375
376
377
378
379
380
381
382
383
384
385
386
387
388
389
390
391
392
393
394
395
396
397
398
399
400
401
402
403
404
405
406
407
408
409
410
411
412
413
414
415
416
417
418
419
420
421
422
423
424
425
426
427
428
429
430
431
432
433
434
435
436
437
438
439
440
441
442
443
444
445
446
447
448
449
450
451
452
453
454
455
456
457
458
459
460
461
462
463
464
465
466
467
468
469
470
471
472
473
474
475
476
477
478
479
480
481
482
483
484
485
486
487
488
489
490
491
492
493
494
495
496
497
498
499
500
501
502
503
504
505
506
507
508
509
510
511
512
513
514
515
516
517
518
519
520
521
522
523
524
525
526
527
528
529
530
531
532
533
534
535
536
537
538
539
540
541
542
543
544
545
546
547
548
549
550
551
552
553
554
555
556
557
558
559
560
561
562
563
564
565
566
567
568
569
570
571
572
573
574
575
576
577
578
579
580
581
582
583
584
585
586
587
588
589
590
591
592
593
594
595
596
597
598
599
600
601
602
603
604
605
606
607
608
609
610
611
612
613
614
615
616
617
618
619
620
621
622
623
624
625
626
627
628
629
630
631
632
633
634
635
636
637
638
639
640
641
642
643
644
645
646
647
648
649
650
651
652
653
654
655
656
657
658
659
660
661
662
663
664
665
666
667
668
669
670
671
672
673
674
675
676
677
678
679
680
681
682
683
684
685
686
687
688
689
690
691
692
693
694
695
696
697
698
699
700
701
702
703
704
705
706
707
708
709
710
711
712
713
714
715
716
717
718
719
720
721
722
723
724
725
726
727
728
729
730
731
732
733
734
735
736
737
738
739
740
741
742
743
744
745
746
747
748
749
750
751
752
753
754
755
756
757
758
759
760
761
762
763
764
765
766
767
768
769
770
771
772
773
774
775
776
777
778
779
780
781
782
783
784
785
786
787
788
789
790
791
792
793
794
795
796
797
798
799
800
801
802
803
804
805
806
807
808
809
810
811
812
813
814
815
816
817
818
819
820
821
822
823
824
825
826
827
828
829
830
831
832
833
834
835
836
837
838
839
840
841
842
843
844
845
846
847
848
849
850
851
852
853
854
855
856
857
858
859
860
861
862
863
864
865
866
867
868
869
870
871
872
873
874
875
876
877
878
879
880
881
882
883
884
885
886
887
888
889
890
891
892
893
894
895
896
897
898
899
900
901
902
903
904
905
906
907
908
909
910
911
912
913
914
915
916
917
918
919
920
921
922
923
924
925
926
927
928
929
930
931
932
933
934
935
936
937
938
939
940
941
942
943
944
945
946
947
948
949
950
951
952
953
954
955
956
957
958
959
960
961
962
963
964
965
966
967
968
969
970
971
972
973
974
975
976
977
978
979
980
981
982
983
984
985
986
987
988
989
990
991
992
993
994
995
996
997
998
999
1000
# v5.4.0-106.0
## Supported Platforms
### Runtime
* Linux (tested on Ubuntu 20.04 and 22.04)
* Linux glibc version 2.31 or higher
* Microsoft Windows 10 or later (64 bit)
* GPU acceleration: display driver supporting CUDA toolkit 11.8 and Pascal GPU or above
### Development
* [Linux Platform Readme](documentation/platformreadme/linux/README_LINUX.md)
* [Windows Platform Readme](documentation/platformreadme/windows/README_WINDOWS.md)
## General
### Added
* PxSceneFlag::eENABLE_EXTERNAL_FORCES_EVERY_ITERATION_TGS enabling better TGS solver convergence.
* PxSimulationStatistics contains a new struct PxGpuDynamicsMemoryConfigStatistics, which reports the actual values of the parameters in PxGpuDynamicsMemoryConfig for a simulation with GPU dynamics/broadphase. These statistics can be used to fine-tune the input parameters for subsequent runs.
* Added 64 bit versions of PxLowestSetBit and PxHighestSetBit.
* Friction patch information in the PxGpuContactPair structure.
* A "lightweight abort" mechanism was added to the GPU dynamics pipeline in order to avoid crashing the GPU context in case of insufficient GPU memory. See the guide section about GPU Rigid Bodies for more information.
* A possibility to query solver residuals (remaining error after position and/or velocity iterations) on the PxScene, PxConstraint and on PxArticulationReducedCoordinate. The scene flag PxSceneFlag::eENABLE_SOLVER_RESIDUAL_REPORTING must be raised to enable residual reporting.
### Changed
* Rename PxgDynamicsMemoryConfig to PxGpuDynamicsMemoryConfig
* The signature for PxIntegrateSolverBodies() has changed. It will now return the updated linearMotionVelocity and angularMotionState values, which facilitates implementing the PhysX sleeping algorithm for immediate mode.
* PxGpuDynamicsMemoryConfig::tempBufferCapacity has been changed to PxU64.
* An error message was added when attempting to add any PxConstraint other than a D6 joint to a scene with direct-GPU API. Before it did not work silently.
### Fixed
* Race condition when adding a material while a scene starts simulating at the same time.
* Race condition where multiple links of larger articulations would accidentally write into the same memory on the GPU.
* A crash that happened when a pair of actors had lots of colliding shapes was fixed. [Issue #222](https://github.com/NVIDIA-Omniverse/PhysX/issues/222)
* A crash that happened when PxSceneDesc::maxNbContactDataBlocks was exceeded. [Issue #226](https://github.com/NVIDIA-Omniverse/PhysX/issues/226)
* A crash that happened when PxGpuDynamicsMemoryConfig::totalAggregatePairsCapacity was exceeded.
* A crash in the GPU island manager has been fixed.
* A crash that happened when doing contact modification while simulation on GPU [Issue #240](https://github.com/NVIDIA-Omniverse/PhysX/issues/240)
* PxsKernelWranglerManager is now instanced per PxCudaContextManager to enable running kernels on multiple GPUs.
* A rare crash due to memory corruption when articulations, normal joints and contacts (between rigid bodies and articulations) are present in a scene.
### Deprecated
* PxCudaContextManager::allocDeviceBuffer, PxCudaContextManager::freeDeviceBuffer, PxCudaContextManager::allocPinnedHostBuffer, PxCudaContextManager::freePinnedHostBuffer, PxCudaContextManager::clearDeviceBufferAsync, PxCudaContextManager::copyDtoH, PxCudaContextManager::copyHtoD, PxCudaContextManager::copyDToHAsync, PxCudaContextManager::copyHtoDAsync, PxCudaContextManager::copyDtoDAsync, PxCudaContextManager::memsetAsync and the macros using them have been deprecated. The replacement is to either use the direct functions in PxCudaContext, or the helpers provided in PxCudaHelpersExt.h as part of PhysXExtensions.
* PxPhysicsGPU::estimateSceneCreationGpuMemoryRequirements has been deprecated. PxPhysics::createScene() will return a null pointer if scene creation fails due to low GPU memory availability.
* Particle-cloth, -rigids, -attachments and -volumes (see Particle section for more details)
* PxSoftBody, PxFEMCloth and PxHairSystem attachment and filter methods. The functionality will be replaced with a new set of methods on PxScene.
* The single-threaded helper function PxAABBManager::update(PxBroadPhaseResults& results) has been deprecated, replaced with PxAABBManager::updateAndFetchResults(PxBroadPhaseResults& results). This is to avoid confusion between the two overloaded update() functions.
* PxScene::copyBodyData, PxScene::applyActorData, PxScene::copyArticulationData, PxScene::applyArticulationData, PxScene::updateArticulationsKinematic, PxScene::computeDenseJacobians, PxScene::computeGeneralizedMassMatrices, PxScene::computeGeneralizedGravityForces, PxScene::computeCoriolisAndCentrifugalForces, PxScene::copyContactData and PxScene::evaluateSDFDistances have been deprecated. Their replacements are located in PxDirectGPUAPI.h. Note that the function signatures have been updated to be more consistent, and the data layout of the GPU buffer has been changed. We refer to the API doc and the migration guide for detailed documentation.
* PxScene::applyParticleBufferData, PxScene::applySoftBodyData and PxScene::copySoftBodyData have been deprecated. There are no direct replacements, because most of the data exposed by these functions is already exposed directly on GPU in the regular PxParticleBuffer and PxSoftbody APIs.
### Removed
* Experimental FLIP and MPM Particle Systems (e.g. PxFLIPParticleSystem, PxFLIPMaterial, PxMPMParticleSystem, PxMPMMaterial).
## Articulations
### Added
* A new mimic joint feature has been added to the sdk. A mimic joint attempts to enforce a linear relationship between the joint positions of two joint dofs of the same articulation instance. A mimic joint instance is created with the function PxArticulationReducedCoordinate::createMimicJoint() and may be destroyed with the function PxArticulationMimicJoint::release(). Releasing a PxArticulationReducedCoordinate instance will automatically release all mimic joints associated with the articulation. Mimic joints may only be created and released while the owner articulation is not in a PxScene instance. The linear relationship may be edited while the articulation is in a scene but not during the duration of a simulation step. The snippet SnippetMimicJoint demonstrates the features of a mimic joint.
* DirectGPUAPIArticulation snippet, showcasing the direct GPU API usage for articulation.
### Fixed
* Root links reported an acceleration that accounted only for acceleration arising from gravity and external forces but did not account for the acceleration arising from contact impulses. This affected only articulations with non-fixed roots when querying link acceleration with PxArticulationReducedCoordinate::getLinkAcceleration() and PxArticulationCache::linkAcceleration.
* A bug in the PGS articulation self-collision contact code on GPU was fixed that caused velocity iterations to incorrectly take the position bias into account, leading to incorrect velocity updates.
* A bug in the TGS articulation multithreaded CPU codepath was fixed where contact writeback was incorrectly skipped if zero velocity iterations were performed. This previously led to incorrect values supplied to contact reports.
* A bug that caused instability for articulations with more than 64 links has been fixed.
* Root links reported an acceleration that accounted only for acceleration arising from gravity and external forces but did not account for the acceleration arising from contact impulses. This affected only articulations with non-fixed roots when querying link acceleration with PxArticulationReducedCoordinate::getLinkAcceleration() and PxArticulationCache::linkAcceleration.
* TGS articulation drive reported velocity that was inconsistent with joint movement when using a high stiffness. This was fixed by adjusting the target position during the substep iteration.
* A force or torque applied to an articulation link after the first simulation step was ignored in the subsequent simulation step; relevant for CPU API and GPU simulation.
* Some inverse dynamics functions (computeGeneralizedMassMatrix, computeGeneralizedGravityForce, computeDenseJacobian) were not using the most up to date joint positions and velocities when using the Direct GPU API.
* PxArticulationReducedCoordinate::getLinkAcceleration(linkId) reported an error when linkId was greater than 64. This limit is no longer a feature of PhysX articulations so the error was false and would have prevented queries of the acceleration of links with id > 64. This has been fixed.
### Deprecated
* Deprecated the kinematic articulation drive modes PxArticulationDriveType::eTARGET and PxArticulationDriveType::eVELOCITY. Use stiffness = 1e+25f and damping = 0.f to obtain eTARGET behavior, and stiffness = 0.f and damping = 1e+25f to obtain eVELOCITY behavior.
* Deprecated PxArticulationReducedCoordinate::addLoopJoint, PxArticulationReducedCoordinate::removeLoopJoint, PxArticulationReducedCoordinate::getNbLoopJoints, PxArticulationReducedCoordinate::getLoopJoints, which will be removed together with PxContactJoint.
### Removed
* PxArticulationSensor has been removed. Related API and flags are removed as well: PxArticulationReducedCoordinate::createSensor, getSensors, getNbSensors; PxArticulationCache::sensorForces, PxArticulationCacheFlag::eSENSOR_FORCES, PxArticulationGpuDataType::eSENSOR_FORCE; and PxArticulationSensorFlag. The replacement is PxArticulationCache::linkIncomingJointForces.
* PxArticulationCache::jointSolverForces has been removed together with the corresponding PxArticulationCacheFlag::eJOINT_SOLVER_FORCES, PxArticulationGpuDataType::eJOINT_SOLVER_FORCE, and PxArticulationFlag::eCOMPUTE_JOINT_FORCES. The replacement is PxArticulationCache::linkIncomingJointForces.
## Rigid Body
### Added
* PxMaterial::setDampingCombineMode has been added to allow choosing between different material combination modes for compliant contact damping.
* Dynamic rigid bodies with an SDF now utilize a specialized CUDA kernel to calculate contact points with a particle system.
* Rigid bodies contact reporting now has friction impulse information.
* PxSceneFlag::eENABLE_BODY_ACCELERATIONS has been added to enable computations of per-actor accelerations. They can be retrieved using the new PxRigidBody::getLinearAcceleration() and PxRigidBody::getAngularAcceleration() functions.
* RBDirectGPUAPI snippet, showcasing the direct GPU API usage for rigid body simulation.
### Changed
* For two rigids with compliant contact interactions, the combined compliance is now calculated according to the material combine mode rules. Previously, always the stiffer material was chosen. To recover the old behavior, choose the MIN material combine mode.
* For two rigids with compliant contact interactions, the combined damping is now calculated according to the material combine mode rules. Previously, always the higher damping was chosen. To recover the old behavior, choose the MAX material combine mode.
* The PGS solver no longer multiplies a positive geometric bias for collisions with the ERP factor. Previously, doing so could have resulted in contact forces acting at a distance even if the bodies were not due to collide in the current frame. The old behavior caused bodies to only approach each other asymptotically with repelling forces potentially acting as soon as the contact distance is undercut.
### Fixed
* Using PxMaterialFlag::eCOMPLIANT_CONTACT but then specifying a positive restitution value on materials could lead to different behavior on CPU vs. GPU.
* A bug in the convex-vs-convex PCM function has been fixed.
* A bug in the contact preparation code caused compliant contacts to produce repulsive damping forces even when shapes were separated. This is now fixed such that the damping effect only becomes active if the contact separation is negative at the beginning of the step or is expected to become negative during the step.
### Deprecated
* The PxMaterialFlag::eCOMPLIANT_CONTACT has been deprecated. Compliant contact behavior is now active whenever a negative restitution value is set.
* PxMaterialFlag::eIMPROVED_PATCH_FRICTION has been deprecated. At a future point, the PhysX SDK will always behave as if this flag was set and no longer support the legacy behavior (triggered by not raising the flag). At that point, this flag will be removed. Until then, it is highly recommended to always set this flag to adapt to the corresponding friction behavior (note that this flag is currently raised by default when creating a rigid body material, thus action needs only be taken if the flag was cleared explicitly).
* PxFrictionType::eTWO_DIRECTIONAL has been deprecated and will be removed in the future. Please use PxFrictionType::ePATCH instead.
## Joints
### Fixed
* Px1DConstraint joint drive did not produce the same force magnitude for drives with velocity biases that were equally positive and negative. This was true of the CPU and GPU solver pipelines. This has been fixed.
* Px1DConstraint joint drive produced unphysically large forces when run in combination with PxSolverType::eTGS and non-zero velocity iteration count. This was true of the CPU and GPU solver pipelines. This has been fixed by no longer updating joint drive force during velocity iterations with PxSolverType::eTGS. The expectation is that there are sufficient position iterations such that the drive force that accumulated over the position iterations is an accurate force. This avoids numerical discrepancies arising from the difference in effective simulation timestep employed by the position and velocity iterations. This discrepancy was particularly acute with a large number of velocity iterations.
* Px1DConstraint joint drive suffered from an unphysical damping term with all combinations of PxSolverType::eTGS/PxSolverType::ePGS/PxSceneFlag::eENABLE_GPU_DYNAMICS. This has been fixed.
* Px1DConstraint (and as such joints) was not respecting the bounce threshold velocity for restitution if an articulation link was involved and when running on GPU.
* Px1DConstraint was using an inconsistent impulse multiplier (Baumgarte Term) for resolving the geometric error of a hard constraint when running on CPU with PxSolverType::ePGS and articulations being involved. As a result, the geometric error might not have been fully resolved.
* Px1DConstraintFlag::eKEEPBIAS was ignored when running on GPU and when an articulation was involved.
* D6 and other maximal-coordinate joints constraining articulation links sometimes did not constrain all degrees of freedom that were supposed to be locked. This has been fixed.
* Px1DConstraint with PxConstraintSolveHint::eINEQUALITY set was processed inconsistently on GPU when an articulation link was involved. This might have resulted in geometric error not being resolved to the expected degree.
* PxJoint::getRelativeLinearVelocity() and ::getRelativeAngularVelocity() did not provide the velocity as documented (wrong frame was used). This affects PxPrismaticJoint::getVelocity() and PxRevoluteJoint::getVelocity() too since those were using the broken methods internally.
* Joints configured with a limit and a non-zero restitution potentially behaved as though the limit had been breached even though it had not been breached. This has been fixed so that the limit is properly observed.
## Cooking
### Changed
* PxSDFBuilder::buildSDF() and PxSDFBuilder::buildSparseSDF() now return a boolean that indicates whether SDF creation succeeded.
## Particles
### Added
* PxSceneFlag::eENABLE_EXTERNAL_FORCES_EVERY_ITERATION_TGS enabling better TGS solver convergence. Enabling the flag greatly reduces boiling. Currently just implemented for particles.
* PxParticleLockFlags, PxParticleSystem::setParticleLockFlag, getParticleLockFlags. Allows restricting particle motion to specified coordinate axis.
* createPBDParticleSystem takes an additional optional parameter neighborhoodScale, which can be increased to help stability.
* PxParticleBuffer::userData
* PxParticleSystem::getGridSizeX, getGridSizeY, getGridSizeZ
* Basic Omni PVD support. Streaming and visualizing particle positions and PxPBDParticleSystem, PxPBDMaterial and PxParticleBuffer properties.
### Deprecated
* PxParticleSystem::enableCCD is deprecated, use PxParticleFlag::eENABLE_SPECULATIVE_CCD instead.
### Fixed
* Improved CFL clamping for PxPBDParticleSystem. Motion is only limited for particles approaching each other. PxPBDMaterial::setCFLCoefficient(): Legal value range has been extended to [0, PX_MAX_F32).
* Fixed impulse mix-up when applying impulses to rigid bodies based on interactions with particles, softbodies and cloth.
### Removed
* Experimental FLIP and MPM Particle Systems (e.g. PxFLIPParticleSystem, PxFLIPMaterial, PxMPMParticleSystem, PxMPMMaterial).
* PxParticleBuffer::bufferIndex, setInternalData(), onParticleSystemDestroy(), removed internals leaking into the API.
### Deprecated
* PxParticleSystem (particle system base class obsolete after removing PxFLIPParticleSystem and PxMPMParticleSystem). Typedef PxParticleSystem as PxPBDParticleSystem.
* PxParticleMaterial (particle material base class obsolete after removing PxFLIPMaterial and PxMPMMaterial). Typedef PxParticleMaterial as PxPBDMaterial.
* PxParticleSolverType, PxScene::getNbParticleSystems, PxScene::getParticleSystems (use PxScene::getNbPBDParticleSystems, PxScene::getPBDParticleSystems instead.)
* PxParticleSystem::enableCCD(), replaced by PxParticleFlag::eENABLE_SPECULATIVE_CCD
* PxParticleBuffer::bufferUniqueId, replaced by PxParticleBuffer::getUniqueId()
* Particle Cloth (please use PxFEMCloth instead)
* PxParticleSpring, PxParticleCloth, PxParticleClothDesc, PxPartitionedParticleCloth, PxParticleClothBuffer
* PxParticleClothBufferHelper, PxCreateParticleClothBufferHelper, PxCreateAndPopulateParticleClothBuffer
* PxParticleClothConstraint, PxParticleClothCooker, PxCreateParticleClothCooker
* PxPBDMaterial::setLift, getLift, getDrag, setDrag.
* Particle Rigids (please use standard rigid bodies instead)
* PxParticleRigidBuffer, PxParticleRigidBufferHelper, PxCreateParticleRigidBufferHelper, PxCreateAndPopulateParticleRigidBuffer.
* Particle Attachments and Filters
* PxParticleRigidFilterPair, PxParticleRigidAttachment
* PxParticleAttachmentBuffer, PxCreateParticleAttachmentBuffer
* PxPBDParticleSystem::addRigidAttachment, removeRigidAttachment.
* PxParticleBuffer::setRigidFilters, setRigidAttachments
* Particle Volumes
* PxParticleVolume, PxParticleVolumeMesh, PxParticleVolumeBufferHelper, PxCreateParticleVolumeBufferHelper
* PxParticleBuffer::getParticleVolumes, getNbParticleVolumes, setNbParticleVolumes, getMaxParticleVolumes
## Extensions
### Fixed
* A bug in PxGjkQueryExt::ConvexMeshSupport::supportLocal() function. Worked incorrectly with scaled convex meshes. [Issue #202](https://github.com/NVIDIA-Omniverse/PhysX/issues/202)
* A bug in PxCustomGeometryExt::BaseConvexCallbacks::raycast() function. Wasn't setting hit flags correctly.
* A bug in PxSoftBodyExt::createSoftBodyMesh function. Wasn't generating proper voxel meshes.
## Soft Body
### Changed:
* Soft body convergence is improved for corotational model (PxFEMSoftBodyMaterialModel::eCO_ROTATIONAL). Behavior changes are expected.
* Soft body collisions against rigid bodies now make use of the SDF data if it is present on the rigid. Behavior changes are expected.
* A Poisson's ratio value of 0.5 is supported.
### Fixed:
* Fixed impulse mix-up when applying impulses to rigid bodies based on interactions with particles, softbodies and cloth.
* Fixed a problem when TGS with the option "external forces per substep" was active leading to softbodies losing their stiffness.
### Deprecated
* Deprecated PX_MAX_TETID and replaced with PX_MAX_NB_SOFTBODY_TET (maximum number of tetrahedron supported in a softbody mesh), and added PX_MAX_NB_SOFTBODY (maximum number of softbody actors supported in a scene). Use PX_MAX_NB_SOFTBODY_TET instead of PX_MAX_TETID to filter against all tetrahedron in a softbody.
## Pvd
### Added
* A new OmniPvd stream class called PxOmniPvdMetaData, which contains the PhysX version (major, minor, patch) as well as an OVD integration version
* A new PxGpuDynamicsMemoryConfig serialization class referenced by PxScene.
* OmniPVdWriter::getStatus() which returns an unsigned 32 bit integer flag bit mask.
* A new structure OmniPvdWriterStatusFlag describing the flag mask mentioned above.
* OmniPVdWriter::clearStatus() which clears the status of the OmniPvdWriter object.
* A new define OMNI_PVD_INVALID_HANDLE used by the OmniPVDWriter for returning invalid handles. Value is still 0 for the invalid handle.
* Now also supports OVD recording when PxScene is set to use the Direct GPU API.
* PxArticulationReducedCoordinate properly exports the global sleep state.
* The Direct GPU API has support for recording the post simulation state into OVD, after each simulation frame. The support covers rigid bodies, articulations and collision data.
* Added support for particles : PxPBDParticleSystem, PxParticleBuffer, PxDiffuseParticleParams and PxParticleAndDiffuseBuffer.
* Added support fort PxArticulationMimicJoint.
### Fixed
* Each call to OmniPvdReader::getNextCommand, now re-sets the gettable command parameters to 0 or OMNI_PVD_INVALID_HANDLE if the parameter is a handle. This prevents "leaking" of cached command parameters from a call of getNextCommand to another.
* Fixed a crash bug for recording OVD data into a stream that was not possible to open.
* SnippetOmniPvd now checks for the return value of the startSampling function and return an error message if not able to record into OVD.
### Changed:
* OVD streams of classes deriving from PxRigidActor serialize their rotation and translation attributes into a single globalPose transform
* PxArticulationLink objects only stream the globalPose transform. Previously the rotation and translation attributes contained the local transform.
* PxShape no longer streams rotation and translation separately but instead serializes that into a single attribute called localPose (4 floats quaternion, 3 float translation).
* Every startFrame call made by the PhysX SDK to the OmniPVD API, now sets the PxScene pointer as context. Increases the OVD integration versions to 1.4.
# v5.3.1-105.1
## General
### Changed
* PxgDynamicsMemoryConfig::tempBufferCapacity will now be interpreted as a user-provided initial size, and will resize automatically if more memory is needed.
### Fixed
* A bug that led to phantom collisions for convex-heightfield interactions on GPU has been fixed.
* A bug that caused velocity and impulse updates of the GPU articulation solver (PGS and TGS) not to be propagated to subsequent iterations, causing slower convergence and potentially unstable collision responses between rigids and articulations.
* Fixed binary serialization for GPU enabled triangle meshes and meshes with SDF support.
* Several bugs with GPU aggregates have been fixed that could have led to missed and phantom collisions. The issues were mostly related to additions/removals of aggregate contents.
* Gpu accelerated SDF cooking is now deterministic.
* SDF snippet shows how to optionally store cooked data into files.
* Small improvements to SDF collisions, especially when objects with wildly different size collide.
* Creating objects from a PxInputData containing invalid data could lead to a confusing (and incorrect) error message about a "double deletion". This has been fixed.
* Bugs in island management related to actors other than rigid bodies.
* A bug that could lead to a crash when calling the PxTetMaker::validateTriangleMesh function with a mesh referencing more vertices than passed into the function. That defect is now reported as eTRIANGLE_INDEX_OUT_OF_RANGE.
* A crash bug that appeared when releasing actors with externally-provided forces and torques has been fixed. [Issue #211](https://github.com/NVIDIA-Omniverse/PhysX/issues/211)
* A bug that caused a memory corruption in the GPU solver when using D6 joints with rigid bodies and articulations has been fixed.
## Rigid Body
### Added
* The extraction of an isosurface from a SDF can now use multiple CPU cores.
### Fixed
* A crash happening when using contact report thresholds with point-friction (PxFrictionType::eONE_DIRECTIONAL / PxFrictionType::eTWO_DIRECTIONAL) has been fixed.
* A "fear of the wireframe" issue in Sphere vs TriangleMesh collision when simulating on GPU is fixed.
## Articulations
### Fixed
* Articulation joint velocity limits are respected when articulation joint drives are configured to push past the limit.
* Spherical articulation joints could sometimes flip their position by 2 pi causing problems with joint limits. This has been fixed.
## Joints
### Fixed
* The PxConstraintFlag::eENABLE_EXTENDED_LIMITS flag now works properly for D6 based revolute joints when the GPU pipeline with the TGS solver is active.
## Character controller
### Fixed
* You can now only create one PxCreateControllerManager per PxScene. This avoids filtering-related issues when multiple controller managers are created for the same PxScene.
## Particles
### Added
* PxParticleSystem::getParticleMaterials() to query materials that have been registered with phases.
### Fixed
* PxParticleSystem::getNbParticleMaterials() always returned 1, instead of the materials referenced by phases.
* Particle - Convex Shape collisions failing with spread out particles.
* Particle phase references to PxPBDMaterial were broken when releasing (an unreferenced) PxPBDMaterial.
## Pvd
### Added
* A way to get a thread safe OmniPvd writer from the PxOmniPvd interface through using acquireExclusiveWriterAccess() and releaseExclusiveWriterAccess().
### Fixed
* OmniPVD no longer breaks when running and recording multiple scenes in parallel.
* Corrected mirroring of the inbountJoinDOF attribute of PxArticulationLink
## Extensions
### Fixed
* A bug in custom cone/cylinder collision with triangle meshes. There was a gap between a cone/cylinder and a mesh, noticeable for centimeter-scale shapes. Note that the last position argument of e.g.: PxCustomGeometryExt::CylinderCallbacks::useSubstituteGeometry was removed from the API.
# v5.3.0-105.1
## Supported Platforms
### Runtime
* Linux (tested on Ubuntu 20.04)
* Microsoft Windows 10 or later (GPU acceleration: display driver and GPU supporting CUDA 11 / CUDA ARCH 3.0)
### Development
* Microsoft Windows 10 or later
* Microsoft Visual Studio 2017, 2019, 2022
## General
### Changed
* The method PxLineStripSkinning::evaluateInterpolatedVertices changed the transform argument from `PxReal*` to ` PxMat44*` to be more explicit about the underlying data that is expected.
* The apply* and copy* functions in PxScene changed their event arguments from `void*` to `CUevent` to fix misunderstandings about the type of those arguments. This also fixes a bug where pointers to events where passed but not dereferenced when recording/awaiting them.
* The TGS solver on CPU and GPU now computes the number of position and velocity iteration according to the requested numbers by the actors in each island, matching the behavior of the PGS solver. Previously TGS velocity iterations in excess of 4 were silently converted to position iterations. To preserve the old behavior any actor requesting more than 4 velocity iterations should convert excess velocity iteration counts to position iteration counts, e.g., formerly 10 position and 10 velocity iterations should become 16 position and 4 velocity iterations.
* The `acquire()` and `release()` functions in `PxCudaContextManager` that manage the PhysX CUDA context now use push/pop semantics. This fixes bug that led to a wrong context being bound after `release()` when sharing an existing CUDA context with PhysX.
* Calling `setCMassLocalPose()` on a rigid body when using the direct-GPU API is now allowed. Note that calling `updateArticulationsKinematic()` after updating CMassLocalPose but before the next call to `simulate()` will still use the old CMassLocalPose.
### Fixed
* A memory leak has been fixed in the actor pairs management code.
* A race condition was fixed that led to nondeterministic contact reports in some scenarios.
* Fix FEM cloth attachment filtering bug
* Fix FEM narrow phase collision crash
* Sphere-Trianglemesh collision bug is fixed
* A bug that led to aggregated shapes being processed as part of the regular broadphase when changing transforms using the direct-GPU API has been fixed.
* A bug that led to missed collisions and phantom collisions when changing transforms using the direct-GPU API has been fixed.
* A bug that led to incorrect and nondeterministic behaviour for convex-trianglemesh, convex-heightfield, sphere-trianglemesh, capsule-trianglemesh, sphere-heightfield and capsule-heightfield collisions on GPU has been fixed.
* A bug that led to contact target velocities spilling over from one contact to other contacts in the same solver batch.
* A bug that led to incorrect and nondeterministic behaviour for trianglemesh-trianglemesh collisions on GPU has been fixed.
* A bug that led to incorrect materials being used for convex-convex collisions on GPU has been fixed.
### Removed
* Context creation for CUDA/Graphics interoperability has been deprecated. interopMode has been removed from PxCudaContextManagerDesc.
* PxSceneFlag::eFORCE_READBACK has been removed. There is no replacement.
* PxSceneFlag::eSUPPRESS_READBACK was deprecated and has been removed. Use PxSceneFlag::eENABLE_DIRECT_GPU_API instead.
## Rigid Body
### Added
* Possibility to use the GPU to cook an SDF making the process a lot faster.
* Option to launch CUDA kernels synchronously when creating the CUDA Context Manager. This option is required to accurately determine the correct kernel that returns a CUDA error.
### Fixed
* The torsional patch radius parameter (see PxShape::setTorsionalPatchRadius()) was potentially ignored when running the simulation on GPU.
* Potential race condition related to activating/deactivating trigger pairs.
* A small misalignment of SDFs with the triangle mesh.
* A small error in the gradient calculation of SDFs.
* A sphere could tunnel through the edge between two triangles in a triangle mesh.
* Race condition in SDF computation cuda kernel is fixed.
* Fixed invalid access problem when selecting the SDF contact handler.
### Deprecated
* PxFrictionType::eONE_DIRECTIONAL has been deprecated and will be removed in the future. Please use ePATCH or eTWO_DIRECTIONAL instead.
## Articulations
### Changed
* `PxScene::copyArticulationData()` and `PxScene::applyArticulationData()` do not allow reading write-only and writing read-only data anymore. Read/write properties are specified in the API doc of `PxArticulationGpuDataType`.
### Fixed
* A bug that led to wrong joint targets being set when using the direct-GPU API has been fixed.
* A bug that led to link constraint-force-mixing scale not being included in collision constraints when using GPU dynamics has been fixed.
* Articulation drive did not produce the same force magnitude for drives with velocity biases that were equally positive and negative. This was true of the CPU and GPU solver pipelines. This has been fixed.
* Articulation drive produced unphysically large forces when run in combination with PxSolverType::eTGS and non-zero velocity iteration count. This was true of the CPU and GPU solver pipelines. This has been fixed by no longer updating joint drive force during velocity iterations with PxSolverType::eTGS. The expectation is that there are sufficient position iterations such that the drive force that accumulated over the position iterations is an accurate force. This avoids numerical discrepancies arising from the difference in effective simulation timestep employed by the position and velocity iterations. This discrepancy was particularly acute with a large number of velocity iterations.
* Articulation drive suffered from an unphysical damping term with all combinations of PxSolverType::eTGS/PxSolverType::ePGS/PxSceneFlag::eENABLE_GPU_DYNAMICS. This has been fixed.
* Potential crashes due to reading uninitialized memory were fixed.
* The function PxArticulationReducedCoordinate::setMaxCOMAngularVelocity() had no effect if called after the 1st sim step with PxSceneFlag::eENABLE_GPU_DYNAMICS raised. This has been fixed.
* The function PxArticulationReducedCoordinate::setMaxCOMLinearVelocity() had no effect if called after the 1st sim step with PxSceneFlag::eENABLE_GPU_DYNAMICS raised. This has been fixed.
* Raising or lowering PxArticulationFlag::eFIX_BASE had no effect if modified after the 1st sim step with PxSceneFlag::eENABLE_GPU_DYNAMICS raised. This has been fixed.
* The root link acceleration was reported as {0} even when the root link was not fixed. This affected GPU only. The fix has been applied to PxArticulationReducedCoordinate::copyInternalStateToCache(), PxArticulationReducedCoordinate::getLinkAcceleration() and PxScene::copyArticulationData().
* Only half the expected friction force was applied in certain scenarios when using PxSolverType::eTGS, PxFrictionType::ePATCH, PxMaterialFlag::eIMPROVED_PATCH_FRICTION and running on CPU.
### Deprecated
* The functions PxArticulationReducedCoordinate::setMaxCOMLinearVelocity(), PxArticulationReducedCoordinate::getMaxCOMLinearVelocity(), PxArticulationReducedCoordinate::setMaxCOMAngularVelocity(), PxArticulationReducedCoordinate::getMaxCOMAngularVelocity() have all been marked as deprecated and will be removed in a future release.
## Joints
### Deprecated
* Px1DConstraintFlag::eDRIVE_ROW has been marked as deprecated and will be removed in a later release. It has been renamed to Px1DConstraintFlag::eDEPRECATED_DRIVE_ROW to signal the intention to remove this flag in a later release.
## Vehicles2
### Added
* A new snippet that shows an example of using a custom tire model has been added (see SnippetVehicle2CustomTire).
### Changed
* The snippet SnippetVehicle2Customization has been renamed to SnippetVehicle2CustomSuspension.
* PxVehicleCommandNonLinearResponseParams::nbSpeedRenponsesPerCommandValue was misspelled and now renamed to nbSpeedResponsesPerCommandValue.
* More parameters get recorded by OmniPVD. As a consequence, PxVehiclePVDComponent and some other PVD related vehicle APIs changed.
* It is now legal to set entries in PxVehicleTankDriveDifferentialParams::nbWheelsPerTrack to 0 or 1.
* The APIs of some methods use more specific input parameters now to decrease dependency on certain data structures. See the migration guide for more details. This applies to the methods: PxVehicleTireDirsUpdate(), PxVehicleTireCamberAnglesUpdate() and PxVehicleTireGripUpdate().
### Fixed
* Nonlinear command responses were broken for negative steer command values. Now they are treated symmetrically as intended.
* PxVehiclePhysXActorDestroy() triggered a warning if the articulation link was not a leaf link.
### Removed
* PxVehicleTankDriveDifferentialParams::nbWheelsInTracks has been removed. The entries in ::nbWheelsPerTrack can be summed up to compute that value instead.
## Cooking
### Added
* PxTriangleMeshCookingResult::eEMPTY_MESH has been added. This cooking result is output when the mesh cleaning process removes all the triangles of a mesh.
* PxCookingParams::meshAreaMinLimit has been added. This is used in the mesh cleaning process to remove triangles whose area is too small.
* PxCookingParams::meshEdgeLengthMaxLimit has been added.
### Changed
* The requirements for convex meshes being GPU compatible have been tightened. Overly oblong meshes are now rejected by the cooking with an error message. Collision
detection will fall back to CPU for these meshes.
### Fixed
* Fixed out of memory crash when cooking a convex hull of a very high resolution mesh.
## Soft Body
### Added
* Support for voxel meshes with 5 tetrahedra per voxel to counteract anisotropy in the mesh.
### Changed:
* Defaults of PxConeLimitedConstraint::mLowLimit, mHighLimit have been changed to -1.0 indicating no limit.
* Soft body sleep damping is improved to minimize an effect that looks like a soft body would lower its stiffness before it goes to sleep.
### Fixed
* Overflow of the soft body contact buffer will result in a warning.
## Extensions
### Added
* CCD support for PxCustomGeometryExt::CylinderCallbacks and PxCustomGeometryExt::ConeCallbacks.
### Changed
* PxCustomGeometryExt::CylinderCallbacks and PxCustomGeometryExt::ConeCallbacks classes have their public member variables (height, radius, axis and margin) replaced with setter and getter member functions.
## Pvd
### Fixed
* Better coverage in OVD of attribute mirroring for : PxActor, PxRigidActor, PxRigidBody, PxRigidStatic and PxRigidDynamic, specifically for initial values, user set functions and post simulation updates.
# v5.2.0 & v5.2.1
## Supported Platforms
### Runtime
* Linux (tested on Ubuntu 20.04)
* Microsoft Windows 10 or later (GPU acceleration: display driver and GPU supporting CUDA 11 / CUDA ARCH 3.0)
### Development
* Microsoft Windows 10 or later
* Microsoft Visual Studio 2017, 2019, 2022
## General
* PhysX GPU binaries built with CUDA toolkit 11.8.
* Added compute capability 8.9 (Ada) and 9.0 (Hopper)
* Removed compute capability 5.0 (Maxwell)
* Enabled multi-threaded cuda kernel compilation
### Changed:
* INVALID_FILTER_PAIR_INDEX has been moved out of the public API. It was incorrectly exposed to users.
* The API for the filter callback changed slightly. The pairID parameter in PxSimulationFilterCallback::pairFound(), PxSimulationFilterCallback::pairLost() and PxSimulationFilterCallback::statusChange() is now a PxU64 instead of a PxU32. The filter callback will now be called from multiple threads.
* Minimum required Windows OS version was changed from Windows XP to Windows 7
* Replaced all calls to `select` with calls to `poll` in the socket implementations
* PxSceneFlag::eENABLE_DIRECT_GPU_API and its predecessor PxSceneFlag::eSUPPRESS_READBACK are now immutable.
* CmakeModules is no longer an external dependency. It's now included in PhysX source.
### Fixed
* A bug that produced duplicate broadphase pairs and led to rapidly increasing GPU memory consumption was fixed.
* An immediate mode bug has been fixed. It was happening in the contact generation code, using persistent contacts, and could produce jittering.
* An indexing error was corrected that caused the CPU PGS solver with point friction to skip velocity and impulse writebacks in some scenarios.
* A thread synchronization issue was addressed that may have caused nondeterministic behavior in the CPU PGS solver.
* A crash that appeared when overflowing the maximum amount of aggregate pairs in the GPU broadphase has been fixed.
* A bug that generated broadphase pairs for removed shapes has been fixed.
* A crash that occurred when using excessively small contact buffers and/or patch buffers on the GPU. Now, contacts that don't fit into the buffer are dropped, and an error is reported.
* A bug when running generate_projects.bat if one of the parent directories contain a space.
### Deprecated
* PxSceneFlag::eFORCE_READBACK is deprecated. There is no replacement.
* PxSceneFlag::eSUPPRESS_READBACK is deprecated. The replacement is PxSceneFlag::eENABLE_DIRECT_GPU_API.
### Removed
* PxBVHStructure has been removed. Use PxBVH.
* PxBVHStructureDesc has been removed. Use PxBVHDesc.
* PxPhysics::getBVHStructures() has been removed. Use PxPhysics::getBVHs()
* PxGetAssertHandler() and PxSetAssertHandler() have been removed.
* PxMassModificationProps has been removed. Use PxConstraintInvMassScale instead.
* PxRegisterImmediateArticulations, PxRegisterArticulationsReducedCoordinate, PxRegisterHeightFields, PxCreateBasePhysics have been removed. Articulations and heightfields are now always enabled.
* PxBuffer has been removed. There is no replacement. The soft body interface now exposes direct access to GPU buffers.
* GpuExtension library has been removed.
* The deprecated PxPhysicsInsertionCallback has been removed. Please use PxInsertionCallback instead.
* The deprecated PxTaskType::Enum entries TT_CPU, TT_NOT_PRESENT and TT_COMPLETED have been removed. These entries were replaced with eCPU, eNOT_PRESENT and eCOMPLETED.
* These deprecated immediate-mode types have been removed: PxFeatherstoneArticulationJointData, PxFeatherstoneArticulationLinkData, PxFeatherstoneArticulationData, PxMutableLinkData, PxLinkData.
* The deprecated PxPhysics::createBVHStructure() and PxPhysics::getNbBVHStructures() functions have been removed.
* A deprecated PxPhysics::createAggregate() function has been removed.
* Deprecated passthrough functions in PxShape such as `getGeometryType()` and the specialized `get<geomType>Geometry()` were removed. Calls to these functions should be replaced by the accessing the underlying geometry directly with `getGeometry()`.
* Context creation for CUDA/Graphics interoperability has been deprecated. interopMode has been removed from PxCudaContextManagerDesc.
* No more Support for Microsoft Visual Studio 2013 and 2015.
* All 32 bits presets are removed.
## Rigid Body
### Fixed
* A crash involving static or kinematic aggregates used in combination with PxPairFilteringMode::eKILL has been fixed.
* PxRigidDynamicLockFlags (especially the linear lock flags) did not work properly with PGS. This has been fixed.
* A rare bug involving GPU aggregates, in which newly created actors could freely move through existing actors, has been fixed.
* A crash with invalid setups, where multiple materials were set on a shape referencing a triangle mesh that had no per-triangle material indices, has been fixed. Additionally this invalid setup will now trigger an error message.
* The convex-vs-mesh PCM contact generation is now more robust (CPU/GPU). Some jittering cases have been fixed.
* The capsule-vs-mesh PCM contact generation is now more robust (GPU). Some jittering cases have been fixed.
* A bug that produced jittering when contact modification was used has been fixed. It happened mainly for primitives-vs-mesh contacts, in cases where multiple contact patches were involved.
* A bug in GPU box-box contact generation that caused memory overflows and nondeterministic behavior as a result.
* A bug in the constraint solver that was using wrong indices to solve friction constraints.
* A crash in the GPU broadphase with empty aggregates has been fixed.
* Limited the maximum amount of memory that the SDF debug visualizer uses to avoid out-of-memory errors on high-resolution SDFs.
* A sufficiently large number of contacts is now generated for a dynamic object with an SDF collider lying on a single, large static triangle represented by a triangle mesh collider.
* Improved robustness to imperfect input when cooking SDFs; for example, duplicate triangles with opposite winding now produce a correct SDF.
* Fixed a rare case where the SDF contact generation algorithm could get stuck on SDF singularities and produce incorrect contacts.
* Resolved a crash that occurred when a sphere primitive collider comes into contact with an SDF collider.
## Articulations
### Added
* A new feature that computes and reports the force applied by a joint to a child link has been added. The reported force is in the joint's child frame. A more detailed specification of the reported force may be found in the doxy for the newly added array PxArticulationCacheFlag::eLINK_INCOMING_JOINT_FORCES. The force may be queried on CPU using the newly added flag PxArticulationCacheFlag::eLINK_INCOMING_JOINT_FORCES in conjunction with the newly added array PxArticulationCache::linkIncomingJointForce and the pre-existing function PxArticulationReducedCoordinate::copyInternalStateToCache(). The equivalent with the direct GPU API is to use the newly added enumeration PxArticulationGpuDataType::eLINK_INCOMING_JOINT_FORCE in conjunction with the pre-existing function PxScene::copyArticulationData().
### Fixed
* A rare bug involving articulations in aggregates has been fixed. An internal counter was not correctly updated, and could lead to internal asserts and potential crashes.
* Setting root link transforms or joint positions with the PxScene GPU API could result in incorrect collision behavior if an articulation contained links with no shapes.
* Incorrect values for link acceleration were reported with PxSceneFlag::eENABLE_GPU_DYNAMICS raised and lowered and with PxSceneFlag::eSUPPRESS_READBACK raised and lowered. This affected PxArticulationReducedCoordinate::getLinkAcceleration(), PxArticulationCache::linkAcceleration and PxScene::copyArticulationData(). This bug has been fixed.
* Incorrect values for joint acceleration were reported when PxSceneFlag::eENABLE_GPU_DYNAMICS was raised. This affected PxArticulationGpuDataType::eJOINT_ACCELERATION/PxScene::copyArticulationData() with PxSceneFlag::eSUPPRESS_READBACK raised and PxArticulationCacheFlag::eACCELERATION/PxArticulationReducedCoordinate::copyInternalStateToCache()/PxArticulationCache::jointAcceleration with PxSceneFlag::eSUPPRESS_READBACK lowered. This bug has been fixed.
* Setting a target velocity on a modifiable contact of an articulation link was not working properly. This has been fixed.
* A crash that appeared when adding an articulation was added and removed from a scene without running a sim step in-between has been fixed.
* Articulation links with extremely large mass in excess of approximately 1e+7 mass units had a tendency to fall through the ground due to internal threshold guards. This affected all solver types running on CPU. This has been fixed.
* A floating-point precision issue resulting in slower-than-expected moving prismatic joints under certain simulation conditions with the TGS solver on GPU has been fixed.
### Deprecated
* PxArticulationSensor has been deprecated. Related API and flags are deprecated as well: PxArticulationReducedCoordinate::createSensor, getSensors, getNbSensors; PxArticulationCache::sensorForces, PxArticulationCacheFlag::eSENSOR_FORCES, PxArticulationGpuDataType::eSENSOR_FORCE; and PxArticulationSensorFlag.
* PxArticulationCache::jointSolverForces has been deprecated together with the corresponding PxArticulationCacheFlag::eJOINT_SOLVER_FORCES, PxArticulationGpuDataType::eJOINT_SOLVER_FORCE, and PxArticulationFlag::eCOMPUTE_JOINT_FORCES. The replacement is PxArticulationCache::linkIncomingJointForces.
### Removed
* Deprecated PxArticulationJointReducedCoordinate::setLimit and PxArticulationJointReducedCoordinate::getLimit were removed. Use PxArticulationJointReducedCoordinate::setLimitParams and PxArticulationJointReducedCoordinate::getLimitParams instead.
* Deprecated PxArticulationJointReducedCoordinate::setDrive and PxArticulationJointReducedCoordinate::getDrive were removed. Use PxArticulationJointReducedCoordinate::setDriveParams and PxArticulationJointReducedCoordinate::getDriveParams instead.
### Changed
* Debug visualization of articulation links (body mass axes) will now show their sleeping state (similar to rigid bodies).
## Joints
### Changed
* The debug visualization color of active limits has changed from red to yellow.
### Removed
* Joint projection has been removed.
* The joint's "contact distance" parameter has been removed. The limits are now always active.
### Fixed
* The D6 joint's twist drive was using the wrong actor's axis (B instead of A). This has been fixed, and it could affect joint setups in existing scenes. To fix this in existing content it might be enough to flip the joint frames of involved actors, but this may not be possible depending on which other features (joint limits, etc) have been setup for the same joint. In the worst case it might be necessary to re-tune these joints.
* D6 joints configured to act as fixed joints (i.e. all motions locked) between static actors or world and a floating articulation base link did not constrain the rotational degrees of freedom.
### Deprecated
* PxContactJoint, PxJacobianRow and PxContactJointCreate() have all been marked as deprecated and will be removed in a later release.
## Scene queries
### Removed
* Deprecated PxBVH::raycast(), PxBVH::sweep() and PxBVH::overlap() functions have been removed. Use the new versions with callbacks.
* A deprecated PxQueryFilterCallback::postFilter() function has been removed. Use the similar function with a different signature.
* The deprecated PxGeometryQuery::getWorldBounds() function has been removed. Please use PxGeometryQuery::computeGeomBounds() instead.
* A deprecated PxGeometryQuery::raycast() function has been removed. Please use the other function with the same name but a different signature.
### Fixed
* Overlap queries could still return a non-zero number of hits when all hits got filtered in the post-filter callback (e.g. using PxQueryHitType::eNONE). This has been fixed.
### Added
* PxScene::evaluateSDFDistances() to evaluate sdf distances and gradients at given sample points for a batch of shapes
## Cooking
### Removed
* The deprecated PxCooking class has been removed. Use the standalone "immediate cooking" functions instead (e.g. PxCookBVH, PxCreateBVH...)
* PxCooking::cookBVHStructure() has been removed. Use PxCooking::cookBVH()
* PxCooking::createBVHStructure() has been removed. Use PxCooking::createBVH()
### Deprecated
* PxConvexFlag::eGPU_COMPATIBLE has been deprecated. Set PxCookingParams::buildGPUData to true to cook convex meshes that need to be GPU compatible.
### Fixed
* When convex hull cooking hit the polygon limit, the coplanar faces merge step was not run.
## Serialization
### Changed:
* Version mismatch checks etc. when deserializing binary data are now applied in profile and release build configurations too. PxSerialization::createCollectionFromBinary() will return NULL if the checks fail and error messages will get sent.
### Fixed:
* When deserializing materials (any PxBaseMaterial-derived), their userData member was wrongly re-initialized to zero, overwriting the serialized value.
## Pvd
### Changed:
* The OmniPVD API has been reworked to be more consistent and provide less room for confusion. Among the various changes are:
* The "Set" attribute type has been renamed to "UniqueList". As a consequence, the OmniPvdWriter methods registerSetAttribute, addToSetAttribute.., removeFromSetAttribute.. have been renamed to registerUniqueListAttribute, addToUniqueListAttribute, removeFromUniqueListAttribute. The enum values eOmniPvdRegisterSetAttribute, eOmniPvdAddToSetAttribute, eOmniPvdRemoveFromSetAttribute have been renamed to eREGISTER_UNIQUE_LIST_ATTRIBUTE, eADD_TO_UNIQUE_LIST_ATTRIBUTE, eREMOVE_FROM_UNIQUE_LIST_ATTRIBUTE.
* OmniPvdCommandEnum has been renamed to OmniPvdCommand and all enum values have been renamed too.
* OmniPvdDataTypeEnum has been renamed to OmniPvdDataType
* OmniPvdAttributeDataType has been removed and its usage in the API methods replaced with OmniPvdDataType::Enum
* The OmniPvdWriter methods setAttributeShallow, addToSetAttributeShallow, removeFromSetAttributeShallow have been renamed to setAttribute, addToUniqueListAttribute, removeFromUniqueListAttribute and can be dinstinguished from the more generic versions with the same name by the argument list.
* The order of the handleDepth and attributeHandles params has flipped in the OmniPvdWriter methods setAttribute, addToUniqueListAttribute, removeFromUniqueListAttribute (formerly called addToSetAttribute, removeFromSetAttribute) methods.
* The order of the enumClassHandle and attributeName parameters has flipped in the OmniPvdWriter::registerFlagsAttribute() method.
* OmniPvdReader::getCommandType() has been removed. The information is already available as part of the OmniPvdReader::getNextCommand() method.
* The parameters in OmniPvdReader::startReading() have turned from pointers to references.
* The stream parameters in OmniPvdWriter::setWriteStream() and OmniPvdReader::setReadStream() have turned from pointers to references.
* The input parameters for the following functions have turned from pointers to references: destroyOmniPvdReaderFp, destroyOmniPvdWriterFp, destroyOmniPvdFileReadStreamFp, destroyOmniPvdFileWriteStreamFp, destroyOmniPvdMemoryStreamFp
* Various input parameters in the methods of OmniPvdWriter, OmniPvdReadStream, OmniPvdWriteStream have changed from const to non-const.
* The returned data pointers of the methods getClassName(), getAttributeName(), getObjectName(), getAttributeDataPointer() of OmniPvdReader are now const.
* The OmniPVD snippet now aborts in release build configuration since PVD is not available in release.
* Unit tests can now export single or series of automatically time stamped files, when the omnipvdfile command line parameter is set to a directory
* Crash bugs in the contact reports fixed
* OmniPVD now uses the OmniPVD API derived class support to stream debug data
* Removes attribute duplication for shared base classes
* Removed ambiguity about which class a certain object is part of
* No need to have a class type attribute in streamed debug objects, the class is the type
* As a consequece greatly simplifies object and class handling in the OmniPVD extension
## Vehicles2
### Fixed:
* When using sweeps for vehicle wheel vs. ground collision detection, PxVehiclePhysXRoadGeometryQueryUpdate() wrongly treated the case of an exactly zero hit distance (wheel touching ground with suspension being exactly at max compression) as no hit.
* Undesired sleep/wake cycle for vehicles that are not moving while engines are revving. Applying throttle will keep vehicles awake now.
* Negative suspension jounce (and an assert) could result in certain scenarios where PxVehicleSuspensionStateCalculationParams::limitSuspensionExpansionVelocity was set to true and gravity was pointing in the opposite direction of the suspension travel direction.
* Various PVD related bugs.
* If the wheel IDs in PxVehicleAxleDescription::wheelIdsInAxleOrder were shuffled, the wrong road geometry velocity information was used to compute the tire slip speeds.
* When driving backwards, the thresholdForwardSpeedForWheelAngleIntegration parameter (see PxVehicleSimulationContext) was ignored.
### Changed:
* PxVehiclePhysXRoadGeometryQueryParams has been adjusted to allow for wheel specific filter data. As a consequence, the method PxVehiclePhysXRoadGeometryQueryUpdate() has been adjusted too. See the migration guide for more details.
* Only the engine drivetrain or direct drivetrain properties are recorded in PVD now (and not both for the same vehicle).
* All the methods in PxVehiclePvdFunctions.h and PxVehiclePvdHelpers.h have been adjusted to use references to OmniPvdWriter, PxVehiclePvdObjectHandles or PxVehiclePvdAttributeHandles objects instead of pointers to make it even clearer that these parameters are required.
* The PxVehiclePvdAttributeHandles parameter of the PxVehiclePvdObjectRelease() method has been removed.
* The PxVehiclePvdAttributeHandles and OmniPvdWriter parameter of the PxVehiclePvdObjectCreate() method have been removed.
* The OmniPvdWriter parameter of the PxVehiclePvdAttributesRelease() method has been removed.
## Soft Body
### Added:
* Kinematic soft body feature
* PxSoftBodyFlag::eKINEMATIC and PxSoftBodyFlag::ePARTIALLY_KINEMATIC.
* PxSoftBody::setKinematicTargetBufferD function to set kinematic targets based on a device buffer.
* PxConfigureSoftBodyKinematicTarget function to prepare kinematic targets for PxSoftBody::setKinematicTargetBufferD.
* PxSoftBodyExt::relaxSoftBodyMesh function to repose a tetrahedral mesh from one configuration into another.
* Optional outputVertexToInputTriangle, removeDisconnectedPatches parameters for PxTetMaker::simplifyTriangleMesh.
* PxTetrahedronMeshExt::createPointsToTetrahedronMap function to associate points to their closest tetrahedon.
* A snippet that shows how to set up and use a kinematic soft body.
* constraintOffset parameter to PxSoftBody::addSoftBodyAttachment and PxSoftBody::addClothAttachment to specify an offset of the PxConeLimitedConstraint with respect to the PxConeLimitedConstraint::mAxis.
### Removed:
* PxBuffer has been removed. Writing and reading the softbody simulation state is now done directly in GPU buffers. For examples, see SnippetSoftBody.
### Deprecated:
* PxSoftBodyExt::commit() has been deprecated. The replacement is PxSoftBodyExt::copyToDevice().
### Changed:
* Renamed PxFEMSoftBodyMaterialModel::CO_ROTATIONAL, NEO_HOOKEAN to PxFEMSoftBodyMaterialModel::eCO_ROTATIONAL, eNEO_HOOKEAN.
* PxSoftBodyDataFlag has been renamed to PxSoftBodyGpuDataFlag.
* Default constructor of PxConeLimitedConstraint initializes PxConeLimitedConstraint::mAngle to -1.0 since 0.0f now indicates a 0.0 cone opening angle.
* Soft body flags used to copy stress computation were changed. The stress computation can now be performed via the intermediate data that can be copied from the internal buffers.
### Fixed:
* A bug that resulted in changes to PxSoftBodyFlags not being picked up has been fixed.
* Fixed a case where particles colliding with soft bodies could lead to a crash.
* Fixed a corner case where the mass of an internal node could become negative.
* An index bug when rendering tetrahedra in the snippets.
## Particles
### Changed:
* Renamed PxParticleRigidAttachment::mParams to mConeLimitParams
* Added PxParticleRigidAttachment constructor to initialize with PxConeLimitedConstraint and localPose0.
* Added PxConeLimitParams constructor to initialize with PxConeLimitedConstraint.
* Added PxParticleRigidFilterPair constructor to initialize with rigid node ID and particle ID.
### Fixed:
* A crash when using a large number of particles has been fixed.
* A bug that resulted in changes to PxParticleFlag not being picked up has been fixed.
# v5.1.3
## General
### Added:
* Support for Microsoft Visual Studio 2022 for Windows builds.
### Fixed
* Changing the materials of a shape did not work when using GPU dynamics.
* Fixed exclusive shape binary serialization.
### Deprecated
* RepX/Xml serialization has been deprecated.
## Rigid Body
### Fixed
* A rare bug involving GPU aggregates, in which newly created actors could freely move through existing actors, has been fixed.
## Joints
### Fixed
* The D6 joint's twist drive was using the wrong actor's axis (B instead of A). This has been fixed, and it could affect joint setups in existing scenes. To fix this in existing content it might be enough to flip the joint frames of involved actors, but this may not be possible depending on which other features (joint limits, etc) have been setup for the same joint. In the worst case it might be necessary to re-tune these joints.
## Soft Body
### Fixed
* Rendering for tetmeshes in snippets had some tet faces inverted. This has been fixed.
* The voxel tetmesher won't crash anymore when called with zero elements as input.
* A bug in collision computation between a soft body and a scaled triangle mesh has been fixed.
## Particles
### Fixed
* The Poisson Sampler will not cause number overflows and crashes anymore when called with parameters that lead to too many samples.
* PxParticleClothCooker fixes to support shearing and bending constraints. This will change the behavior of newly cooked cloth assets.
## Pvd
### Fixed
* Fixed a potential crash bug when contact points are recorded through OmniPVD.
# v5.1.2
## General
### Fixed:
* Binary serialization of materials' userData.
* Fixed precision issue in index computation in Gu::HeightField::computeCellCoordinates [Issue #52](https://github.com/NVIDIA-Omniverse/PhysX/issues/52)
* Performance for SnippetCustomGeometry is now much better, particularly on Linux
* Compiler errors on Linux - [Issue #25](https://github.com/NVIDIA-Omniverse/PhysX/issues/25)
## Cooking
### Fixed
* A bug that generated non-GPU compatible convex meshes even though GPU compatibility was requested.
# v5.1.1
## General
### Changed:
* Be aware that due to reorganization of some virtual functions in the public interface the binary data layout has changed from v5.1.0. Linking code that includes the headers of v5.1.1 against binaries that have been built with an older version will likely cause problems.
### Added:
* Support for spatial and fixed tendon serialization.
### Fixed:
* Binary serialization of articulations had a bug, which got fixed.
* Includes [PR #8: Download bootstrap packages using TLS](https://github.com/NVIDIA-Omniverse/PhysX/pull/8/)
## Rigid Body
### Fixed
* A crash when colliding an SDF mesh against a sphere
## Particle Systems
### Fixed
* Particle systems now support is<> type conversion.
### Removed
* The PxParticlePhase class has been removed. It was unused.
## Vehicles2
### Changed:
* SnippetVehicle2Multithreading is now using custom profiling code to provide timings in release builds too.
# v5.1.0
## Supported Platforms
### Runtime
* Linux (tested on Ubuntu 20.04)
* Microsoft Windows 10 or later (GPU acceleration: display driver and GPU supporting CUDA 11 / CUDA ARCH 3.0)
### Development
* Microsoft Windows 10 or later
* Microsoft Visual Studio 2017, 2019
## Overview
* New SDF collisions!
* New custom geometry!
* New custom scene query system!
* New GJK queries API!
* New soft bodies!
* New mesh-vs-mesh overlap queries!
* New Vehicle SDK with customizable components and functionality!
* New gyroscopic forces!
* New gear joint and rack-and-pinion joint!
## General
### Added:
* A new function PxSetMutexProtocol() has been added exclusively for Linux OS. This function affects the way in which shdfnd::Mutex sets flags that affect OS strategies to avoid thread priority inversion. The behavior was hard-coded to PTHREAD_PRIO_INHERIT but now can be set to any of PTHREAD_PRIO_INHERIT, PTHREAD_PRIO_PROTECT, PTHREAD_PRIO_NONE. A choice of PTHREAD_PRIO_NONE can lead to significant performance improvements with large thread counts but requires care to avoid priority inversion, a phenomena that occurs when a low priority thread holds a lock contended by higher priority threads.
* A flag PxVisualizationParameter::eSIMULATION_MESH has been added to render the simulation mesh instead of the collision mesh for tetmeshes.
* A flag PxVisualizationParameter::eSDF has been added to render the SDF of a mesh instead of the collision mesh for triangle meshes with SDFs.
* PxPhysics has new functions related to the creation and retrieval of tetrahedral meshes.
### Deprecated:
* PxPhysicsInsertionCallback is deprecated. Please use PxInsertionCallback instead.
* The PxFlags::set() function has been removed. Please now use PxFlags::raise() to set a single flag, or operator= to set all flags.
* The enum values of PxTaskType have been renamed for consistency reasons. See the corresponding API documentation for details.
* The PxRegisterHeightFields, PxRegisterArticulationsReducedCoordinate and PxCreateBasePhysics functions are deprecated.
* Binary data conversion and binary meta data have been deprecated.
* PxBinaryConverter
* PxConverterReportMode
* PxGetPhysicsBinaryMetaData()
* PxSerialization::serializeCollectionToBinaryDeterministic()
* PxSerialization::dumpBinaryMetaData()
* PxSerialization::createBinaryConverter()
* PxBinaryMetaDataCallback
* PxSerializationRegistry::registerBinaryMetaDataCallback()
### Fixed:
* PxPhysics::getFoundation() and PxScene::getPhysics() did not return the correct references in scenarios where two or more dynamic libraries are built with static PhysX libraries. In such a scenario, PxPhysics or PxScene objects from dynamic library A would return the wrong references when queried inside dynamic library B.
* Collision edges (PxVisualizationParameter::eCOLLISION_EDGES) were not properly rendered when PxMeshPreprocessingFlag::eDISABLE_ACTIVE_EDGES_PRECOMPUTE is used. Using this flag means that all edges are active, but none of them were rendered. The correct thing to do is to render all of them.
* PxActorFlag::eVISUALIZATION was not properly used. Shapes of actors whose visualization flag is disabled will now get skipped as well.
* Removed duplicate closing cross-thread event for Basic.narrowPhase event.
* Replaced all custom offsetof expressions that appear to dereference a null pointer with the PX_OFFSET_OF_RT macro - implementing Github PR 396.
* Debug visualization of face normals was incorrect for triangle meshes with negative scales. This has been fixed.
### Removed:
* Scene double buffering has been completely removed. This means it is now illegal to call API write commands that make changes to the scene or to any actor or shape in a scene while the scene is simulating; that is, in-between PxScene::simulate() and PxScene::fetchResults(). Examples include PxRigidDynamic::setLinearVelocity() and PxScene::addActor(). Another example is PxShape::setLocalPose() for any shape attached to an actor that is in a scene currently being simulated. Removal of scene double buffering has similar consequences for API read commands: it is now illegal to read any property that will be modified during a simulation step. Examples include PxRigidActor::getGlobalPose() and PxConstraint::getForce(). Split simulation is slightly less restrictive in that some reads are allowed during PxScene::collide() and some writes allowed after PxScene::fetchCollision() but before PxScene::advance(). Examples include PxRigidActor::getWorldBounds() and PxArticulation::setWakeCounter(). However, it is important to note that the rules that apply to PxScene::simulate() apply equally to PxScene::advance(). In all build configs, any corresponding illegal API read or write will result in an error being issued to PxErrorStream and the illegal API call immediately returning without executing the function. A final comment is that API read operations in event callbacks remain legal.
* PxVisualizationParameter::eDEPRECATED_COLLISION_PAIRS has been removed.
* PxBroadPhaseCaps::maxNbObjects has been removed. It was unused.
* PxSceneFlag::eADAPTIVE_FORCE has been removed.
* The semi-advanced PhysX "Samples" are no longer provided. The "Snippets" continue to provide simple example code to illustrate how to use certain PhysX features. The physics demos in NVIDIA Omniverse offer more advanced samples now.
* The deprecated PxScene::setFrictionType() method has been removed. Simply set the desired friction type in PxSceneDesc.
### Changed:
* The Foundation types PxVec2, PxVec3, PxVec4, PxQuat, PxMat33, PxMat34, PxMat44 and PxTransform now have higher-accuracy implementations that use double instead of float. These are not currently used directly in the PhysX SDK but can be used by clients of the SDK if needed.
* The previous snippet SnippetRaycastCCD has been replaced with SnippetCCD. This snippet illustrates how to use different types of CCD methods, including regular, raycast and speculative CCD.
* PxDefaultCpuDispatcherCreate() has been modified to support different strategies to combat wasteful thread usage when there is no work to perform.
* The PxSimulationEventCallback functions onTrigger(), onContact() and onConstraintBreak() have slightly different behavior in that api queries to the physx actors referenced by the callbacks now return the state of the actor after the simulate step rather than the state of the actor at the detection event. At the risk of a performance penalty, the flags PxPairFlag::ePRE_SOLVER_VELOCITY and PxPairFlag::eCONTACT_EVENT_POSE may be used to retrieve the poses and velocities of the actors prior to the simulation step in the implemented onContact() function. These poses and velocities represent the state of the actors when the contact was first detected during the simulation step.
* PxCapsuleGeometry with halfHeight=0.0 are now legal.
* PxNodeIndex is now a 64-bit index, with the upper 32-bits representing the rigid body/actor ID and the lower 31-bits representing the articulation link ID and 1 bit to indicate if this is an articulation link or a rigid body. However, due to GPU memory constraints, an articulation can only support a maximum of 65536 links.
* Various PxScene::addXXX() functions now return a bool status (previously void) to detect errors more easily.
* TGS solver is now the default, PGS can still be used by setting the scene flags accordingly.
* The PxScene::addActor(), ::addActors(), ::addAggregate(), addCollection(), ::resetFiltering(), ::simulate(), ::advance(), ::collide() methods now return a boolean to denote success or failure.
* Several immediate-mode structs have been renamed from FeatherStoneArticulation to ArticulationRC (the last letters are an acronym for reduced-coordinate)
## Rigid body
### Added:
* A new flag PxConstraintFlag::eALWAYS_UPDATE has been added for constraints that should always be updated, i.e. the corresponding PxConstraintConnector::prepareData() function is called each frame automatically.
* A new flag PxConstraintFlag::eDISABLE_CONSTRAINT has been added. The solver prep functions are not called when this flag is set, effectively disabling the constraint.
* A userData parameter has been added to PxAggregate.
* A userData parameter has been added to PxConstraint.
* The PxPhysics::createAggregate() function has a new parameter. A deprecated wrapper for the previous function signature has been added.
* A new flag PxRigidBodyFlag::eENABLE_GYROSCOPIC_FORCES has been added. This introduces gyroscopic forces to rigid bodies to simulate effects like the Dzhanibekov Effect.
* A new class PxCustomGeometry has been added. User can now create custom collision shapes by implementing a set of callback functions.
* Two pre-made custom geometry implementations added in PxCustomGeometryExt extension - Cylinder and Cone.
* A new set of API functions PxGjkQuery have been added. This is intended for spatial queries on custom shapes represented by their GJK Support Mapping.
* PxMeshGeometryFlag::eTIGHT_BOUNDS has been added. This is similar to PxConvexMeshGeometryFlag::eTIGHT_BOUNDS, but for triangle meshes.
* A new broadphase has been added (PxBroadPhaseType::ePABP).
* A standalone broadphase interface has been added (see PxCreateBroadPhase and PxCreateAABBManager).
* A compliant contact model has been added. Users can now customize spring-stiffness and damping for a soft contact response.
* Triangle mesh colliders are now supported on dynamic rigid bodies if a SDF (Signed Distance Field) gets generated during cooking.
* PxSceneDesc::frictionCorrelationDistance allows to configure the distance for merging contact points into a single anchor point.
* PxSceneDesc::contactPairSlabSize can be used to define the size of the contact pool slabs.
### Removed:
* PxSceneDesc::solverOffsetSlop has been removed and can now be set per rigid body (see PxRigidBody::setContactSlopCoefficient()).
### Changed:
* PxShape::getGeometry() now returns a PxGeometry reference instead of a PxGeometryHolder. See the migration guide to 5.1 for details. The PxShape::getGeometryType() and PxShape::getXXXGeometry() functions have been deprecated as a result.
* PxMaterialFlag::eIMPROVED_PATCH_FRICTION is now enabled by default.
* PxRigidBody::setLinearVelocity() was removed and replaced with PxRigidDynamic::setLinearVelocity()
* PxRigidBody::setAngularVelocity() was removed and replaced with PxRigidDynamic::setAngularVelocity()
* PxRigidBodyFlag::eENABLE_SPECULATIVE_CCD and PxRigidBodyFlag::eENABLE_CCD can now be enabled at the same time on a given body. In this hybrid CCD mode the linear part of the motion is handled by sweeps, and the angular part of the motion is handled by speculative contacts.
### Fixed:
* Removing a shape from a sleeping dynamic rigid actor woke the actor up if it was touching a shape of a static rigid actor.
* Removing a shape from a dynamic rigid actor, did not necessarily wake up touching actors even though wakeOnLostTouch was set to true in PxRigidActor::detachShape().
* A performance problem in PxScene::getActors() has been fixed.
* Missing support for maxContactForces in the TGS solver has been added.
* A rare crash due to reading past the boundaries of a memory pool has been fixed.
* Deformable meshes using the BVH34 midphase structure did not handle collision edge flags correctly. This has been fixed.
* Collision edge flags were sometimes incorrect for negative-scaled meshes, giving birth to invalid or missed contacts. This has been fixed.
* The sphere-vs-mesh PCM contact generation had a bug that sometimes made the sphere go through the mesh due to a missed vertex contact. This has been fixed.
* Performance and stability issues when simulating convexes colliding against many triangles in complex PxTriangleMesh geometries has been improved.
* Attempting to apply a force to a kinematic rigid body will no longer lead to a crash in profile or release builds.