I decided today to release the work I’d done on project ‘Kadath’ under the GPL - and now that the code is freely available you can see I’d planned to call it ‘World Minion’, to represent that it scuttled around doing all the dirty work for you 😉 What it basically does is take any completely generic polygon soup and turns it into a structured level, based on the technique described in this paper. The aim was to address the request of all those people who said ‘I have a level I built in XSI/Max/Maya/Blender, how do I get it into OGRE efficiently?’.
It achieves this by firstly building a BSP tree (using configurable heuristics) for analysis purposes (could also be used for collision later), then constructing a more efficient cell / portal graph based on that. It automatically eliminates ‘leaky’ portals caused by coplanar / overlapping geometry, merges adjacent low-level portals generated by the splitting process into larger single portals, and rejects merged portals that are not bounded on all sides by geometry, leaving you with a pretty intuitive cell / portal structure without having to define it with specialised tools. There is a lot of further post processing that could be performed beyond this to optimise the CPG still further, including taking into account the physical size of cells and the density of triangles inside to drive further merging and splitting (as described in the paper) - it’s all about iteratively building structure from where there was none before.
So why have I suddenly GPL’ed it? Well, although I made good progress last year on this, it started to get in the way of OGRE development so I had to make a choice - allow Dagon to slip potentially indefinitely or shelve World Minion - I chose the latter. I intended to go back to it, but that hasn’t happened - my time is saturated as usual. It’s been sitting untouched in my private CVS repository for 8 months now which just seems a waste. I don’t think I’m going to get back to it soon, and there are still challenges to overcome - namely how would you combine the automation with some designer control over the upper levels of the process, and how to deal with very, very large scenes efficiently. I don’t think these things are intractable, but they’re also not going to be simple, and they need to be solved before this approach will be practical for production content.
The other thing is that yesterday I woke up with a shining vision of a completely different approach to world building that I’m really excited about, something that no-one’s tried before as far as I can tell, but yet it seems to make so much sense. So if/when I get some non-core-OGRE time (yeah, right) I’m keen to work on that instead. And no, I’m not going to tell you what it is yet, at least until I get time to smoke test it, I don’t want to look like a gibbering buffoon if it doesn’t work 😉 There’s no point letting the World Minion code rot in a corner any longer when it might be useful to someone, especially when I don’t think I’ll expand on it myself any time soon. Who knows, maybe someone will pick it up and run with it 😀
You can get the code from the Add-ons section of the OGRE CVS repository, under ogreaddons/worldminion.