Delta Engine Blog

All about multiplatform and game development

Delta Engine can do 3D once again





This year is coming to an end and we have not posted much about the Delta Engine yet because most design decissions were not ready for prime time. Our engine was already pretty capable in the beginning of 2010 when we could render shaders and 3D models on the iPhone for our game SoulCraft, but we did not feel the multiplatform and "easy to use" aspect was done yet. Sure, we could build games with it, but performance was horrible on mobile devices and most game code was platform specific, which means it would not be portable at all. So instead we focused working on tools and the basic engine code, which grew from few thousand lines of code in January 2010 to over 550 000 lines of code now in December 2010 (I just counted with my good old CountMostUsedKeys tool). While this may sound like a lot, it really is not, more than half of it is comments, examples and unit tests. We commited over 6000 revisions this year and each of those has many thousand lines of code changes on average, so way more than a million lines of code was created and mostly modified :)


We focused a lot on tools and the way the engine works with our example games ZombieParty (which was released in October btw) and SoulCraft (to be released in mid 2011). The code base of ZombieParty was kept really small, for example ZombieHockey (the free demo version of ZombieParty) is less than 10k lines of code and it runs and is released on iPhone, iPad, Android, Android Tablet, Windows Phone 7, Windows XP, Vista, Windows 7 (also works on Xbox 360, Linux and Mac, but we have not tested that much anymore and build no installers or releases for that anymore). It is really important to note that ZombieParty does not contain any code that is platform specific, all that is handled by the engine (that is why it is so huge).


So why am I telling you all this? Well, we can now do 3D again. It is not that impressing, we got the same kind of features we got in the beginning of 2010 already (in reality, lots has changed, e.g. we went up from 1 3D shader to a dynamic shader system that allows all kinds of shaders, we have over different 30 shaders already that work on all platforms very efficiently), but now it really works on all platforms! We got plenty of new tools like a ShaderEditor, a really solid content pipeline that supports many different file formats and handles all platform conversion fully automatic and transparently for the game. Our plan in 2009 was to have 70-80% of the game code to be reusable for each platform in the next 5 years, but now we actually reached 100% for all our games (e.g. ZombieParty, which runs happily with the maximum frame-rate possible on each platform, as also posted earlier this year the engine code is quite fast), samples and unit tests, they all work on all platforms (in the first year of the engine already). Even the engine code is 95% all the same on all platforms, only very small parts are platform specific (like low level input, graphic and sound modules). This is really hard to explain (you will have to wait till mid 2011), but since we have worked with so many other engines before, it is a huge differentiation from other engines, which also sometimes abstract game and application code or scripts away. But in no way can it be compared to writing a single unit test in the delta engine with 5 lines of code and it instantly works on all supported platforms, no matter what you are testing: low level sound, shaders, images, or 3D models or high level rendering, UI, scenes or levels.


A month ago I asked the question Collada or FBX for 3D Model formats and Heiko also posted about OpenGL Extensions and Emulators fun. We still support collada as I have been doing since February 2007, when I blogged about Skeletal Bone Animation and Skinning with Collada Models in XNA (one of the most read, linked and liked blog post ever here), but we switched to FBX for all of our static and animated models and we even use it as an intermediate format for our levels (as we do not do any lightbaking in the engine, but use 3DS Max for that). The engine also supports many other formats, but similar to images, it is always better to focus on one format (there we have choosen .png for raw content files because it is loseless and we can easily load and convert it to all different kind of formats with enough meta-data. We now can load 3D Models and Levels, which again does not sound very powerful yet as we could do the same in the beginning of 2010, but now it actually makes sense for the engine and works in the best way possibel on each platform. For example on an older and slower iPhone or Android device a vertex will be compressed down to 10 bytes from 60 bytes raw vertex data. This means on PC and consoles we happily support all shaders and 3D features with huge vertex data arrays of up to many megabytes for a complex 3D model, but at the same time the exact same model is reduced to a few kb for low power and low quality handset devices and renders there also very quickly (we got no problem pushing millions of polygons per second on mobile devices, we will do more performance tests and comparisons early 2011). This again is all only made possible with all the tools we build over the year, including the ShaderEditor and content generation as mentioned above. It would be way too much work to convert each file for each platform by the artists and they really don't know all the little details of each platform, but with a few hints on the content (low, medium, high quality, which blend mode and shader features to use, etc.) they just drag content in and it magically works on all platforms :)


In 2011 we will have more to show than just a bunch of boring text from me, the team will blog about the SoulCraft game development with screenshots en masse.

Have a nice Chrismas Holiday and a Happy New Year.