Upcoming Events
Southwest Gaming Expo
11/20 - 11/22 @ Dallas, TX

Workshop on Network and Systems Support for Games (NetGames 2009)
11/23 - 11/25 @ Paris, France

ICIDS 2009 Interactive Storytelling
12/9 - 12/11 @ Guimarăes, Portugal

Global Game Jam
1/29 - 1/31  

More events...


Quick Stats
6938 people currently visiting GDNet.
2341 articles in the reference section.

Help us fight cancer!
Join SETI Team GDNet!



Link to us

Link to us

  Intel sponsors gamedev.net search:   

2008 Austin GDC Coverage Part 1


Developing Games with Open Source Technologies

All day session sponsored by Sun Microsystems

This is an all-day discussion of various free technologies out there and how they're viable alternatives to commercial products.

Views from the Big Chair – first panel

Daniel James – Three Rings (Puzzle Pirates) – Much of Puzzle Pirates infrastructure has been open-sourced
Jesse Schell – Schell Games – Panda 3D game engine for Disney
Prakash Ramamurthy – Gaia Online – Runs on open source server software

Online products benefit from lack of boxed deployment, and many open-source licenses deal with that kind of distribution. And that makes things a bit easier, as stuff running server-side isn't as rigidly controlled. Lack of knowledge of licenses and the tangle of several conflicting licenses is a problem when using open-source software.

Sun has moved from a custom open-source license to GPL version 2 for their open-source products. GPL can be scary if you don't know the pitfalls.

Oftentimes, getting bugs fixed in open-source software depends on how much money you have, either to give to the community or to hire someone to fix the problems.

One advantage of open-source software is that you can see the code, so if the code is horribly designed, you can see it. The benefits are not only financial, but are also technical.

Successful open-source communities are not democratic. They all have associated communities, but the most successful ones are the ones that have one or two people at the top who maintain the vision of the site. Communities can fracture (example Emacs vs Xemacs) over features and fixes. In the end, one or two people are driving the boat. Yes, it's undemocratic, but it's necessary to keep the product as a coherent whole.

Meet The jMonkey engine

Joshua Slack – lead developer
www.jmonkeyengine.com

  • jMonkey – scenegraph API based (culling, embedded actors, material inheritance, pluggable rendering system) on the ideas of David Eberly (see also NetImmerse, Wild Magic)
  • Ready to use shader effects such as bloom, cel shading, and water with reflection/refraction.
  • Supports Pbuffers and FBO object for imposters and render-to-texture operations
  • Runs full screen, windowed, or embedded in a web page. Different versions don't require a lot of changes.
  • API is 100% Java. Implementation uses native bindings to OpenGL and OpenAL for full hardware acceleration.
  • Open Source – BSD License
  • First development release was in 2003. Current version is 2.0a
  • Large, active community
It's easy to get started, and cameras and such can be set up automatically.

Why use jMonkey?

  • It's Java and is cross-platform. There are lots of open-source libraries to plug into.
  • The engine and source are free to use and change for your own purposes.
  • It's easy to use and has example code for every engine feature.
  • The community is supportive and helpful.
Sun is switching from Java3D to jMonkey for their own internal VR projects.

NASA is using it at their robots center in California.

OGRE: An Object Oriented Graphics Rendering Engine

David Williams
www.ogre3d.org

What is Ogre: It's not a complete game engine (no sound, networking, or physics). It's strictly an open-source graphics engine. It provides and easy-to-use high level API. It's written in C++ but has bindings for other languages, and it deploys on Windows, Linux, or MacOS.

It's run by a small team of committed developers and is backed by Torus Knot Software (a consulting company that consults on Ogre-based projects).

It's been used in many commercial projects.

Scene Management – determining what should be drawn and when. The default scene manager uses a bounding volume hierarchy. Octree and terrain scene managers are also provided. You can also create custom scene managers is the default ones won't suit your needs. For most projects, the default ones will work.

Ogre provides its own mesh format, and exporters are available for Blender, 3D Studio and other modelers.

Per-vertex animation is available as well as skeletal animation.

Level-of-detail control is supported.

Scripts control the material objects (like shaders). Fixed function and programmable pipelines are supported

Particle systems are supported and are defined through scripts.

Shadow volumes or shadow maps are supported.

Compositors – used for post-processing effects, and can be chained together.

Ogre is integrated with loads of third-party API's from multiple software companies. Integrates with C#, Java, and Python.

Coming up is a DX10 rendering system, geometry shaders, portal-based scene manager, parallel-split shadow maps, and new script compilers.

Panda3D – Jesse Schell

Panda3d Came out of Walt Disney's virtual reality studio. Originally it was intended to be deployed in Disney's DisneyQuest VR theme park. Built on an architecture similar to SGI's “performer”. When Toontown Online came about, they decided they needed something more platform-agnostic.

