To begin with, let us highlight the key functions within the game. Every time you run a game, a piece of software that is called the game engine loads itself into the memory. The game engine is like a kernel for the game. It will manage all resources, levels and your in-game progression. Everything that you see, hear or do, is managed by the engine. The engine itself is a collection of services that provide these capabilities.
Once the engine is loaded, it uses the rendering subsystem to set your screen and start the game interface—legal screens, intros and menu systems. Using this rendering and the game logic through the game engine, you begin your gaming session.Every thing that you see is taken care of by the rendering engine. So, we will look at a rendering engine—OGRE 3D to be specific.
A very integral part of your game experience is also the sound design and implementation. Without good sound integration, it will be very difficult for a game to sweep you off your feet. We will look at one of the cutting edge
sound libraries out there, called Open AL.
Now, since a game is an emulation of the real world, it has to have the richness and detail of the real world. There are two aspects to this: visual richness and behavioural richness. Things not only need to look real, they also have to behave real. The models and textures used in your game, plus the capabilities of your rendering engine will determine the first aspect, while the physics and AI employed in your game determine the later. We will look at Blender and how it can help you with visual richness, while we will consider the Bullet Physics library to see how physics and AI can be taken care of.
Lastly, a great multi-player experience is something that adds a lot of value to your game in the current networked world. We will look at how RakNet helps in adding that bang to your multi-player experience.Since we are looking at five tools—all in one—we will keep it simple this time and work individually with each tool at a later opportunity. Also, since we don’t claim to be experts in the field and are only learning, most of the content here is derived from our researches over the Internet, rather than personal experience.
Object-Oriented Graphics Rendering Engine (or OGRE, for short) is a highly modular graphics rendering engine. Its job is to interface through the available render systems to connect to the underlying graphics hardware on your computer, process the required data and send it to the display device through the graphics hardware. To put it more clearly: OGRE takes all your levels, players, along with the pretty images and sends it to your graphics card for processing. It does so by connecting to one of the two interfaces available — DirectX or OpenGL. Through one of these render systems, the data is sent to the graphics card to be processed and displayed on your screen.
OGRE is written in objected-oriented C++ with many language bindings available for developers using other languages. It is clean and easily-understandable code, has an immense amount of documentation (API, wikis and forums) and a highly active developer community ( forums and IRC channels), which makes it a suitable choice for all sorts of development requirements. It sure does take an experienced C++ developer with some graphics programming experience to actually go into the details and understand the inner working of the behemoth, but with a good knowledge of STL and object-oriented programming in C++, you can be well on your way to making games or other applications that require a 3D
OGRE is highly modular—its pluggable architecture makes adding new features a cakewalk. From custom scene graphs—that is, compositors that post process your screens to input and GUI systems—almost everything can be plugged in and used.This level of abstraction from the underlying system gives developers more time to work on the bigger picture rather than get down and dirty, pushing vertices around.
OGRE is a scene graph-based engine, with all of OGRE’s scene managers plugged in to the root of the engine. OGRE comes with an octree, BSP and Paging Landscape scene manager that has support for progressive LOD (level of detail)—automatically or manually created—with many others written and supported by its 10-year-old community.
This multi-platform engine runs on Linux, Mac, Windows and other platforms like the XBox360, PS3 and the iPhone, to name a few. Its flexible licence makes it an optimal choice for both Free/OSS and commercial projects. OGRE was earlier distributed under the GPL and LGPL, but from 1.7 (Cthugha) onwards, it uses the MIT License.
OGRE is purely hardware driven—it runs on your graphics hardware, dedicated or otherwise. There has always been a question of why unlike other engines (like IRRLICHT, with multiple software renderers for fallback) OGRE sticks to being purely hardware driven. The simple answer is that it focuses on cutting-edge technology and supporting the latest hardware-driven features. OGRE tries to stay lean and mean, focusing on what it does best, and letting others do what they do best. It supports Vertex and Fragment programs as well as shaders written in GLSL, HLSL, Cg and assembler.
A recent addition to OGRE’s feature list is the new compositing manager and its scripting language. The compositing manager gives the developers full screen post processing for effects such as blooming, blurring, noise, HDR and much more. OGRE has an animation engine with full hardware skinning support and also complete pose mixing. This enables you to blend between animation poses, giving you smoother and more realistic animation. It also comes with a highly extensible particle manager with customisable emitters and effectors.
Apart from being a wonderful graphics rendering engine, OGRE also deals with minimal windowing, memory debugging, input, GUI systems, resource loading and management, to name a few. There are many community projects that also deal with content creation, as well as the export and import of pipelines for the engine.
OGRE can be seen in action in many free and open source interactive applications and games, as well as in many commercially successful projects like Jack Keane,Venetica, Torchlight and Zombie Driver, to name a few.
Open Audio Library (Open AL)
Open AL is a free, cross-platform audio API. The API and coding conventions resemble Open GL, and the library
has the best multi-channel 3D positional sound support.The library is, currently, supported by Creative Technology and Apple, with an active community backing. It is an excellent DirectSound alternative.
The library models a collection of audio sources moving in a 3D space that are heard by a single listener somewhere in that space. The basic OpenAL objects are: a listener, a source, and a buffer. There can be a large number of buffers, which contain audio data. Each buffer can be attached to one or more sources, which represent points in the 3D space that emit some sound (audio). There is always one listener object (per audio context), which represents the position where the sources are heard—rendering is done from the perspective of the listener.
The source objects point to an audio buffer, besides the velocity, position, intensity and direction of sound. The audio buffer is the audio data. The listener object contains the velocity, position and direction of the listener (mostly your in-game character). With the help of these three objects, OpenAL helps recreate natural 3D sound in the virtual world (with natural effects such as the Doppler Effect). The library is built with an extensible architecture that makes it very agile and flexible for the future as well.
The API is highly cross-platform and binaries are available for the following platforms: Mac OSX, iPhone, GNU/Linux (OSS/ALSA), BSD, Solaris, IRIX, Windows, Xbox/360, AmigaOS 3.x, and MorphOS. New platform support is not likely in the near future, but this in itself is an exhaustive list.
And if you are wondering what games use Open AL, the following are just some examples: Battlefield 2, Bioshock, Colin McRae: DiRT, Doom 3, Ghost Recon: Advanced Warfighter, Lineage 2, Quake 4, Race Driver: GRID, and Unreal Torunament 2004. The Open AL is also an integral part of the id Tech 3/4/5 and Unreal Engine 2/3 engines.The library is licensed under LGPL. To work with Open AL, look at the detailed walkthroughs on Open AL by Dev Master (www.devmaster.net/articles.php?catID=6).
Once an in-house production software and later freed by its creators, Blender is the animation/CG industry’s new kid on the block. Blender is a multi-platform 3D graphics application used for modelling, texturing, rigging, animating, etc. Its source code was opened and it is now released under the GNU GPL. It is also a very powerful tool when it comes to UV unwrapping, 2D/3D painting, skinning, sculpting, water-creation, physics, particle simulations… and no, the list doesn’t quite end yet, but goes on to include post production tools as well, like a non-linear editing suite with a compositing tool to boot. Blender can also be used to create interactive 3D applications and games. It is available on multiple platforms including Linux, Windows, and Mac OSX. There are official and unofficial ports to other popular operating systems as well.
Blender has a light footprint and an intuitive interface, and covers almost all features of its commercial counterparts, even doing a better job at some places. Blender goes a step further to be a single resource for all your 3D production and post-production needs. It treads into real-time rendering and games with its integrated game engine. Not stopping there, Blender provides game logic, real-time physics and a workflow that connects your asset creation pipeline to your post-production and extends it to the realm of game development. If you have worked on games or animation projects, you will have seen that both share a very similar development/ production pipeline, only dividing towards the end, where one is rendered offline and the other in real-time. So it is an obvious choice to extend a well-built 3D production and animation suite to game development.
Most of Blender is written in C/C++ and Python. It can be extended using plug-ins and can be customised using Python scripts as well. Blender sports many of the features that are on par with 3D CGI production powerhouses, like Maya and Softimage. It supports a variety of geometric primitives, including polygon meshes, Bezier curves, NURBS surfaces, metaballs, fast subdivision surface modelling, digital sculpting, and outline fonts. It supports key-framed animation tools including inverse kinematics, armature (skeletal), hook, curve and lattice-based deformations, shape keys (morphing), non-linear animation, constraints, vertex weighting, soft body dynamics including mesh collision detection, LBM fluid dynamics, bullet rigid body dynamics, particle-based hair, and a particle system with collision detection. Blender renders geometry in all its glory — lit, textured and composited with the integrated YafRay ray tracer.
It has an intuitive interface, but it still can be a bit of a steep learning curve for even those who have experience in other 3D graphics applications like Maya or 3D Max, apart from those who have no previous experience. It will take almost the same amount of time to master Blender as it will to get comfortable with Maya and Max. The Blender foundation tries to stay focused on creating cutting-edge tools and adding new functionality in Blender, while trying to make the learning process easy by conducting workshops, releasing DVDs, updating the wiki, tutorials and other documentation. The ever-growing community of Blender artists fuels the fire that burns in the hearts and minds of everyone involved with Blender.
Bullet Physics is a professional collision detection,rigid body and soft body dynamics library. The library is free for commercial use under the ZLib License. The library is under active development and its roadmap includes support for CUDA, OpenCL, and the fracture of rigid bones.
The library is a cross-platform library and supports Playstation 3, Xbox 360, Wii, PCs with the Linux and Mac OSX, and the iPhone. It has a very advanced feature set:
Discrete and continuous collision detection including ray and convex sweet test. Support for all basic primitive shapes and concave/convex meshes. Fast and stable rigid body dynamics, vehicle dynamics, character control and slides, hinge physics, plus twist constraint for ragdoll physics.
Soft body dynamics for cloth, hair/fur, rope objects and deformable volumes, supporting two-way interaction with rigid bodies plus binary constraints. Integration with major development tools such as Maya, Blender and COLLADA. Completely written in C++ and the source has been open sourced under the Zlib License. As Bullet is fairly unknown in the general gamer circles (unlike Blender, OGRE and Open AL), you may be wondering which projects have used it. How about: Grand Theft Auto 4, Sony’s Free Realms, and 2012 (last year’s Hollywood blockbuster). Bullet Physics is also included within the RAGE Engine of Rockstar Games.
RakNet is a cross-platform, open source, object-oriented networking library for game programmers, written in C++ by RakkarSoft. A lower-level framework powers the higher-level features such as game object replication, voice chat, and patching binaries. It is a DirectPlay alternative touted as being better than the DirectX component due to its simpler integration. The library uses UDP for all network connections and is written primarily for game development. The library is available in three different licensing models: GPL, shareware and commercial licences. RakNet also offers free licences for indie developers.
The major features of the library include:
Object replication: Automatically creates, destroys, serialises and transmits game objects
Player lobby: Database-powered lobby with support for friends, rooms, quick matches, and ranking
Secure connections: Support for SHA1, AES128, SYN cookies and RSA
A robust communication layer with automatic flow control, message ordering on multiple channels, message coalescence, and splitting and reassembly of packets.
An autopatcher to automatically patch the software at the gamer’s end with the latest updates
Support for the various C/C++ remote procedure calls. Support for voice communication, including bindings for Port Audio, FMOD, and DirectSound, besides NAT Punchthrough for voice support over P2P applications.
As it’s also used as a commercial tool, most applications of RakNet are protected under NDAs. So a finite list of games using RakNet is not freely available. However, RakNet is being used in a number of games by Epic Games China, Codemasters, and the Unity Engine. It was also used in the games Crashday and Hyperball Racing.
In a nutshell
Yes, yes, the tools look totally awesome, we know… and they sound jam packed with features and efficiency. Yes! You will be surprised with how frequently they are used in major titles. We suggest you check out the Further Reading section and try out these tools for yourself.
Step up and reach out—all the awesomeness is within reach. Sing the song!
The author is an official Mozilla Representative in India. He is also part of an electronic rock band, Ctrl Alt Delhi. He has recently started his own game development company, Hashstash Studios, and spends his time making games and jamming with friends.