Undead Engine - Immortal Editor

Bad_Sector 101 Jul 05, 2005 at 23:32


This is a screenshot from the world editor (the “Immortal Editor”) i’m developing for my 3D game engine (“Undead Engine”). It actually shows the basic GUI (viewports, 3d preview) and a small scene made of solids with different materials. Also in the viewports you can see the “camera position” (Top viewport also shows where the camera looks) and the “pivot” which is used for some editing operations as the “center” of the operation (for example when toy rotate some vertices, they’ll be rotated around this point).

Currently the editor itself (that is, the “editing code”) is in a very early stage - it’s basically work of a few days (see below). However, the editor is already able to be used for the creation of simple Quake1-like worlds, since it supports:

* solid creation/deletion
* multiple selections of faces
* moving of whole faces or individual vertices
* rotation around the “pivot”
* scaling from the “pivot”
* manual and automatic UV mapping for faces
* ability to convert solids to “rooms” (aka the “Hollow” operation in most editors :-)
* client/server approach for editing
* internal editing language which can be used with the “Console” to edit the world data (actually the GUI actions are translated to IEL commands and ‘sent’ to the editor server)

The editor is based on SDL and BSGUI, a crossplatform (ideally) OpenGL-based GUI toolkit i started two months ago. And of course it uses the Undead Engine :-).

The world data manipulation code is one of the most recent things (i started coding them a few days ago), while other stuff is a bit older. For example the “Undead Engine project” is 1y2m (although i had some great ‘holes’ of some months in it’s development - and the engine was written from scratch three times).

There are lots of things i would like to put in it to be able to safely say that it is “production ready”. The major thing will be to be able to use the engine for a “test walk” in the map (in other words, “make the ‘Full Preview’ button do something”). This requires Undead to be able to render full worlds (it can do that, but currently it just sends the whole level data… it must use a occlusion culling/hidden surface rejection/pvs set of algorithms to speed up things).

Other things are new world editing features, such as duplication, extrusion of faces, prefabs, paths, curves, etc.

Also i would like to add code for real client/server situations: make the editor listen for connections in a socket (server) and other editors to be able to connect to that and work on the data that it has. While the current design supports that (and i’m carefully trying not to break it), it isn’t a big priority (the “protocol” isn’t good for slow internet connections - if for internet at all actually, and i only have a dialup, so not much use for me now).

That was it for now. I will upload some more stuff as time goes and development proceeds :-).

15 Replies

Please log in or register to post a reply.

bladder 101 Jul 06, 2005 at 03:30

excellent work, congrats on how far you’re bringing this along. I’ve always wanted to make my own engine, but whenever I start it I always come up with a new engine name and start from scratch :dry:. Especially if Im off the project for months - I just cant get back on it after that. Great stuff you got going.

Maybe Ill just be a worker bee my whole life…

Bad_Sector 101 Jul 06, 2005 at 12:20

Hehe, don’t worry… personally i started around 40-45 engines with most (\~35) of them being only a bunch of header files :-) and the rest (minus 2-3) to be nothing more than a rotating cube, triangle or in some cases a 3DS loader.

Undead itself was written three times from scratch:
#1, in C. I made a nicely small framework around OpenGL. Since i wanted to add stencil shadows, it was the first thing i implemented (not even texturing :-P). And that was a bad decision since i had only that in my mind instead of designing a good API.

#2, in C. I started from scratch with the goal to design a good OO API. However doing OO in plain C is very hard, so soon (actually after 4-5 days) i made…

#3, in C++. Which is what i’m currently working on :-).

Also in #3, i decided to not go and work on the engine from day 0. I decided to think a bit about how things should be. I started keeping notes in a small notebook about the engine development and such, but it didn’t worked for more than a couple of weeks :-P.

However, the most difficult part is to start. When you have something basic to work with, things come easier :-).

bladder 101 Jul 07, 2005 at 03:03

I know exactly what you mean, but at least you’re sticking with this one now, hopefully for a while yea? I’ve come to the point where if someone asks me how to go about making an engine I give them this:

you need three things:
the nebula 2 engine source
the irrlicht engine source
and the catmother engine source

Now cut and paste as much as you can from there and be on your way - but make sure you understand anything you decide to cut and paste (unless it’s math :wink:)

Bad_Sector 101 Jul 08, 2005 at 01:22


