PySoy as a project started as Soya3D, which had many limitations:

  • Soya's pure  Python render loop is slow, unstable, and could only run on one core
  • implementing animation with begin_round and advance_time is confusing (and slow)
  • Soya uses the obsolete OpenGL 1.0 Display List method which made meshes immutable
  • Soya's API is cluttered with most classes packed into a single extension module
  • several poor naming choices and poor documentation due to it's author speaking English as a second language
  • development on Soya3D is slow due to lack of active leadership

The author of Soya3D rejected many proposals and patches to address these problems at their core. Instead new features, such as ODE physics and the widget system, were added as auxiliary. The engine is still in alpha stage after 7 years of development and, according to it's  Ohloh page has a handful of developers making only a few dozen commits over the past two years.

PySoy was started Summer 2006 to address these problems, first as a fork and later as a complete rewrite. We've come a long way:

  • threaded, efficient design rivals mainstream game engines
  • soy.models.Mesh objects are dynamic and fast using Vertex Buffer Objects (VBOs)
  • clean, intuitive, and well documented API makes learning easy
  • 1D, 2D, Cube, and 3D textures, video textures, and multitexturing effects such as bump mapping supported
  • advanced physics effects including fields, joints, and fast AABB-tree collision detection

... but we're not done just yet. We need your help to get there. Download and install the source, help track down bugs, suggest new features and API changes, help improve our documentation by

Talk us up on #PySoy on, grab the source from our download page, and help make the future of  Python 3D gaming!