Delta Engine

Delta Engine Blog

All about multiplatform and game development

Game Development Tool Essentials book is out

Based on the book article Kirsten and me wrote 2 years ago a new book is out. Nice to see my name on a book cover again :)

The book has 220 pages and just 13 chapters and is a bit expensive at the moment. I suggest to wait until the price drops, the ebook is at least a bit cheaper.

Source code can be found in the DeltaEngine/Samples/Labyrinth directory when the next release is is out or on the book download page. The sample game will be available on the StarterKits page as well.

Automatic Mesh Optimizations via Triangle Welding

Not many news on the Delta Engine side, we have been very busy with an internal project that pays the bills. This is what this post is about. v1.2 is however a pretty good improvement over v1.0 and v1.1 and while not new platform or rendering features are coming (since no one is working on those at the moment) we have completely revamped entities (see last post) and the content system as well. Not only it is much easier to use and develop for, the editor is also in a much better state because of reduced functionality and much cleaner design. We are pretty proud and are planning the v1.2 release after our internal project is done in 1-2 months.

From the new "Automatic Mesh Optimizations via Triangle Welding" article in our public wiki:

Goal: Optimize imported complex 3D data from 180k vertices (140k triangles) to ~20k vertices (~30k triangles)

For an internal project we were given huge meshes with tons of vertices (180k unique vertices per mesh) to be rendered on mobile devices (especially slower Android devices, if possible multiple big meshes visible like 3-10). The process of importing needs to be automatic as we do not know which geometry is going to be imported and rendered, for just one geometry a human 3D modeler can obviously redo the geometry and bring it down to a reasonable polygon count. We found no good tool to do this either manually or programmatically, so we had to write our own library for it (not enough open source in the world as I am sure people have done this before). Rendering performance was really bad since each mesh had to be subdivided into 14 materials as well and some needed too many vertices to keep in index buffers with shorts.

Long story short we did 2 things: First we welded the vertices, everything closer than 0.25cm was collapsed into one vertex point, which reduced the mesh 40%. Next we also started welding triangles, which is much more difficult and constantly destroyed our geometry (while it is nice to have 90% merged, that is not really useful if it does not look like the original anymore). This is why we put a lot of extra checks in place to not merge any corner triangle points away and keep the outlines intact and sharp corners as well, but otherwise everything below 10cm (up to 50cm for straight lines) and below 22.5 degrees is collapsed into bigger triangles.

We are still testing, but in some tests we can get rid of 80% of the triangles, we will update this once we have tested it with huge geometries as well (quite slow, needs optimization and we are still refactoring, tests look good so far). All the code sits in the content service of the Delta Engine, so you won't find it in the rendering code of the Delta Engine.

Read the wiki entry for the rest of the article.

Entity Component System in Delta Engine v1.2

After finishing one internal project and now working on the next project (non-game) we found some common problems with content and entities in v1.0 and v1.1, especially when things change over time and the data is not longer compatible (happened mostly in UI controls). Instead of trying to patch things over and over again we redesigned the content system earlier this month to be more data driven. Thanks to that we had some ideas to improve entities as well to be more data driven. Most simple entities have really good performance in the Delta Engine and were highly optimized for the use cases we had (Sprites, Lines, 3D models, LogoApp), but once you start adding more logic, things got slow quickly. Obviously in each case we could optimize it again, but code is not getting prettier and doing it on the build service side is too much work for our now much smaller team.

So instead I experimented around a bit over Easter Holiday and came up with a cleaner Entity System for Delta Engine v1.2 than what we had before. In v1.1 entities can have update behaviors, draw behaviors, components, lerpable render data, any other type of data and have update and draw methods build in so you can derive from them and build things in an OOP way. All the functionality for component data driven design was in there, but only used when it made a solution easier. This added a lot of complexity on the build service side were we basically take all these approaches and make normal component data driven entities out of them again (tons of code gets generated). I ignored the complaining of the platform team and now that I have worked on this myself last month and got it finally working, I have to agree, things kind of got crazy. One of the problems with v1.0 and v1.1 was to support JavaScript and C++ for Android code generation for any kind of entity. Since we allowed so much, things easily got out of hand and something was always not working. Because we had no prior experience to this, we just said this is a big problem and there seems to be no easier solution (probably still true).

Starting with v1.2 entity is just an empty sealed class, you cannot derive it or do any OOP, it just has some optional tags to find things later if needed and some entities can have children (like Buttons nested in a Panel). You can also add components to describe what an entity is about, they are not stored in the entity and can even be reused by multiple entities. Examples are Position2D, Color, Material, Rotation, PhysicsBody, Trigger, Action, etc. Entities can also be just templates, which means no logic or rendering is executed for them, but the data is all there to create new alive instances from it. And you can turn a entity invisible, which turns off the attached renderers while keeping their components and render data alive. That is pretty much it, all of it is data driven, which means we can easily safe it in the editor, there is no functionality in any of the entities or components, it is all just data (in fact we enforce it, if you put anything but public fields in components, the system will detect it and throw an exception).

