Do you have aspirations of being a game developer? Do you want to design a top notch first person shooter or a 3D role playing game that will run on a multitude of platforms, including Linux, Mac OS X, and Microsoft Windows? If so, look no further than Crystal Space. Crystal space is an Open Source (LGPL), portable, 3D game development kit written in C++, that has the power and flexibility to make powerful, sophisticated games with high-end OpenGL Graphics. The SourceForge.net team, being game players ourselves, is proud to make Crystal Space Project of the month for February 2003.
Project Name: Crystal Space
Founded / Started:Jorrit: On August 1997 the project was first published on the Internet. I started conceptual work about 8 months prior to that and started actually developing on Crystal Space around June of 1997. Finally in December 1999 we registered on SourceForge.net where we still are.
Description of project
Crystal Space is a 3D engine, or more accurately, Crystal Space is a complete application framework geared towards the creation of 3D games.
* Development Status: 4 – Beta
* Environment: Other Environment, Win32 (MS Windows), X11 Applications
* Intended Audience: Developers
* License: GNU Library or Lesser General Public License (LGPL)
* Operating System: MacOS X, Windows 95/98/2000, OS Independent, Linux
* Programming Language: Assembly, C++, Python
* Topic: First Person Shooters, Real Time Strategy, Role-Playing, 3D Rendering
How did you get started?
Jorrit: I started out of frustration 🙂 I saw Doom and then I saw Quake. And I couldn’t understand how they managed to do that. So I started researching on the Internet, I guess you could say Crystal Space is born out of that research. On August 1997 the project was first published on the Internet. I started conceptual work about 8 months prior to that and started actually developing on Crystal Space around June of 1997.
Eric: My original involvement arose from porting the project to several different platforms (NextStep, OpenStep, Rhapsody, MacOS/X, and BeOS). The task of creating these ports highlighted numerous inflexible, monolithic, and poorly designed aspects of the project, which made the porting efforts onerous. These problems arose naturally from the fact that the majority of the contributors to the project as of that time had seen it simply as a Quake clone and were intent merely on matching features and design of Quake or other similar games. My view, on the other hand, was that the project should be a generalized 3D development kit useful for many 3D visualization tasks and which, furthermore, did not try to impose a particular design (such as Quake-alike) on developers. Consequently, much of my subsequent effort has gone toward the goal of modularizing, generalizing, abstracting, and normalizing the project.
What is the intended audience?
Jorrit: I would say game developers mostly, although Crystal Space is useful for many other things.
Eric: My point of view is that the project should be suitable for anyone requiring 3D rendering of at least game-quality. While game developers are certainly the most abundant audience, we try to keep the design and API as application-independent as possible. Crystal Space itself has no game-specific facilities (and those which it had in the past have been jettisoned). As an example of its suitability for larger audiences, the Virtual Object System project (http://interreality.org/) is an interesting example of a non-game project that utilizes Crystal Space as a visualization tool.
What does Crystal Space do?
Crystal Space is a 3D engine, or more accurately, Crystal Space is a complete application framework geared towards the creation of 3D games. Crystal Space itself is very modular (using plug-ins) and a huge part of Crystal Space is actually very general and could in principle be used for any kind of application.
What makes it unique?
Jorrit: There are several key features that make Crystal Space stand out:
– First it is Open Source and Free Software. Comparable engines are usually closed source or have some other restriction making them unsuitable as Free Software (there are of course exceptions).
– Crystal Space is also very portable. It now runs on Linux, Windows, and MacOS/X without problems. Other platforms may also work but usually they tend to lag behind a little due to lack of maintainers. But in principle these ports can be revived very quickly if needed.
– Crystal Space has a very active and friendly user community. We have an irc room at FreeNode (#CrystalSpace) on which people often come to ask questions. We have mailing lists, forums, etc.
– Crystal Space is very actively developed. There are improvements almost every day.
Eric: In some sense it is unique in that, for a so-called “game engine”, it actually tries to cater to a much larger audience by being modular and flexible, and by attempting to abstract and generalize features and facilities with the intention of making them much more widely useful than one would expect from a pure game-oriented project.
How many people do you believe are using your software?
Hard to say, we have more than 660 people on the mailing list. It’s likely that not all of them are using Crystal Space, but a good portion of them are at least experimenting with Crystal Space. Then there is also some activity on the forums from people not subscribed to the mailing lists.
What gave you an indication that your project was becoming successful?
The first indication was when I noticed game related news sites where posting news about Crystal Space without me asking them to do so. It was also nice to see how Crystal Space was starting to get mentioned when people were talking about 3D engines.
How can others contribute? (Talent or resource wish list, method to sign up, etc.)
Jorrit: I usually just wait until people come to me and say they are interested in helping with Crystal Space. This has worked rather well so far. The group of Crystal Space developers is constantly evolving with only a few coders that are constant but this seems to work rather well usually. We are very relaxed in giving people cvs write access. Usually we first give access and then we see how it ends up. We still haven’t had to revoke write access for anybody except for people who voluntarily left the project.
Eric: We accept practically all contributors, ranging from coders to designers to documentation proofreaders. The atmosphere tends to be very relaxed. As much as possible, we try to ensure quality and fitness of contributions through proper discussion, rather than merely rejecting offers.
What has been your biggest surprise?
Sorry… we really can’t think of anything here 🙂 Perhaps we’ll come up with something later.
What has been your biggest challenge?
Jorrit: Making sure all developers follow the design principles for Crystal Space and also keeping the documentation up-to-date. I think we succeed rather well in the first area but only moderately well in the second one.
Eric: As with any open source project, finding and retaining well-rounded, well-versed, and committed developers for the long-term can be a challenge. It is important to keep in mind that, with volunteer projects of this nature, one cannot order people to do some work or to finish what they have started. Furthermore, the majority of contributors are interested in only one or two small facets of the project and focus exclusively upon those areas, sometimes without regard to the overall project impact. Consequently, unfortunate though it is, there are times when portions of the project must be jettisoned for lack of utility, completeness, or cleanliness.
On the other hand, the project has been fortunate enough to find several long-term and willing developers who have contributed a good deal of quality work. Additionally, because of the open and friendly atmosphere, and as a result of open communication, we also have had success with several short-term contributors.
What are you most proud of?
Jorrit: I’m most proud of the modular plug-in architecture on which Crystal Space is based. This is fully cross-platform and makes Crystal Space development a lot easier even though Crystal Space is actually a very big project. We have almost 1600 source files. Try to imagine managing that if that compiled to one huge single application 🙂
Eric: I’m most proud of the current modular, flexible, extensible design and clean API. As noted above, when I joined the project, it tended to be very monolithic, inflexible, difficult to extend, lacked API consistency, and was essentially geared at being a Quake clone. Consequently, one of my major goals has been to evolve the project to a state where it is clean and useful for many applications beyond Quake clonery. Since the time when I joined the project, the advancement toward this goal has been quite significant.
Why do you think your project has been so well received?
Jorrit: Mostly because it manages to do what many people want it to do, that’s provide a framework for making 3D games. Crystal Space may not be the easiest beast to get used to, but we have a good community and problems are usually fixed very fast.
Eric: The obvious answer is that game development is of great interest to a lot of game players, and Crystal Space provides a powerful, free, Open Source framework, offering people a chance to create their own games. Other important factors include the open and friendly atmosphere, willingness to welcome and encourage contributors, responsiveness to problem reports (though there are times when we could improve in this area), very active development, and a commitment to quality. Jorrit’s easy-going nature coupled with my advocacy for more structure and insistence upon correctness seems to work out well.
Where do you see your project going?
At this moment we are doing a lot of work on being able to support the latest brands of 3D cards (from nVidia and ATI). That means support for vertex shaders (special effects like bumpmapping, per-pixel-lighting, shiny surfaces, etc) and other features of those cards. This has a rather big effect on Crystal Space as the current rendering system in Crystal Space predates those features and isn’t actually able to make good use of them. So we’re heavy at work redesigning stuff.
The (relatively) short-term goals for Crystal Space is to make it an engine that can compete with commercial alternatives. We are already making good progress along that line but we still have work to do 🙂
Most recent important steps:
– Transition to XML for our map format.
– Introduction of smart pointers to make reference counting easier (this used to be one of the big problems in CS).
– Effect System: the first version of the effect system to be able to use some of the new features of newer 3D cards. This is currently also being redesigned however.
– Huge optimizations for big levels. One of the biggest projects that is using Crystal Space is PlaneShift (http://www.planeshift.it) and they are pushing CS to the limits.
– New physics plug-in based on ODE library.
Upcoming important events:
– Rewrite of the renderer system to be ready for the future of what 3D cards have to offer.
– Huge improvements of the landscape engine, both in terms of performance as in terms of features.
– More support for dynamic loading or delayed loading in general.