OOmadness
[3] OOmadness / Soya3D
Soya3D : Bug report - Documentation - Download - FAQ - Features - History - Mailing list - Projects using Soya - Soya on Gna! - Soya's spirit - TODO - Troubleshooting - Tutorials - Wiki
Jiba
Soya 3D is an object oriented "high level" 3D engine for Python. Somehow, Soya is to 3D what Python is to programming: an 'avant garde' 3D engine, a kind of 'UFO' in the 3D world :-). Soya allows to develop very rapidly games of other 3D apps, entirely in the Python language (contrary to most of the other engine, in which Python is limited to scripting tasks).

Moreover, Soya is easy to learn and offers pretty good performances.

Soya is used successfully in 3D games, but also in demos, scientific simulations, or educational programs (see application using Soya for screenshots).

Soya offers the features one can expect from a 3D engine, like basic scene management, cell-shading, shadows, particles systems,... as well as some unique features aiming at making 3D development easier and more rapid (see Soya's feature).

Soya is Free Software, under the GNU GPL. Soya is written in Pyrex (a mix of C and Python) and in Python.

It requires :
Soya's developpers and users can be found on the #soya IRC channel of Freenode.
(add comment, add sub-topic, edit, archives, rss)
Jiba, 11/11/12
Soya 2.0 is coming!

The most striking feature of Soya 2.0 is mini shaders. They allow to write Open GL / GL SL shaders so easily! With GL SL, you have to rewrite the entire rendering pipeline, even if you want to modify only a small part of it...

On the contrary, with Soya's mini shaders, you can write a mini shader that overrides a part of the rendering pipeline (ex customizing the lighting computation), or that adds an extra step in the rendering (ex deforming the model geometry). Then Soya assembles all mini shaders, adds the missing pieces of the rendering pipeline, and generates a GL SL shader.

Additionally, Soya's mini shaders can be written with a Python-like syntax ;)

Soya provides 16 classes mini shaders, each corresponding to a specific part of the rendering pipeline. Here is an example of a "camera-space deform" mini shader, which deforms the model's geometry in camera space:

wavy_mini_shader = soya.MiniShader("wavy", """
uniform float self.time
def void cameraspace_deform_mini_shader():
  current_vertex.x = current_vertex.x + 0.2 * sin(0.2 * self.time + 3 * current_vertex.y)
""")

my_body.add_mini_shader(wavy_mini_shader())




Mini shaders can be associated to any object: a Model, a Body (an instance of Model), a World (a group of other 3D object) or a Material. When associating a mini shader to a World, it is inherited by all objects inside this World, and automagically combined with objects' own mini shaders. For more details about mini shaders, see the mini-shader-* tutos!

Want to try and start hacking with Soya 2? You're welcome! The development version can be obtained on this mercurial repository: http://hg.tuxfamily.org//mercurialroot/oomadness/soya2.

Other new features include:
  • Support both Python 2.7 and 3.3,
  • Open GL SL shader support,
  • new exporters for Blender 2.6x, with a bugfixed Blender => Cal3D exporter, able to take into account vertex location, normal and texture coords when merging vertices,
  • LOD support for models,
  • pre-rendered background, usefull for slow computer or old-style games,
  • Partial Open GL ES support (not yet finished).
Jiba, 24/01/10
Soya 0.15rc1 is out !

Here is the Changelog :

* January 2009 : Soya3D 0.15rc1 * ODE 10 compatibility (required) * New collide property for lazer. * Quiet mode for soya initialisation and quit * New event management system. round event are now stored in main_loop.event and main_loop.raw_event. * New round_task attribut for main_loop. * Allow screenshot from backbuffer. * Allow to use WorldStep instead of WorldQuickStep for ODE iteration. * Allow None as angular_velocity, linear_velocity, torque, or force. * Allow None as hi_stop, lo_stop * Bugfixes * Fix delta_x and delta_y in coalesced event * Fix AngularMotorJoint API * soya initialisation now write in the common stdout and stderr * Fix font related segfault when soya wasn't initialised * Fix Pudding MainLoop (thanks David Martinez) * Work-around for OpenAL bug for absolute sound sources
Jiba, 30/08/08
The new version of Soya, 0.14, is out. Here is the complete changelog for 0.14:

* January 2008 : Soya3D 0.14rc1 * Allow the centre of mass of a Body to be anywhere in its local coordinate system (thanks Greg Ewing) * Improve tutorial README (thanks Jacques Rebourcier) * Update for Pyrex 0.9.6.2 (thanks Greg Ewing) * Blender => Cal3D can now run with Python 2.3 (thanks Greg Ewing) * New GUI module soya.gui * Bugfixes: * Fix the weird segfaulting bug in terrain (thanks Souvarine) * Fix GL_INVALID_ENUM crash with the OSS ATI DRI driver (thanks Zoltan Dome) * Fix data/worldS and data/blender in the yet-in * Fix speed-1.py tuto * Fog was activated by error on partial camera with no atmosphere * Fix descender computation in font * Fix ODE on terrain (tuto ode-collision-8-terrain.py)

* August 2008 : Soya3D 0.14 * Improved the cell-shading algorithm, by anti-aliasing outlines and disabling normal lighting when cell-shading is used * Bugfixes: * When re-starting a MainLoop, define it as the current MainLoop (aka. soya.MAIN_LOOP)
Jiba, 20/01/08
A new version of Soya, 0.14rc1, is out. This release includes many bugfixes and has been updated for latest release of Pyrex. It also includes a new GUI module called soya.gui (see the gui-* tutos for demo).

Here is the complete changelog:

* January 2008 : Soya3D 0.14rc1 * Allow the centre of mass of a Body to be anywhere in its local coordinate system (thanks Greg Ewing) * Improve tutorial README (thanks Jacques Rebourcier) * Update for Pyrex 0.9.6.2 (thanks Greg Ewing) * Blender => Cal3D can now run with Python 2.3 (thanks Greg Ewing) * New GUI module soya.gui * Bugfixes: * Fix the weird segfaulting bug in terrain (thanks Souvarine) * Fix GL_INVALID_ENUM crash with the OSS ATI DRI driver (thanks Zoltan Dome) * Fix data/worldS and data/blender in the yet-in * Fix speed-1.py tuto * Fog was activated by error on partial camera with no atmosphere * Fix descender computation in font * Fix ODE on terrain (tuto ode-collision-8-terrain.py)
Jiba, 11/11/07
I'm currently working on a new widget system for Soya.

It will feature advanced widgets such as scroll panes or flying windows, as well as a nice automatic dimensioning system, even better than GTK and Tk ones !

For now, I'm focusing on the widget's logic, and not on their graphical aspect.

The final goal being to add Soya's support to EditObj 2, in order to be able to generate dialog boxes in Soya for editing various game objects. Can be usefull for game editor but also for many complex games (roleplaying games, strategy games,...). I'm precisely thinking about new game projects in that area.

Here are some screenshots using various styles :

Jiba, 24/01/07
[130] Soya 0.13
Here is the final release of Soya 0.13 !

It is the first version that includes the works of our two Google Summer of Code student, Marmoute and Palle. I've also integrated the soya guide (the "Yet-in") in the tutorial pack (since i've changed the licence to FDL without invariant, there is no longer any problem with reguard to Debian).

