Panda PhysX


Quite a lot has changed since I released NxPanda. For example Ageia has been bought by NVIDIA, and NVIDIA continued to support PhysX. This also means a slightly less restraining license for PhysX, and it means that hardware acceleration is not only possible on old AGEIA PhysX cards, but also on new NVIDIA graphics cards (GeForce 8-series, 9-series and 200-series).

Somewhere in the above thread I announced that I want to redesign the NxPanda wrappers for PhysX. This is more than a year ago. Well, here is the first public release of the new approach:

This time it is not a wrapper around PhysX classes, but an attempt at integrating with Panda3D. I use Panda3D’s interrogate to create Python wrapper around C++ classes which both shadow PhysX objects and provide additional functionality.

Main focus is on ease of usage, and not on feature-completeness. Also I try to make use of as many Panda3D features as possible, like the event system, the notification system, or the reference count system.

The code is still far from complete, but basic rigid body physics and character controllers work well. Next steps will be documentation and fixing problems (for version 0.5.0), then going for more functionality like raycast cars, cloth, softbodies and fluids (for version 0.6 or later).

Some highlights:

  • Windows and Linux. I compiled on Windows Vista and Ubuntu Gutsy Gibbon.
  • Automatic synchronisation of visual objects. You don’t have to update NodePath coordinates are rotations by hand.
  • Automatic hardware detection.
  • Built-in debug mode.

Like before you will need to have the PhysX System Software installed (Version 8.09.04). This can be downloaded from the official NVIDIA PhysX page (link is below). If you have recent NVIDIA graphics driver installed (GeForce v177.39 driver package and above) then you already have the PhysX System software since it is included in the driver package. A third option is to use the smaller “game installer” for PhysX 2.8.1, but I think NVIDIA will discontinue to support the game installers.

Since the 0.5.0 release will be a bugfix only release feel free to flame me with problems, bugs, suggestions or criticism.



This is a maintainance release. No big features have been added:

  • Adds documentation on class level for all classes.
  • Adds documentation on method level for many classes.
  • Adds support for fixed and variable timesteps.
  • Adds feedback filter for smoth autostepping for box controllers.
  • Displacement algorithm for controllers now supports minDist parameter.
  • Adds raycastAll method to scenes.
  • PhysKitchen::cookMesh renamed to cookTriangleMesh
  • PhysKitchen::cookConvex renamed to cookConvexMesh
  • Removed a bug in SConstruct (interrogate did not parse cxx files)
  • Removed a compile warning on Linux (delete void*)
  • Upgraded to scons-1.1.0 and added a missing import in physController.h
  • Uses quadtree pruning structure for accelerating scene squeries.

(see included file doc/HISTORY.txt)



How do you run the samples? I tried making a shortcut that ran the py files off panda’s python, just like the default samples. But the python window shows up, and then the panda window, which is black and doesn’t refresh.


Interesting. Is this Windows or Linux? What happens if you open a console, change directory to the samples directory, and then type “ppython.exe”? There should be some output on the console. Please post it.



Hmm, there doesn’t seem to be a linux download for 64-bits on the PhysX download page, unfortunately. Otherwise, I’d love to try it out.


Support for 64bit Linux has been announced for PhysX 3.0, which is sheduled somewhere next year. Sorry, no 64bit SDK so far. Hmm… by the way I don’t know if Panda PhysX compiles on 64bit Windows.



I’m on Windows. When I type that command in, I get the same as before.
The output of the console is this:

DirectStart: Starting the game. 
Warning: DirectNotify: category 'Interval' already exists 
Known pipe types: 
(all display modules loaded.)
:util(warning): Adjusting global clock's real time by 1.8599e-005 seconds.

And the Panda window is still unresponsive.


Of course it is still unresponsive. You didn’t change anything. Running it from the command prompt is purely to collect information. Now I know WHERE it hangs. Next I want to find out WHY it hangs.

So please provide some more information. Starting with your OS (version, service pack), the Panda3D version (did you compile yourself?), Panda PhysX version (there are already two, yay!). What I am most interested in is you PhysX System Software version, the PhysX info and settings from the Windows Controll Panel and please create a logfile from the “extended diagnosis” if you can (depending on your hardware you don’t have this option). How did you install the PhysX System Software (standalone or included with the NVIDIA graphics drivers), and what is your graphics card and which driver version do you have?



