This report is written for the MSc course Engine Programming 2009 on IT University of Denmark. I have published the report here, since I feel that the content of the report is highly relevant for people who is considering using one of the these engines.
Introduction
In this report I’ll compare three different 3D game engines that is targeted indie game developers. The engines are XNA, Unity3D and Blender Game Engine. They are all free or low cost engines and are all popular choices among indie game developers, students and hobbyists.
All three engines have one thing in common; They all provide an IDE for creating games, where as many other game engines only consist of runtime libraries, API and some documentation. For each of the engines, I’ll explain the nature of the engines and list the underlying technologies the engine is build upon. I’ll focus on easy-of-use, since I believe this is the most important feature of a indie game engine.
In the end, I’ll give a comparison of the three engines.
After reading this report, you should have a overview of what the three engines provide, in what way they should be used and whom the preferred user are.
XNA
The XNA (XNA’s Not Acronymed) framework is Microsoft’s platform for games. XNA is a set of libraries that help the developer in creating games for Windows, XBox 360 and the Zune media player. XNA is build on the .NET 2.0 framework, this means that you can use any of the .NET languages (C#, VB.NET, J#) as they can be compiled into the Common Intermediate Language (CIL). However recommended way to use XNA is using the XNA Game Studio (an extension to Microsoft Visual Studio) that only supports the C# language.
Microsoft released the XNA Game Studio Express (XNA 1.0) in december 2006. In april 2007 XNA Game Studio Express Refresh was released; This release made it possible to compile Xbox 360 binaries and share them with other. Developing for the Xbox requires a Creator’s Club Premium members (a paid membership).
XNA is now available in version 3.1. The features available in the current XNA are: Video, Audio, Network, 3D models, 2D images, input devices, network (both for Xbox Live and XNA Framework games), data storage and animation.
Usage
Then creating games in XNA using the XNA Game Studio you startup by creating a new XNA game project (such as Windows Game or Xbox Game). This project contains a set of source files that creates a empty game application. The XNA take care of the game main loop, all you have to do is to implement the following methods:
Function |
Description |
Update() |
Updates the game logic |
Draw() |
Draw the game to the screen |
LoadContent() |
Loads resources used for the game |
UnloadContent() |
Unloads resources |
Resources such as 3D models, 2D images, sound and video can be added to the projects as asserts. These asserts are accessible from the code.
Developing games in XNA is very code oriented; When you have written your code, you press “Build and run” to see how the game looks.
Not a full game engine
It is worth mentioning that Microsoft doesn’t define XNA as a game engine, but rather a set of libraries that makes game development easier, such as wrapping Direct3D and providing loaders for several 3D formats. The XNA library lacks some of the typical game engine features such as a scene graph and a physics engine, but is still widely used small and simple 2D and 3D games. If you are going to make larger games in 3D, there exists game engines build on top of XNA. One of the most popular engines for XNA is called Ox and has features like scene graph, visual scene editors, visual GUI editor, particle system and camera control. Ox is open source and released under Microsoft Public License.
Technologies
XNA uses the DirectX 9.0c framework (Direct3D, DirectDraw, DirectMusic, DirectPlay and DirectSound) as backend for all its library and works as a wrapper for simplifying these tasks. As XNA uses DirectX 9, it supports Shader Model 3.0.
XNA also requires the .NET 2.0 Framework.
Games created with XNA
There exist a lot of minor games created in XNA both for the Windows and Xbox platform. The official XNA developer site XNA Creators club has a list of games using XNA (http://catalog.xna.com/en-US/gamescatalog.aspx). You can also find XNA powered games at the Xbox marked place (http://marketplace.xbox.com/en-US/).
Conclusion XNA
XNA is an excellent choice if you are a C# programmer who wants to create some indie games for one of the Microsoft platforms. The framework provides a nice abstraction over the low level DirectX platform and helps you get up and running very fast.
However even for small game projects, you should consider using some of game engines build on top of XNA.
Unity
Unity is a game engine developed by Unity Technologies. The first game using the engine was Gooball (Mac OS X), that was created using a pre-release version of the Unity in March 2005. The first public version of Unity was available a few months after. The newest version of Unity is 2.5.1. This version supports Mac OS X and Windows development and can build games targeted for the Mac, Windows, Wii and iPhone platforms, including a web browser plugin for Mac and Windows browsers. Unity is available in a limited Indie version and a full Pro version.
Usage
Unity is visual development environment. The IDE basically consists of a visual scene editor, a preview window, project files, scene graph and a property editor (see Screenshot 2). Besides script code are created using a simple code editor.
You spend most of the time tweaking visual stuff by either moving, turning or scaling objects in the visual scene editor or adjusting the objects properties. The development process is not only drag and drop, you still need to define the behavior and the game logic using script code. Each script file implements certain functions and each script can be associated with one or more game objects in the scene. You are encouraged use member variables instead of constants in your scripts – these variables will exposed in the property editor and makes it possible to balance and fine-tune the game without any coding.
The script files you create implements one or more of the following functions:
Function |
Description |
Update() |
Called before rendering a frame |
FixedUpdate() |
Called before every physics time step |
OnCollisionEnter( collisionInfo : Collision ) |
Called when a mesh collision occurs |
Each unity project contains an asserts folder. This folder is monitored and any changes to files in this folder are reflected instantly in the Unity development environment. In other words, if the folder contains a 3D Max model, after updating and saving this model in 3D Max, Unity will detect the change and reimport the model automatically.
When play testing games using the editor, you can hit the pause button at any time to see the states of the different game objects. You can even adjust some of the properties, a feature useful for debugging.
Technologies
The Unity engine supports both OpenGL ES 2.0 (for the iPhone), OpenGL 2.1 and Direct3D 9.0c as rendering pipeline. This ensures you that your games look great on any platform.
As physics engine the engine uses the Ageia PhysX 2.6.2.
Unity has a set of predefined shaders, but also allows you to write your own shader using their own shader language: ShaderLab.
Unity uses the Mono project as script engine. The Mono project is an open source implementation of the .NET platform.
Games created using Unity
Unity is now one of the major 3D platforms for browser plugins. One of the major titles is the Lego Star Wars – the quest for R2-D2 (http://starwars.lego.com/en-us/funandgames/clonewars.aspx). There exist a number of absolutely amazing indie games, such as Blush (http://blurst.com/blush/). The official (but incomplete) list of Unity powered games can be found here: http://unity3d.com/gallery/game-list/.
Conclusion Unity
Unity is a great platform for creating 3D games. It is very easy to use and you can create some small functional 3D game very fast. Unity is most of all a tool for indie programmers, but as the quality and speed of their engine has improved, small and medium sized companies has used it for both prototyping and creating small games.
The job section at the unity webpage reveals that Unity in the future will be available on even more platforms, such as PS3, Xbox 360 and PSP.
Blender Game Engine
Blender is an open source 3D application available for all major platforms (such as Windows, OS X and Linux). Blender is most often used for 3D modeling, 3D rendering and 3D animation.
Blender is written C and uses Python for writing extensions such as 3D exporters.
A part of the Blender application is the Blender Game Engine. The engine is basically an extension to Blender that allows you to add game logic to your 3D models (such as physics, input device bindings, sound) and compile the project into a standalone game.
Originally the Blender Game Engine included a browser plugin, but the development of this has been discontinued due to some security issues.
Usage
Creating games in Blender can be done without writing a single line of code. At least in theory. Game logic is modeled using graphical logical bricks. For each object you can add a number of sensors (such as keyboard, mouse, collision). When these sensors are triggered, they fire events to the associated controllers, and finally, if the controllers conditions are met, events are fired to the associated actuators.
Screenshot 4 shows the keyboard key ‘right’ is mapped the actuator that make a simple motion (The other arrow key mapping are collapsed on the screenshot).
For larger games (or more complex game behavior) you can also create your own Python scrips and associate them with certain actions.
For users already familiar with Blender creating a game should be very straight forward. It is very nice that most of the modeling and texturing are done in the same program where your construct your game scene and define the game logic. The only external program you might need is a 2D graphics editing program.
Technology
The Blender Game Engine runtime supports only the OpenGL for rendering (the same thing goes for Blender due to its cross-platform nature).
As physics engine Blender Game Engine uses Bullet, a well known physics engine also used in many AAA titles.
The scripts you write run in the Python script engine.
Gamed created using Blender Game Engine
There only exist one well known game created in Blender: Yo Frankie! (http://www.yofrankie.org/) a game developed in the Blender community.
Based on the number of games created in Blender Game Engine you can conclude that Blender Game Engine is not widely used.
Conclusion Blender Game Engine
Blender Game Engine is a good game engine for people used to work in Blender. However Blender itself is a very complex program that takes some time getting used to. If you a programmer with no or little experience within the 3D game world, Blender Game Engine is not the best way to get you started in creating 3D games. On the other hand, if you are already familiar with the Blender environment this is most likely the fastest way to produce a 3D game.
At the current state (version 2.49) I don’t believe that the engine is useful for any serious projects, but for small games and prototypes the Blender Game Engine would be a fine choice.
Personally I dislike the graphical logical bricks, but it is maybe because I’m a developer. A graphical artist might find the concept easier than code.
Conclusion
XNA, Unity and Blender game engines are three very different approaches to creating games. XNA being the most code orientated and Blender Game Engine the most visual orientated. This makes XNA more appealing to developers and Blender more appealing to 3D artists.
The three engines all targets multiple platforms.
From the Comparison chart below you can see that Unity seems to be the best choice, as it appears to be the most complete engine. However since XNA is not defined as being a game engine, this comparison is not fair. A more fair comparison would be against XNA engines such as Ox. Besides Unity is the only commercial engine of the three.
Comparison chart
|
XNA |
Unity |
Blender Game Engine |
Latest version |
3.1 |
2.5.1 |
2.49b |
Engine type |
.Net Framework for creating games on Microsoft platforms. |
Visual game editor |
3D graphics application with game engine capabilities |
Target user |
C# developers |
Developers and 3D artist in general |
Blender artists and developers with Blender experience |
Target platform |
Windows, Xbox 360 and Zune |
Windows (standalone+browser plugin), Mac (standalone+browser plugin), iPhone and Wii |
Windows, Mac and Linux |
Price |
Free (for Windows games) Premium membership 99 $ (for creating Xbox games) |
199 $ (Indie) 1499 $ (Pro) |
Free |
Programming languages |
C# |
Javascript, C#, Boo |
Python |
Script runtime environment |
.NET 2.0 Framework |
Mono (open source implementation of .NET) |
Python runtime |
Graphics API |
Direct3D 9.0 |
Direct3D 9.0 OpenGL ES 2.0 |
OpenGL |
Physics |
N/A |
Ageia PhysX 2.6.2 |
Bullet |
Shader |
Shader Model 3.0 |
GLSL |
|
Shader language |
HLSL |
ShaderLab |
GLSL Python |
Network support |
Xbox Live Gamer services |
RakNet |
N/A |
3D scene graph |
No |
Yes |
Yes |
3D scene editor |
No |
Yes |
Yes |
3D model editor |
No |
No |
Yes |
Terrain editor |
No |
Yes |
No |
Particle system editor |
No |
Yes |
Yes |
Asset importing |
Yes |
Yes |
Yes |
Runtime Engine |
.NET 2.0 |
Mono 2.0 |
Python 2.5 / 2.6 |
Video support |
Yes |
Yes |
Yes |
Sound |
Xact (DirectX) |
OpenAL / DirectSound3D |
OpenAL |
References:
2009 Game Engine Showdown: Game developer Magazine May 2009
http://www.gdmag.com/
Frontline awards 08: Game developer magazine January 2009
http://www.gdmag.com/
XNA Framework Class Library
http://msdn.microsoft.com/en-us/library/bb203940.aspx
XNA Library Game Members
http://msdn.microsoft.com/en-us/library/microsoft.xna.framework.game_members.aspx
Microsoft XNA (Wikipedia)
http://en.wikipedia.org/wiki/Microsoft_XNA
Ox Game Engine for XNA
http://www.codeplex.com/OxGameEngine
Unity
http://unity3d.com/
Unity scripting reference
http://unity3d.com/support/documentation/ScriptReference/index.html
Unity 3D review by Foolish Frost
http://forum.unity3d.com//files/unity_3d_review_998.pdf
Unity (Wikipedia)
http://en.wikipedia.org/wiki/Unity3D
Unity Jobs
http://unity3d.com/company/jobs/
Introduction to (Blender) Game Engine (Tutorial)
http://wiki.blender.org/index.php/Doc:Tutorials/Game_Engine/BSoD
Game Bleder (Wikipedia)
http://en.wikipedia.org/wiki/Game_Blender
Bullet
http://en.wikipedia.org/wiki/Bullet_%28software%29
http://www.bulletphysics.com/wordpress/
Unity is now available in Version 3.3 and the Indie-Version is free. And it only lacks some less important features like real time shadows. Coding in Unity is Component based instead of Object Oriented Programming (OOP). This means you simply add predefined components (colliders, particle systems, audio sources) or your own scripts to any game object and tweak them to achieve what you want. Much more flexible than OOP IMO.
And the main reason not to use XNA for me is the requirement of .Net Framework and XNA Framework on the target computer. Two very large and Windows only Microsoft Frameworks which hardly any user will install to test an indie game.
By: Henry on May 14, 2011
at 06:06
Hey there!
Thanks for the information, this post was really useful for me.
Nice work!
By: Joacko on July 18, 2011
at 19:58