Changelog :
  • New ODE integration (thanks Marmoute!)
  • New Blender -> Cal3D exporter (thanks Palle!) The new exporter is now automatically used by the auto-exporter. It REQUIRES Blender >= 2.42
  • BSP system (work in progress, thanks Souvarine!)
  • CoordSyst.solid is no longer boolean, but a 32-bit-length bitfield (thanks Souvarine!)
  • Add RaypickContext.get_item() (thanks Souvarine)
  • Better font loading under MacOS X (thanks Greg Ewing)
  • Tofu integrated
  • CoordSystSpeed added
  • CoordSystState now support automatic coordinate system conversion (when used with interpolate()), and has a convert_to() method
  • Bugfixes:
    • Fixes crash on keycodes > 255, and allows Delete as well as Backspace for erasing characters, in pudding (thanks Greg Ewing)
    • Severals memory leaks have been fixed (in particular on Terrains and CoordSystStates)
    • soya.widget.default_font can now be saved as any other fonts
    • Mesh deformation were buged on cellshaded models
    • Compile with -fsigned-char because on Mac, chars are by default unsigned
    • The file caching neighbors was not cleaned when animated models were modifed
Jiba, 12/12/06
Soya 0.13rc1 is out. It is the first version that includes the works of our two Google Summer of Code student, Marmoute and Palle. The soya guide (the "yet-in") is now integrated in the tutorial pack.

Here is the changelog:
  • New ODE integration (thanks Marmoute!)
  • New Blender -> Cal3D exporter (thanks Palle!) The new exporter is now automatically used by the auto-exporter. It REQUIRES Blender >= 2.42
  • BSP system (work in progress, thanks Souvarine!)
  • CoordSyst.solid is no longer boolean, but a 32-bit-length bitfield (thanks Souvarine!)
  • Add RaypickContext.get_item() (thanks Souvarine)
  • Better font loading under MacOS X (thanks Greg Ewing)
  • CoordSystSpeed added
  • CoordSystState now support automatic coordinate system conversion (when used with interpolate()), and has a convert_to() method
  • Bugfixes:
    • Fixes crash on keycodes > 255, and allows Delete as well as Backspace for erasing characters, in pudding (thanks Greg Ewing)
    • Severals memory leaks have been fixed (in particular on Terrains and CoordSystStates)
    • soya.widget.default_font can now be saved as any other fonts
    • Mesh deformation were buged on cellshaded models
    • Compile with -fsigned-char because on Mac, chars are by default unsigned
    • The file caching neighbors was not cleaned when animated models were modifed
Jiba, 19/07/06
This new version proposes a new sound API, a new automatic system for optimizing static object, a not-yet-stable mesh deforming API, as well as many other minor additions. It also renames many Soya objects that were having weird names; they have been renamed to more comprehensive names (however, backward-compatibility is fully ensured).
Jiba, 11/06/06
This version fix some indent errors in 3DS max and OBJ/MTL exporter scripts, and some troubles in rotation method of CoordSystState objects.
Jiba, 11/06/06
This release allows to use Cerealizer instead of cPickle (voir les tutoriels basic-savingfile-* et basic-loadingfile-*). Contrary to Pickle, Cerealizer is safe, which is useful for network game! The release also add a listbox widget to Pudding (thanks Reto :-). "rotate_x", "rotate_y", "rotate_z" aliases have been added to the "rotate_lateral", "rotate_vertical" and "rotate_incline" methods.

Finally, there are several bugfixes on shadows, cellshading and raypicking on Cal3D models.