I’ve added some basic lightmapping… it has some artifacts but i think that they’re because i use the edges of the map as texture coordinates. However i’m too tired right now (it’s 5:24 am :-P) so i’ll try to fix it tomorrow.

Bad_Sector 101 Jul 11, 2005 at 18:28


Colored lightmapping, multiple lights, different light sizes

bladder 101 Jul 12, 2005 at 02:42

It’s good to see that you’re still in the zone. Are there any demos or anythign available of your engine?

Bad_Sector 101 Jul 12, 2005 at 15:35

No, not yet. I need to implement BSP, frustum culling for objects and some sort of collision detection and response before i release something.

Bad_Sector 101 Jul 22, 2005 at 02:04

Ok, some updates here. First, a screenshot:


Then, what’s new :-):
a) added BSP tree-based rendering and frustum culling
b) added BSP tree-accelerated (:-P) collision detection (only world-object now)
c) hacked in some basic camera movement (actually i attached a camera to an object and i’m moving that object in the space - a better camera controlling scheme will be used at the future)
d) everything (bsp, lightmaps, lights, etc) for a world is saved in a single .uw (Undead World) file.
e) objects placed in space get “enlighted” by the static lights from the world.

also i made a page for the engine which includes a downloadable demo for Win32.

Unfortunatelly the editor relies a bit on the 64bit nature of my platform (64bit Linux), so currently there isn’t a Win32 version of it. I could crosscompile a Win64 version (for AMD64 + Win64 owners) but i don’t own Win64 to test it :-P.

I still need to do:
a) Occlusion culling (mostly PVS - does anyone have a good description of these? I’m looking for \~2 days on google and i can’t find anything that explains the algorithm(s) well enough)
b) Object-object collision detection (that’s easy but i have other priorities now - see “a”)
c) Probably add axis-aligned boxes as alternative bounding volumes (currently only spheres are supported).

bladder 101 Jul 22, 2005 at 16:32

I can’t fit the model through the Door!!!!

Works like a charm dude

As for the occlusion culling. If I remember correctly there is a occlusion technique (a lit of em actually) described on gamasutra

here they are:


Bad_Sector 101 Aug 10, 2005 at 20:10

Undead Engine Demo #4 is out and now includes the Immortal Editor (an improved version from what is seen in the original post’s screenshot):


Also it includes, for the first time, ultra resolution lightmaps generated with soft shadows (crude area lights :-)). I’ve optimized the lightmap generator to use a BSP tree and reduced the time to build ultra-res lightmaps from 25 minutes to 43 seconds (with hard shadows since Linux was killing the editor when i tried it with soft shadows :-P).

Unfortunatelly the ultra resolution requires an enormous amount of memory: 42MB of video memory and 128MB of free system memory. For those who don’t have these hardware requirements, a separate downloadable version of the sample world with low resolution lightmaps is available. With the lowres version the requirements drop to 1MB of video memory and 32MB of free system memory.

Tell me fps (there is a counter in the window’s titlebar) and system specs :-D

bladder 101 Aug 11, 2005 at 04:12

50 fps, gForce-4 (128 mb), 2 ghz, 256 ram, winxp. The engine ran fine, but the editor was giving problems. Like the fonts got lost when i trie to apply different material to the roof. But working really well otherwise.

Bad_Sector 101 Oct 25, 2005 at 00:14

Fixed a major bug in the BSP usage… it took me a lot of time to track it, mostly because i was thinking that it was a bug in the BSP generator… :-P. Then i moved to Athens and forgot about the engine for around two months.

Anyway. Three new screenshots from a contributed map (partially unfinished…):

A new feature of the engine is the inclusion of “strong lights” which can be used for making a “sun”.

Anyway, the development is more or less left behind… i’ll try to work on simple things for the moment (such as adding a skybox) because i’m not very motivated to work on more difficult parts (such as adding more complex materials).

Bad_Sector 101 Oct 25, 2005 at 18:39

screenshot with everything set to “full”: ultra-resolution lightmaps, soft shadows, 16xAA, 8xAF and 1024x768 (that could be higher but my TFT screen supports up to this resolution). This runs at around 60fps in a GeForceFX 5950Ultra (256MB).

Bad_Sector 101 Oct 26, 2005 at 18:46

and lastly updated version of the binaries (scroll down for the link). At this point i wonder what to do with this post… should i make a new one (with the next screenshot) or update this one?

dk 158 Oct 26, 2005 at 20:32

Shots look nice. How about you submit a new Daily Image on your latest work?