PANDA = “Platform Agnostic Networked Display Architecture”

Toontown online and Pirates of the Caribbean Online is built from Panda3D.

Uses OpenAL, OpenDynamics (open source) or PhysX (not open source). Originally designed to have replacable scripting languages, but Python seems to have taken over.

Late-binding scripting is a cornerstone of the system. Things do not have to be shut down to adjust subsystems.

Panda 3D recently changed ownership, and it's been given to Carnegie Mellon University. The license is being changed from a custom Apple-inspired license to something else that should generate fewer problems with the community. The original aim was to work closer with universities, and since Disney is a content company and not a technology company, they felt they would benefit from having a high quality community (universities) with access to the product. Another side-effect of the university emphasis is that since things work on a semester-level, people need to be able to ramp up on it quickly. You can't spend 2 ˝ months learning an engine for a project that must fit in a 3 ˝ month semester. It is currently used extensively in Carnegie Mellon's “Building Virtual Worlds” class.

Type “building virtual worlds” in YouTube for numerous examples of virtual worlds written using the system from the class.

Strengths – character animation integration.
Weaknesses – needs better support for networking. Disney has a powerful server architecture for their own MMO's, but they haven't released 'em yet. No strong visibility-culling algorithms yet, mainly because there's no one-size-fits all solution for that kind of thing.

The community for Panda3D is centered at Carnegie Mellon. The project is currently in a bit of upheaval, as one of the main people has left for a commercial project, but they're hoping that things will settle down and the project will eventually be stronger for it.

The Bullet Physics Engine

Erwin Coumans – Simulations lead at Sony's US R&D
www.bulletphysics.com

Bullet Physics – open source physics engine. Eventually hopes to be a physics standard ala OpenGL or OpenAL. The name is inspired by the classic “bullet through paper” conundrum that physics engine developers face.

Bullet is a rigid and soft body dynamic engine. It's portable, debuggable, and multi-threaded. It supports PS3, 360, Wii, PC, Mac, and iPhone. It's modular and open-source, and is free for commercial development.

The demos are pretty impressive, showing seamless interaction between rigid and soft bodies.

GTA4 uses some Bullet physics in the game. You probably didn't know that because Bullet doesn't have an advertising clause forcing you to mention that Bullet physics is being used.

Bullet is also used in some movies both “Hancock” and the upcoming movie “Bolt” uses Bullet physics for some realistic effects.

Disney is using “Dinamics”, which is a Bullet physics plugin for Maya, used in its pre-rendered movies, not games. Disney contributed the plugin back to the community as open source.

Blender also has built-in Bullet support. A recent book called Bounce, Tumble and Splash! uses Bullet in a physics tutorial.

Bullet supports COLLADA physics. For more information, check out www.collada.org

Havok tools can work with Bullet physics, as the Havok physics file format (HVK) can be converted to Collada (DAE) format. www.producingoss.com has a very good book on open-source development. The book is available free on the site.

The project was originally available on sourceforge, but it eventually moved to googlecode. It's now available on bullet.googlecode.com. Google Code is nice because it can import complete subversion repositories, including history.

Bullet is based on the Zlib license, which is about the most liberal one out there. MIT is also pretty liberal. BSD has an advertising clause which runs afoul of some projects that can't advertise a project's underlying libraries.

GPL was out of the question, because it's incompatible with the major game consoles (PS3, Xbox, Wii). It's also very difficult to change the license after-the-fact if you want to change license terms later.

There's also a Java port of Bullet called JBullet. It's a one-to-one mapping classes of Bullet's C++ classes to Java. Performance is actually fairly good, not on par with the C++ version, but not bad. Unfortunately with the port from C++ they also ported some of the bugs, so it's still very much a work in progress.

Free IDE's

RebelMonkey

In years past, you'd expect to pay at least $200 for a reasonable IDE. Today there are some great tools for free. Netbeans 6, Eclipse 3, IDEA, and Visual Studio.

  • Syntax-oriented Editor
  • Integrated Compiler
  • Integrated Debugger
  • Source Code Control Integration
Netbeans 6 is completely open source. It runs on anything that supports JDK 6. It has native language support for Java, Ruby, XML, Javascript, JavaFX, and PHP. It supports C++ with the GNU compiler. It also has third party support for Python and other languages.

It has support built-in for CVS, SVN, and Mercurial out of the box.

Netbeans can support just about anything as a plugin, and you can build editors for anything.

Eclipse 3 is also open source and written in Java, so it has the same platform support as Netbeans. It's sponsored by IBM and supports Java, PHP, and XML out of the box. Source control systems are supported as plugins. The Subversive plugin for SVN is recommended for Subversion support.

There's a profiler built in, but it's fairly broken.

