The Irrlicht Engineby Howard Wen
To hear Nikolaus Gebhardt explain it, there's nothing hard about programming 3-D graphics--it's just an extra dimension added to 2-D. Simple as that.
Perhaps it's easy for him. The 25-year-old from Vienna, Austria, works as a game developer, when he's not also studying software engineering. However, he insists that most 3-D graphics engines are overly complex in their design, when they do not need to be.
To prove it, he created his own engine, which he called Irrlicht. The project started as a personal hobby, and for now he's the only developer. Meanwhile, others have contributed to his effort with advice, bug reporting, and fixes. Though the engine is still in an early form, it is rather stable and usable. Figure 1 shows it displaying a Quake III map.
As well, a few games already use Irrlicht, including Arena of Honor. This multiplayer first-person shooter showcases the 3-D graphics engine's capability of rendering indoor settings. Figure 2 shows AoH. Irrlicht is also usable for games presented in a third-person point of view. YAMMO (Yet Another Massive Multiplayer Online RPG Game), shown in Figure 3, is an example of this.
Gebhardt spoke with us about his project, which is proving itself to be another serious option in what is becoming a crowded field of free-to-use 3-D graphics engines. (CrystalSpace is a similar project.)
Howard Wen: What is the present status of Irrlicht?
Nikolaus Gebhardt: The current status of the Irrlicht engine can be described as "alpha version." Not all planned features are included in the engine yet, and there are bugs in the existing and implemented parts.
But in comparison to other projects which consider themselves in "alpha" state, Irrlicht is pretty stable. This means it hardly crashes, and it is already possible to write complete applications with it. For example, some small games have already been released with early versions of the engine. Some features are still missing. like progressive meshes. But most of the major features--like indoor rendering, special effects, and animation--are there and can be used.
HW: What are the technical limitations of your 3-D graphics engine for now?
Gebhardt: Due to its easy design, Irrlicht lacks some features, which will be added in later versions. For example, it is currently not possible to add materials which were written in GLSL, but other [languages] like HLSL are already supported.
Also, not all current modern techniques are implemented directly in the engine, [such as] cartoon shading or virtual displacement mapping. But it would be possible to extend the engine and add these features--that's the main advantage of this open source engine and its nonrestrictive license.
HW: What is the history of Irrlicht?
Gebhardt: In the beginning, I only wanted to write a small utility to be able to create games quickly--a library that would do things which you have to do always when you start to write a game--like font loading, user interface logic, mesh displaying.
I wrote a small library, and I liked the design and the result. I posted some screenshots and people sent mails asking if I could release the code of the "engine," which wasn't an engine at all at this time. In my spare time, I extended and refactored the utility, and, after some months, I named it Irrlicht Engine, version 0.1.
Now, about two years after the beginning, lots of people seem to like it, and they motivate me a lot to keep on developing it.
HW: Were you inspired by another program as you designed your engine?
Gebhardt: Sure, a little bit. When I started to write the engine, I had used and evaluated quite a lot of 3-D engines, because I worked as a game developer at an Austrian game development company. All these engines had something in common: they were complicated to use. Really complicated.
You begin to think that they must be this way because it's 3-D, and 3-D is "complicated." But if you think about it, 3-D is just a dimension more than 2-D. And 2-D is really easy--at least for me, having developed 2-D games all my life. So I tried to think of an easier way to use a 3-D engine, and Irrlicht is the result.
If you want to start up the engine, you do this by invoking one function--no need for hundreds of lines of code. If you want to display a 3-D mesh, optimized by an octtree and maybe viewed by a user-controlled camera, you can do this with only about six lines of code.
I get lots of emails from happy people who thank me that they found a 3-D engine which they can use without having a degree in math or something. This makes me happy, too.
HW: What is your opinion of some of the commercial 3-D graphics engines used in gaming today? Is there any one of them that you do like?
Gebhardt: My favorite commercial 3-D engine is the Unreal engine series. Unreal is simply cool, not only because of the design, the tools, and the games, but also because [the games] run on nearly every class [of] PC hardware.
I've seen the internals of some commercial 3-D engines; I don't have a very high opinion of them. Most of them have a far too complicated API, and the internal structure and code of them is often horrible. The developers are advertising their engines to be extremely advanced, but in most cases, if you have a closer look at them, they can even be beaten by open source engines easily.
HW: There are other 3-D graphics engines that have been under development in the open source community. How does yours differ from them?
Gebhardt: The main difference between Irrlicht and other engines is--as I already mentioned--that it is extremely easy to use. This is because of its object-orientated design, the documentation, and tutorials. It is, maybe, not possible to use every single advanced technique [in] current 3-D hardware with Irrlicht, but you get good results extremely fast. And you can easily extend the engine with your special needs.
Another difference is the license. Irrlicht is licensed under the zlib license, not the GPL or LGPL like most other open source engines. This means, basically, you can take the source of the engine and do with it whatever you want, as long as you don't claim that you wrote the code.
HW: What is the target purpose for Irrlicht--to use it for gaming or to keep it open enough so that it can be used for a variety of applications?
Gebhardt: Originally, I wrote it for games. But there is no specific game code in the engine. That's why I don't call Irrlicht a game engine but a 3-D engine. Some people even wrote nongame applications with Irrlicht.
HW: What language did you use to write Irrlicht? Any reason why you chose it?
Gebhardt: Irrlicht is written in pure C++. This language was chosen because C++ is fast, mighty, portable, and because it is the current main programming language of the game industry.
Since version 0.7, Irrlicht can also be used from any .NET language like VisualBasic.NET, C#, Delphi.NET or whatever, because I personally like the .NET concept.
HW: Does Irrlicht use code or libraries that you did not originally develop?
Gebhardt: I tried to minimize dependencies to other libraries during the development of the engine. The only libraries which are used are zlib for reading in .zip files, jpeglib for reading JPEG images, and OpenGL and Direct3D for drawing 3-D graphics not in software mode. All these libraries can be excluded from compilation by commenting out a define in the configuration file, which disables some features in the engine. So there are no real constraining dependencies, and I try to stay like this.
HW: What has been the biggest technical challenge you have faced in developing Irrlicht?
Gebhardt: My hardware. I simply don't have up-to-date hardware. Until about version 0.4, I even developed the engine using my onboard graphics card. This was hell because I got about only 5 frames per second on some examples of the engine, and OpenGL mode only worked in software mode. But the good [result] of this is the engine runs on nearly every machine at decent frame rates.
HW: What would you like others to pay notice to the most about Irrlicht?
Gebhardt: That it is easy to use, and that it is possible to create cool games and complicated special effects and scenes with it. That there is no need for complicated APIs in 3-D engines.
HW: If somebody wants to contribute to your project, what skills from them could you use now?
Gebhardt: To be honest, I am currently not open to this at all. Irrlicht has become quite popular and is being used by lots of developers. Nevertheless, I'm trying to stay as a single developer, because I think in this way I have more control over the whole thing--at least until Irrlicht reaches version 1.0.
Irrlicht is my personal hobby project, which I am developing in my spare time, and I don't want to have to delegate tasks to other developers. I can fully understand that some people don't like this. Some very talented programmers created a project named IrrlichtNX, an extended version of Irrlicht, because of this.
HW: What features do you plan to add to the next immediate version of Irrlicht?
Gebhardt: I plan to add the long-missing terrain-rendering code and support for high-level shader languages. And, to be able to write more interesting shaders with the engine, I plan to add new vertex types.
Editor's note: Gebhardt added this feature in a release prior to the publication of this interview.
HW: What are the inherent issues one needs to keep in mind when writing 3-D graphics code?
Gebhardt: To make it run fast and run on [most] hardware.
The last one is tricky: the problem is that everyone has different 3-D hardware running with different drivers, which might have bugs. Fortunately, Irrlicht isn't using very special functions of the 3-D hardware and doesn't have high system requirements.
HW: What about for those who are looking to develop software that will incorporate a 3-D graphics engine, such as yours?
Gebhardt: Try to find a 3-D engine which fits your needs. There are a lot of options today. If you don't find one, create your own--it isn't that complicated.
Return to the Linux DevCenter.