I've been working for 1 year now, going by when I registered on Ogre. I had hoped I could release source code and a map to go with it, but I've run out of time and too many details need to be fixed, so it'll be another week or two before that, but I figure I should at least post a few screenshots.
The maps are constructed using a customized version of Dark Radiant, and compiled using a customized version of Q3Map2. Both of these are GPL.
The lighting model is a hybrid of deferred shading, non-shadowing point lights (called "lamps" in the code) and forward rendered, shadowing spotlights. At the moment there is no ambient lighting since I like that stark, dark Doom3-ish look. However I may add an ambient pass with some kind of SSAO, depending on how things go.
The deferred shading lamps come in 1-pass and 2-pass varieties. The 1-pass are faster, but the 2-pass allow for fake shadow volumes to be built, so that simple shadowing from non-moving geometry can be built into the map. This is a bit labour intensive, and mainly intended for prefabs where the effect might be handy. For the most part the 1-pass lamps will do fine. The deferred shading lights are fairly fast, though I wish they'd been a bit quicker. I'm not using MRT, just a bunch of RTT, so that's one avenue to speed them up a bit.
The shadowing spotlights come in 2 varieties, faster and slower. The faster lights are just typical VSM shadowing spotlights. The slower lights are the same but have the ability to be coloured as they pass through things like coloured glass. Here you can see the light being coloured as it passes through the red glass.
The spotlights are all automatically capable of projecting textures as well.
The .map format I use is slighty different from standard Q3A maps, it's closer to the doom3 format in the way it defines brushes and texturing. The resulting .bsp is also different from the standard Q3A bsp, though not significantly. A few parts have been removed (such as lightmaps) and some other parts added (the specification of the zone/portal bounding boxes). Also the light entities are defined differently. This incompatibility was unavoidable, but it would not be hard to convert an old bsp to this new format. Here's a quick run down of the differences, from the code.
Code: Select all
// The lump idexes that make up a bsp file.
// Bzn bsp lump data is almost identical to q3a bsp lump data, except that the
// Effects, Lightmaps and VisData lumps are removed and there are two new lumps, one
// describing the subzones and one describing the portals. The other difference is the lighting
// entities (which are stored as normal entities in lump 0) since q3a bsps don't usually
// store the light entities at all, and BZN has it's own unique set of lighting keys.
const int Textures = 1;
const int Planes = 2;
const int Nodes = 3;
const int Leafs = 4;
const int LeafFaces = 5;
const int LeafBrushes = 6;
const int Brushes = 8;
const int BrushSides = 9;
const int Vertices = 10;
const int MeshVerts = 11;
const int Effects = 12; // removed from bzn
const int Faces = 13;
const int LightMaps = 14; // removed from bzn
const int VisData = 16; // removed from bzn
const int SubZoneData = 17 ; // added to bzn: overlapping subzones form zones. Zones are like groups of axial boxes.
const int PortalData = 18 ; // added to bzn: portals overlapping different zones allow them to see each other.