I am running (as reported in system properties)Windows XP Media Center Edition 2002 SP2, Panda3d 1.5.3 Windows binaries, PandaPhysX 0.4.1, PhysX system software 08.09.04, installed with the Geforce PhysX for 8800s update, running in GeForce PhysX mode on my 9600GSO(8800GS rebranded), running forceware 178.13, and the extended diagnosis is only available to real physX cards.


Back again. I would try to uninstall the “NVIDIA PhysX v8.09.04” via Control Panel (but not the “NVIDIA Drivers”), and then re-install it again. The PhysX System Software alone can be downloaded from from the NVIDIA page above. If this doesn’t help try to use an older PhysX System Software version, for example v8.04.25. I have heard rumors that the combined installer has some problems.

But before you do please download the following dll and replace it with your version. It adds a few debug outputs at the time of engine initialization. Then run this small script and post the console output:

from pandac.PandaModules import loadPrcFileData
loadPrcFileData( '', 'notify-level-physx spam' )

#import direct.directbase.DirectStart

print '--pre--'
from libpandaphysx import PhysEngine
print '--post--'



Looks like I need to redownload. (should I get the sdk?)

:physx(spam): init module
:physx(spam): @enter: _sdk=00000000

Also, (this may or may not be useful information) the physx demos, including the water physics demo, work fine.

EDIT: I reinstalled the system software, and it still hangs after:
:physx(spam): @enter: _sdk=00000000
Maybe I need to wait longer for the import to complete?
Or do I need the SDK.


I don’t think that the SDK will help. Please try to disable hardware acceleration in PhysX settings, and if this does not help try to install the older PhysX_8.04.25_SystemSoftware.exe driver:



BMCha, how could you get glxGraphicsPipe on Windows ?


Success! Disabling Geforce PhysX worked. Thanks for all the help.

And I don’t exactly understand you question ynjh_jo. That refers to Panda using OpenGL to display, right?


Up to v1.5.3, on Linux, it’s glx.
On Windows, it’s wgl or wdx.


Now I remember, I didn’t feel like typing all the generic console messages, so I found someone’s console log and copied in the first few lines. For me it actually is wgl, though.


Glad it works now, but it’s not yet “success”. Current state is that some users (you are the only one so far :slight_smile: can’t use hardware accelleration even if it should be possbile on their hardware. Not a satisfying status for me.

I will try to find a solution, but move this to PM until we have a result.

No need to typ everything.
In the console window, upper left corner of the window decoration, there is a icon, and the icon has a context menu. Select “Properties”, and in the properties window enable “Quick edit mode” and “Insert mode”. Then you can mark text with your mouse and copy it by pressing the “enter” key.



Hi enn0x,

Thanx for all the effort you are putting into this. I am just wondering, does the current version of your work support cloth simulations? or not yet?


Not yet. It’s on my todo list, but somewhere in the middle. Next things will be vehicles and more maintenance for basic features. I don’t want to propose a date, but maybe around christmas.


#20 (3.3M)

Another maintainance release. Also some code cleanup has happened and some new features have been added:

  • Adds overlap testing (sphere, capsule).
  • Adds shapeType parameter to raycasting and overlap testing.
  • Classes without PUBLISHED methods get now wrapped too, e.g. PhysConvexShape.
  • Adds a method to set ShapeFlags on shape descriptors.
  • Adds methods to set the global position & orientation on PhysActors.
  • Adds methods to set the maximum angular velocity on PhysActors.
  • Adds methods to set/get the skin width of a shape or shape descriptor.
  • Adds wheel shapes (PhysWheelShape, PhysWheelShapeDesc).
  • Adds contact reporting.
  • Adds methods to query/control sleeping of PhysActor.
  • Fixed a bug in PhysController.setH().
  • Adds documentation for several more methods.

(see included file doc/RELEASE-NOTES.txt)

The included binaries are built for Panda3D-1.5.4.