The Irrlicht Engine

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.

Figure 2. Arena of Honor--click for full-size image

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.)

Figure 3. YAMMO, a third-person game using Irrlicht--click for full-size image

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.