Archive for the ‘PhysX SDK’ Category
Quite an interesting beginning of GDC 2017 – NVIDIA has not only presented their newest flagship GPU, GeForce GTX 1080 Ti, but also announced several additions to the GameWorks libraries.
Let’s take a closer look.
FleX & Flow
NVIDIA FleX, unified particle-based solver, and NVIDIA Flow, an engine for simulation of smoke and fire, now both feature hardware agnostic DX12 implementation !
This is exciting news not only for gamers, but also for 3d party companies, already utilizing FleX in their products, such as Lucid Physics from Ephere.
NVIDIA has finally released first public version of the newest PhysX SDK 3.4 (and corresponding APEX 1.4). Please mind the pre-release status, final SDK should be available end of February 2017.
[Update - March 01 2017]: Final release of PhysX SDK 3.4 is now released on GitHub
One of the biggest features of the SDK 3.4 is the introduction of the GPU accelerated rigid body feature (GRB). It supports the entire rigid body pipeline feature-set (except for articulations). The state of GPU rigid bodies can be modified and queried using the exact same API as used for CPU rigid bodies. GPU rigid bodies can interact with clothing and particles in the same way that CPU rigid bodies can and can easily be used in conjunction with character controllers and vehicles.
Leveraging computing capabilities of a graphic processor, GPU accelerated rigid bodies can provide significant performance advantages over CPU simulation in scenes with several thousand active rigid bodies.
At Game Developer Conference 2016 (GDC), NVIDIA has announced the GameWorks 3.1 development kit, which introduces several new physics simulation solutions – PhysX GRB and NVIDIA Flow. Let’s take a look at them more closely:
PhysX GRB is the new GPU accelerated Rigid Body simulation pipeline. It is based on heavily modified branch of PhysX SDK 3.4, but has all the features of the standard SDK and almost identical API. PhysX GRB is currently utilizing CUDA and requires NVIDIA card for GPU acceleration.
Unlike previous implementations, PhysX GRB is featuring hybrid CPU/GPU rigid body solver, and the simulation can be executed either on CPU or GPU with almost no difference in behavior, supported object types or features (GPU articulations are not implemented yet, however).
GRB provides GPU accelerated broad phase, contact generation, constraint solver and body/shape management. In addition, it introduces new implementations of island management and pair management that have been optimized to tolerate the order of magnitude more complex scenes that can be simulated on GPU compared to CPU. New mechanisms to parallelize event notification callbacks and a new feature to lazily update scene query asynchronously are also provided.
NVIDIA FleX is the new GPU accelerated particle-based simulation library. The core idea of FleX is that every object is represented as a system of particles connected by constraints. Such unified representation allows efficient modeling of many different materials and natural interaction between elements of different types, for example, two-way coupling between rigid bodies and fluids.
Update: FLEX SDK 0.8 can now be downloaded through GameWorks Download Center
Interested developers may be pleased to hear that NVIDIA has already completed basic integration of FleX solver into Unreal Engine 4, and it can be freely obtained with one specific UE4 source code branch at GitHub.
Standalone FleX SDK and sample demo executable (as showcased below) are also included in the package.
To get access to the UE4 source code branch with FleX integration few steps are required:
Quite astonishing news are coming from Game Developers Conference 2015 – NVIDIA has just announced that latest PhysX SDK 3.3 is now available for free with full source code for Windows, Linux, OS X and Android. Source code release of APEX Destruction and APEX Clothing modules is also planned.
Update: iOS source now added !
Previously, only binary distrubutions of PhysX SDK were available for free for commercial (Windows PC) and non-commercial (Linux, OS X, Android) use. PhysX engine for consoles if still subject of paid licensing.
This desicion will certanly help to push PhysX’s already wide adoption among developers even further and put an additional stress on competitive solutions.
Full instruction on PhysX SDK source code access can be found here.
Update: Latest source code branch is located here – github.com/NVIDIAGameWorks/PhysX-3.3
Following the PhysX SDK 3.3.2 release, updated APEX SDK 1.3.2 is available for download.
Update March 2015: Bug-fixing APEX SDK 3.3.3 release is available.
Despite the minor version number, APEX 1.3.2 includes numerous additions to Destruction and Particles modules.
|APEX SDK 1.3.2: Release Notes|
APEX Framework 1.3.2
- Added NVTX profiling support for non-release builds. Traces can be captured using Parallel Nsight Analysis Tools. NVTX is supported only for Windows and Android.
- Added ability to change render resource lock behavior or disable locking altogether, to improve performance. The setting is per module. See NxModule::setRenderLockMode and NxApexRenderLockMode.
- Added ability to disable potentially expensive stat collection if it’s not needed. See NxApexSDK::setEnableApexStats.
- Fixed crash if application creates APEX SDK after already connecting to PVD.
New PhysX SDK 3.3.2 release is available for download.
Update March 2015: Bug-fixing PhysX SDK 3.3.3 release is available. Release Notes.
Windows, Linux, OS X, Android and iOS builds are now available for free with source code.
Among various bug-fixes, this version also features support for GPU acceleration on Linux platform (CUDA-capable devices only) and reworked documentation.
|PhysX SDK 3.3.2: Release Notes|
- The PhysXCommon/64.dll, nvcuda.dll and PhysXUpdateLoader/64.dll are loaded and checked for the NVIDIA Corporation digital signature. The signature is expected on all NVIDIA Corporation provided dlls. The application will exit if the signature check fails.
- Added the PxDefaultBufferedProfiler extension for simplified SDK profile events extraction.
- PxSceneDesc::sanityBounds allows a bounding box to be set for validating the position coordinates of inserted or updated rigid actors and articulations.
- Linux: Now supports GPU PhysX.
- Added set/getRunProfiled() for PxDefaultCpuDispatcher to control profiling at task level.
- Android: Support for x86 based devices was added.
- PxProfileEventHandler::durationToNanoseconds() added. Translates event duration in timestamp (cycles) into nanoseconds.
- Added SnippetProfileZone to show how to retrieve profiling information.
- Added SnippetCustomJoint to better illustrate custom joint implementation, and removed SnippetExtension.
- Added SnippetStepper to demonstrate kinematic updates while substepping with tasks.
- Significant revision of the user’s guide. Both structure and most content have been modified.
- PxTask::runProfiled() now takes threadId as a parameter.
- The static pruner now issues a performance warning in debug and checked configurations when a tree rebuild occurs and the tree is not empty.
- PxSceneDesc::staticStructure now defaults to PxPruningStructure::eDYNAMIC_AABB_TREE.
- Linux: Switched to shared libraries.
- Profile zone event names changed to match function calls.
- Overlapping read/write errors will now issue a PxErrorCode::eINVALID_OPERATION rather than PxErrorCode::eDEBUG_INFO.
- Improved SnippetToleranceScale to better demonstrate the intended use case.
- Increased 126 characters limit for warnings on unix platforms, 1k limit on all platforms.
- PhysXCommon dll load within PhysX dll now respects dll name. Please see the manual’s PhysXCommon DLL load section.
- Fixed search function of user’s guide.
- Foundation math classes now have in-place arithmetic operators (+= etc).
- Indexing operators taking signed integers in PxVec3, PxVec4, PxMat33, PxMat44, PxStrideIterator have been deprecated.
NVIDIA has released minor 3.3.1 update for PhysX SDK 3.3 branch.
Update: PhysX SDK 3.3.2 released
PhysX SDK 3.3.1 release is mostly focused on various bug-fixes and optimizations.
|PhysX SDK 3.3.1: Release Notes|
- The friction model can now be changed after scene instantiation with PxScene::setFrictionType. The friction model can also be queried with PxScene::getFrictionType.
- PxDefaultSimulationFilterShader now supports particles and cloth as well.
- PxSimulationFilterCallback: the provided actor and shape pointers are now defined as const. Note: this is no behavior change, it was never allowed to write to those objects from within the callback.
- The PxTriangleMeshFlag::eHAS_16BIT_TRIANGLE_INDICES and PxTriangleMeshFlag::eHAS_ADJACENCY_INFO enums have been deprecated. Please use PxTriangleMeshFlag::e16_BIT_INDICES and PxTriangleMeshFlag::eADJACENCY_INFO instead.
- Removed following functions from the API for platforms which do not support CUDA: PxGetSuggestedCudaDeviceOrdinal, PxCreateCudaContextManager, PxLoadPhysxGPUModule.
- PxShape::getMaterialFromInternalFaceIndex will now return a NULL pointer and produce a warning for input faceIndex value of 0xFFFFffff. This change only applies to mesh and heightfield shapes.
- Fixed concurrency issue on windows. Calling PxScene::simulate on multiple scenes concurrently may have caused a deadlock. This only happened if the scenes shared a single PxCpuDispatcher and the dispatcher was configured to use one worker thread only.
In comparison to PhysX 2.8 branch, PhysX 3 will bring a significant performance improvements and a broad amount of new features, such as advanced vehicle module, new cloth solver, reworked scene queries and CCD systems, full multi-threading support, etc.
New major APEX SDK 1.3 release is now available for public download.
Update: APEX SDK 1.3.1 released
1.3 version is featuring support for newest PhysX SDK 3.3.0 and also includes variety of improvements and new features for APEX modules.
Please note that corresponding authoring tools are required – PhysXLab 1.3 and DCC plug-ins 3.0
|APEX SDK 1.3: Feature Highlights|
APEX 1.3 now features a single Legacy Module (APEX_Legacy).
In APEX 1.2 every module had its own legacy module. For example, if an application uses APEX clothing and destruction, in APEX 1.2 the application would need to load both APEX_Clothing_Legacy and APEX_Destructible_Legacy.
However, assets created with APEX 1.1 or 1.2 should “just work” with APEX 1.3. The application must load the legacy module, which contains all the code that allows APEX to automatically upgrade assets to the latest version.
APEX Destruction and APEX Clothing modules can now utilize Render Proxies.
The rendering of destructibles and cloth can now be managed by a new object that is independent of the actors themselves. By default you will not see a change, but you may detach this object from the actors, meaning that the render data will not get deleted when the actors are deleted. You may delete the renderable when you’re done with it.
This is useful for multi-threaded renderers which may have the render data queued up even after the destructible or clothing actor is deleted in the main thread.
Speaking of Destruction, so called Behaviour Groups functionality was added to authoring pipeline.
Some common parameters, such as damage threshold, damage spread, density, etc., are now contained in “Behavior Groups“. Every chunk references a behavior group by index, allowing the user to customize behaviors for different chunks within single asset.