IDEA from IntelliJ. It's open source, but you must apply to be approved. Java developers like this one quite a lot.

Visual Studio Express. It supports C++, C#, and VB as a .NET tool. Java support (via J#) has been officially dropped. The tool itself isn't open source, but it's free.

XNA Game Studio Express. Also from Microsoft. It's $100 a year for console support, which makes it pretty-much the cheapest console development tool out there.

Filling the Gaps in your toolchain

Emanuel Greisen of Gamalocus Studios

Good tools can get you 90% of the way there, but there's no perfect tool that'll solve all your problems. Open source tools get you access to the source so you can alter tools to better fit your toolchain. Or you can write plugins if your tool supports such a metaphor.

Eclipse plug-ins are written in Java. For the project, they needed a tool to convert a MySQL database to a binary format that could ship with the game. Eclipse plug-ins are pretty easy to write, but you will need to dig through some documentation to get there. Since Eclipse is made of plugins, the process if pretty well-refined and documented.

Blender plug-ins are written in Python. For the project, they needed to assemble, optimize, and export models to jMonkey format. The plug-ins were easy to write, especially regarding visual feedback (easier than the database project).

GIMP plug-ins are also written in Python, as well as other languages (scheme, perl). Unfortunately the Windows version doesn't support Python well at all, so they ended up rewriting their plug-in in C.

Jeff Kesselman – Chief Technical Monkey – Rebel Monkey Inc

What is a game engine?

At minimum, it's a game loop with input handling, drawing functions, and sound functions

To add to that, it can have advanced drawing features like particle systems, image processing, and dynamic shadow casting. It can even encapsulate all game logic, like an isometric engine or script language interpreter.

Slick – Written in Java. BSD License. Based on the LWJGL (lightweight Java game library). This is a basic 2D engine with a game loop, time management, routines for music and sound effects (OGG, MP3, and WAV), and drawing routines to load common image file formats and in common meta-usage (sprite sheets, tiled maps, bitmapped fonts). One good example is the 2D space game “StrafeFighter”.

PyGame - Written for Python. It's based on SDL and handles the game loop and time management, music and sounds. It loads lots of bitmap formats. Unlike Slick, it also supports vector objects.

AS3GE - Game Engine for Flash CS3. Flash keyframes == 1 game “screen” or state. Each keyframe has its own update method. Input is polled globally. Everything else is done via AS3. It will be appearing on Google Code soon. I got the strong impression that this is just a demo that will never pan out as an actual product

Ffilmation – Isometric engine designed for use with Flash CS3. Has advanced lighting and dynamic shadows. Automatic tile warping and animation system with movement and blocking.

HGE – C++ engine and unlike the previous ones is Windows-only. One very cool game done with HGE is “Freakwave”.

Torque Game Builder – not free but is very reasonably priced. Available on Windows, Mac, and Linux. Has every feature of the above engines including physics. It also has its own toolchain and scripting language.

Project Darkstar

Sun Microsystems
www.projectdarkstar.com

What is Project Darkstar? It is a software platform for the server-side that simplifies the development of multiplayer online games. It's written completely in Java and is 100% open source.

It automatically handles communications, thread management, contention management, persistence, and scaling.

Problem 1: Communications. Just setting up a system to handle logins is hard work. Darkstar abstracts away all network programming mechanics. It provides an intuitive API to handle all of the coarse-grained behavior of the communication between client and server. Interfaces on the server side are just response functions and all of the communications are handled for you. The client side is language-agnostic. The Java API has one class and one interface.

Problem 2: Multi-client communications. How do you communicate messages to multiple clients? Project Darkstar provides a mechanism to group clients together to minimize traffic. On server-side, there is a ChannelManager class with methods to add and remove clients to the channel. There's a ChannelListener that processes incoming messages coming into a channel.

Problem 3: Thread Management. How can we efficiently process messages in parallel. Darkstar is a multi-threaded environment under the hood. Tasks appear single-threaded to the developer, as threads happen at a lower level than where you're working.

Problem 4: Data Consistency. When working with multiple threads, contention is a problem. Transactions are required if you need to maintain game state. In Darkstar all state management stuff is transacted. All persistent objects must be marked as managed.

Problem 5: Persistence. When running a large virtual world, you must protect against server classes and other unrecoverable problems. Darkstar's default data store is implemented as a Berkeley DB database.

Problem 6: Scalability. The current industry industry solution is “zones and shards”, but Darkstar is trying to work around this. The goal is automatic multi-node scalability and balancing.

There's a good demo (a multiplayer snowman game) available at project-snowman.dev.java.net

Coverage by John Hattan



Page 3


Contents
  Table of Contents
  Page 1
  Page 2
  Page 3
  Page 4
  Page 5
  Page 6
  Page 7

  Printable version
  Discuss this article

The Series
  Part One
  Part Two