PhysX Integration
ATTENTION:
The Nvidia PhysX integration has been superseded by the Jolt Physics integration. Support for Jolt is available on all platforms, whereas PhysX was only ever available on Windows. All future development will focus on improving the Jolt integration. For the time being, the PhysX integration is still available, though it is disabled by default. To enable PhysX support, you have to enable EZ_BUILD_PHYSX in the CMake configuration.
NVIDIA PhysX is an open source physics engine. It computes the physical interactions between objects using rigid body dynamics.
Physics engines are a vital part in most 3D games, to make objects collide and interact with each other convincingly. An important feature are also raycasts and shape queries which are used to detect objects and analyze the state of the world.
Enable PhysX Support
See CMake Setup on how to enable PhysX support in your build. In pre-compiled release packages, PhysX support is enabled.
Working with PhysX
The most important PhysX functionality is exposed through components, as well as through TypeScript.
When you write custom C++ code, you can access the most important functionality, like raycasts and shape queries, through the abstract ezPhysicsWorldModuleInterface
, which is implementation independent. If you need to access PhysX features that are not exposed in EZ, you can cast that interface to ezPhysXWorldModule
and directly work with PxScene
. For PhysX details, refer to its documentation.
Feature Overview
You use components to tell PhysX which objects should be considered for its simulation, and how. In PhysX objects participating in the simulation are called actors but they are often also referred to as bodies.
How to set up actors is described here. Reading up on actors is the best starting point.
Actors are made up of shapes, such as spheres, boxes, capsules and meshes. Shapes are described here.
Actors can be physically linked, to constrain their movement. This is how you would set up a door hinge for example. Linking two actors is accomplished using joints.
To make a player or NPC walk through a physically simulated scene, you need something that computes how the character collides with walls, climbs stairs, slides down slopes, and so on. This functionality is provided by a so called character controller.
Often games have invisible areas that either need to be reached as a goal, or that activate something. Such areas are called triggers.
Several non-PhysX components either use the available physics engine, or even expose new functionality. For example the raycast placement component does a raycast (using the abstract physics interface) and exposes the hit position to the user by moving a linked object there. The area damage component does a shape query and both damages and pushes the found physical objects.