To make things simple in code as well plus support old v1.1 code as well as we can, an EntityCreator class is available. Obviously not having Update or Draw methods or OOP in entities is going to break all kinds of things inside the engine and some of the games utilizing this. For example Line2D, Sprite or Model are not longer entities, but derive from EntityCreator, which internally just creates a entity and adds all the required components. This way the code stays mostly compatible, is easy to use for newbies not knowing or wanting to use or extend entities, but you are totally free to create your own entities and customize it as much as you want. This is pretty much the only way to create anything in the Delta Engine anyway (as opposed to other engines where you have a huge list of existing classes you can use that do not use the same system as you). Unreal Engine 4 Blueprint system is also an inspiration on what could be done, but we do not plan to do anything as complex and complete, we still like writing code in C#, much faster that way (both in writing and execution speed).

Here are two quick pictures I drew in the last 2 hours while explaining the new system. Maybe next time we should record it so users can benefit from our training as well :)

First whiteboard image is just a bunch of ideas from during the week (going into a more data driven "MVC" way, was changed back to "Systems" and "Renderers" for clarity later):

The next whiteboard image is about the new entity component system in all its glory with data locality explained, components and examples plus how the editor works:

If you want to know more and read additional articles about entity systems check out our wiki page on this topic.

Tutorial build step explained

One step for the build server, a huge feature for users ^^

On a more serious note: Testing goes well, we probably going to switch to daily beta releases and leave the stable versions for each milestone.

Extra Images from GamesCom 2013

Some days have passed since we posted the first couple of impressions from the GamesCom 2013 in Cologne. Here are some extra pictures I made later that week.

The waiting lines got longer and longer every day.

One of our investors also had a small booth.

On Friday it got pretty crowded between the halls.

But it was even worse in the gaming halls. There were waiting lines of several hours for the popular games.

Westling is not that big in europe, but even here there were long waiting lines. The sad thing is I know Hulk Hogan and John Cena by name, but no no no, I never watched it, no no, never.

Lots of cosplay and games promotion, here is something for Borderland fans.

The Business Center was getting emptier on Friday afternoon.

On our shirt we had a bit of delta engine ^^ Next time we obviously need to do more (big screens, demos, etc). This was our first fair as the Delta Engine company.

For some reason I was grinning. Probably because it is all over and now there is some time to relax :)

Our booth is almost deserted, but there was lots of traffic here in the past days, even though our booth was tiny and at the end of the second business hall.

A Segway guided tour in Cologne while eating some lunch, fun to watch them move around.

This guy levitated and really concentrated hard to do so. Unlucky for him, everyone knew the trick already and was bored by his performance to sit on a metal plate.

Since we have not spend much time in the exhibition and the business center slowly closed down Friday afternoon, there was some time to investigate the consumer area. League of Legends was big as usual, but there are tons of MOBA games nowadays.

And StarCraft 2 is also big. Funny how everything is now a strategy game on PC and shooters moved more to consoles. This is the famous Artosis, I could almost touch him.

In addition mobile was a big topic like in recent years. Due the success of Ouya (if you want to call it success, some people were disappointed at their recent launch) there is lots of other Android based gaming consoles. Here is Unu, a booth with zero information, I don't get it.

Due to the afternoon tickets it is getting fuller and fuller, time to get outta here. There were over 340 000 people at the GamesCom during the week, a new record.

While watching some Blizzard trailers (Destiny, has nothing to do with Blizzard, but well ..) the Delta Engine logo sneaked in as well and battled a bit with the Blizzard logo. Let's just say it didn't win.

Microsoft also included the DeltaEngine logo in their Middleware slide for a presentation, very nice, thanks.

That's it for this GamesCom. Here is a quick picture from the top of the Koelner Dom (highest romanic church in the world).

See you next time. Also make sure to check out the latest Delta Engine Release, so you don't end up frustrated like this guy:

Simplifying Cross-Platform Development of Multiplayer Games with Cloud-Based Tools

Our partner company MobileBits was featured last week on the Microsoft Azure Video Case Studies showing of the use of the Delta Engine and Azure to create great cross platform games:

Game Jam 2.0 May 2013 Presentation

Here are some quick impressions from our game jam last week with the presentation of the games we did recently. 8 teams, almost 30 people participated and we have a lot of simple to complex games. Each week we will release one of those games with our weekly Delta Engine releases, some need some further cleanup.

 

It all started with the planing of the 8 team, see the previous post for details.

Then we had some Pizza to get started at the first day of the game jam after all the teams have formed and the first ideas started to be materialized. The next day we had some BBQ and some teams decided to work a bit more at the weekend.

 

The final presentation was this week, each team presented their status. Sadly some of the games are not completely playable yet, but there are some really nice prototypes of very different game types: Jump'n'Run, Kids Game, Strategy Game, Multiplayer Game, Fps, Puzzle game, Card Game, RPG, etc.

 

For example this is a card based game with rounds that a mixed team from MobileBits and Delta Engine guys did.

 

Another simple game is the "Find the Word" game, where our book keeper made all the graphics :)

 

