What a year 2003 has been; looking back I can hardly believe how far we’ve come in just 12 months. We’ve had 4 new major releases (and a few bugfixing releases too), and another one (0.13) just around the corner, with many people using the new features it offers in CVS already.

What follows is a brief summary of some of the changes that have occurred over the past year, so we can sit back just for a second and appreciate what we’ve achieved. I’d like to thank everyone who has helped make this possible, and wish everyone in our bustling community a happy and prosperous 2004!

A few highlights from 2003:

  • Mac OSX support! Sterling work from Mac users jder and tcleu started this off early in 2003, with steady improvements over the year so that now we support building under XCode, the Mac’s new IDE. temas got a PowerBook for his birthday, so he’s now the official Mac OSX maintainer (and we’re all SO jealous ;).
  • Speed! Many speed improvements were made during 2003 right across the spectrum. Low level math optimisations, some clever lazy state management in the scene graph which allows many more objects than before, use of hardware vertex buffers which allow much larger polygon counts, mesh level-of-detail reduction (through a pretty smart polygon reduction algorithm). All in all, OGRE is an even more efficient beast than it was a year ago – we even broke the 1,000 frames per second mark on some cards. It’s a greased whippet with a bum full of rocket fuel. Or something. 🙂
  • DirectX9 Rendering We upgraded the DirectX render system to DirectX9 this year, thanks to cTh for initiating this. This new rendering subsystem is backwards compatible with older cards even if they are not fully DirectX9 compliant, but allows us to do a lot more things which were too messy or badly designed in DirectX8, like supporting of vertex and fragment programs.
  • Tool Support Our tool support also increased during the year, with earthquakeProof contributing a great 3DS Max exporter. Animated meshes can now also be exported from Maya (thanks to fifty1 and macross), and Blender (thanks to hoffmajs). Support for unanimated meshes from Wings3D and Lightwave was also added.
  • OgreAddOns launched We recognised in 2003 that there were a great number of quality add-on utilities and plugins which were being created by people in the community, and we sought to make those add-ons easier for the general public to access, and to promote people to get involved with them. To this end, we created the ‘ogreaddons’ module in CVS, which now contains a number of very useful tools which are not supported by the core team, but are maintained by a number of talented members of our community. So far, we have cTh’s MeshViewer utility and 3DS scene exporter (the .scene format is an XML format for defining an overall scene developed by the community), psyclonist’s OgreFSRad (radiosity lightmap generation tool adapted from Fluid Studio’s FSRad, which uses the .scene format), AmitMathew’s ‘mage’ game framework, spoke’s PagingLandscape scene manager plugin, Proton’s dotsceneectree tool (which takes a .scene and splits up the world geometry into an octree), and macross’s Ogre4J, a Java-to-OGRE binding.
  • ReferenceApplication & Physics Demo Some new users had been concerned that because we seek to make OGRE a graphics engine only, making a full game with OGRE, including collision, physics, sound etc, would be harder than if we had made OGRE a full game engine. We have always maintained that it’s better to focus purely on graphics, and let users integrate the engine with other libraries of their choice rather than force their choice of support libraries, and indeed that has been the reason that many of our more experienced users favour OGRE. In order to allay the concerns of the less experienced, we created the ReferenceApplication library which ties OGRE together with ODE, providing full collision and physics support; this showed users that adding bouncing crates, constraining joints of various kinds etc was actually pretty simple, and what’s more, we didn’t need to bloat OGRE itself with all these other features in order to support it. Collaboration rather than assimilation!
  • Geometry enhancements We made a major change during the year in that we pretty much ripped out most of the core geometry subsystem and rewrote it; this was one of the oldest parts of the engine (obviously) and needed to be revised to take advantage of the capabilities of the latest round of graphics cards. In particular, the move from DirectX8 to DirectX9 gave us far more flexibility in how we defined our geometry. We separated the 3 core concepts of vertex declaration, buffer storage and buffer binding such that vertex data could be combined in more ways than it could before, and was more efficiently handled so that we could largely eliminate the buffer transfer bottleneck from the pipeline. We also added support for 32-bit index buffers, which went hand-in-hand with the engines ability to handle more geometry than ever before.
  • Material enhancements Ok, so this won’t actually be released as a stable version for another week or two to allow for final testing and an extra demo, but since all the functionality is there and working in the cvs version I’m going to list it here. We totally overhauled the material framework in the last couple of months, it now supports vertex and fragment programs, including assembler programs and low-level fragment shading techniques (vs_1_1, ps_2_x, arbvp1, arbfp1, NV_texture_shader/NV_register_combiners etc) and high-level programs (Cg and DirectX9 HLSL), multiple techniques per material (allowing for automatic fallbacks to be specified for older cards, and to add LOD levels to materials), and explicit multiple pass effects as well as the automatic multipass fallbacks for multitexture blends that were supported before. The end result is that you can now define a very large range of shading effects, including complex pass-per-light effects, with different approaches to deal with cards at the extreme ends of the performance range, and which can scale down in complexity as objects recede into the distance, all in a simple .material script.

Those are just the highlights – there are a ton of other interesting things that have happened this year, but I have to stop somewhere! Once again, thanks to everyone in the community who has supported us over the last 12 months, be it through contributions, or just generally getting involved in the forums. In particular I’d like to say thanks to all those people who so regularly make positive comments about OGRE in other forums and mailing lists around the web (yes, I do look, and it always brightens my day :). 2004 has a lot to live up to, but I’m sure we can find plenty more things to make it just as special as this year.