A more graphically advanced, but unfinished game, is the "Don't Fuck me off" game. In this game you run around and get annoyed by almost everything and need to calm down by smoking or solving your quest: Find the milk. Kind of familiar theme (remember Postal ^^). Technically this game was using quite a lot of tricks and layered rendering with huge textures (4k) plus tons of animations to reach many 100 mb of content.

 

And finally this is Ghost Wars by Kirsten and me, a strategy game you can play alone or in network mode against your friends. It is similar to the recently released iOS Mushroom Wars game (which is actually a much older game from the PS3, but the game idea is much older). Quite fun to play and really simple class structure. Probably even simpler than our last Game Jam contribution "Game of Death".

Until next time for the Game Jam in August :) Then the topic will be "Mobile".

CeBIT 2013 Impressions

On Friday after we released v0.9.7.3 finally (with around 40 fixes made this week) we walked around a little on the CeBIT 2013. Here are some quick pictures:

Yummy 4 SLI GPU action. Probably just needs 2 nuclear reactors to power this beast.

Enrico (Lead Programmer), Kristina (Book Keeping and Scrum Master) and Kirsten (Engine & UI Design) from the Delta Engine.

And me, happy about our release today. Hendrik (Tools & Services Programmer) wasn't very happy with Cruise Control however and we probably have to find something better soon as things are getting crazy complex on the server side.

We saw many touch screens, but where are the 4k screens? Yeah, 40 touch points are nice, but if the image is blurry, how much fun is that?

Flight simulators and other VR simulators have horrible graphics as usual.

Kirsten likes cars from Mercedes.

Finally a 4k monitor, a bit big and quite expensive, but a few cool demos on it. Mapping makes sense in this resolution.

Uh no, more horrible demos, bad graphics, bad controls, bad everything.

And of course lots of eSports (League of Legends, StarCraft 2, World of Tanks) in Hall 23. I am currently playing through some games from the past years (Alan Wake, Max Payne 3, Far Cry 3). The most recent game I really liked was Antichamber. Next up is StarCraft 2 - Heart of the Swarm, coming out this week :)

Soulcraft on the big stage at CeBIT

The Soulcraft game (showcase game for the good old v0.9.x DeltaEngine from the past) was updated today and is featured in the Windows 8 Game Store. It is also displayed at the CeBIT on the big stage as one of the Windows 8 games :)


BTW: If you want to meet us on the CeBIT, we will be there on Friday. Feel free to contact me.

Pictures from the Game Jam

Here are some quick impressions from our first Delta Engine Game Jam (Friday, 2013-02-08). The topic was "Death". Our next Game Jam will be bigger and better and starts 3rd May 2013 till 5th May 2013 (you can either just work on your game on Friday or spend all weekend).

All the games shown here were build with the Delta Engine Milestone 2 and will be part of the Samples so you can download and try them out in the next releases, but there was also a team building a Java game. I don't have a screenshot, but you can check out Andre's game here.

We started by buying some food, there is even some healthy stuff in there, but not much. We also ordered Pizza and bought more Beer later.

 

Our amazing Game Programmer Phil (living in China) was working on his own on a game called "Blob". He was working on vector rendering and did a cool intro for his game, but then ran out of time to actually build some levels. Next time we should pair him up with some artists.

 

Another team with 2 programmers from the office and an artist from Italy build the really bloody game "Tanfius Must Die".

 

The biggest team at the office build a pretty complex RPG like game called "Til Death" with adventure like cut scene scripts. They have completed 4 levels and have everything from long funny intros, 4 unique maps and path finding. The mission is to protecting a guy or girl from zombies until he or her can finally die a natural death so the main character can harvest the soul properly. Credits include: Joey, Michele, Janina, Kerstin, Melanie, Flavio and Gero (and some others helped as well I guess). The game is amazing and everyone was surprised that they managed to put so much content and functionality into the game with this early version of the Delta Engine. However it does not work on most PCs (not even mine, so I have no screenshots from inside the game) and needs some reduction (500MB?) and finetuning before it can be released ^^

 

Because of a Dentist appointment Kirsten and me started a few hours later and build a little "Game Of Life" game with the twist to actually prevent life from spreading. It is called "Game Of Death" and the goal is to kill little rabbits before they multiply too quickly and take over the world. You can hit them with a mallet or burn them down, but they will get stronger over time so you need to resort to biological and even atomic warfare as the game goes on. The more rabbits you kill the higher your score will be. The whole 14-15h I worked on this game was streamed, so you can watch the way I approached Test Driven Development in a stressful environment. There is obviously some hacking going on, but you can always see unit tests helping me along the way and it really helped finding bugs quickly and even fixing several issues I found with the Delta Engine while adding features for our game (particle effects, font rendering, playing compressed sound files, etc.)

 

Last but not least here are some impressions from our presentation on Friday:

Everyone agrees this was a great event, we all learned a lot and had tons of fun. We even improved the Delta Engine, fixed issues and now have a bunch of useful sample games for others to check out.

Till next time, remember the date 3rd May 2013 for the Second Delta Engine Game Jam :)