Devlog #5: AI demo, beta date, and more!
Hey everyone! We're a week late with this update, but I'm sure you'll find it worth the wait, because boy do we have a LOT in store for you this time!
Beta release date
We have some good news and some bad news. We're making steady progress, but we are going to have to postpone the start of the beta by two weeks. I have a short vacation planned in the week of September 13th (my first one in two years!), and that's just a bit too close to the original planned release date of September 30th.
However, this DOES mean we can now announce the actual release date for the beta! The beta will go live on October 16th! Everyone with an Adventurer Pledge or higher will be sent a beta key then. If you have a Cartographer pledge, you still have a few more weeks to upgrade if you want to.
We'll be releasing more info about the beta in the coming weeks, but for now, mark that date in your agenda! It's mapmaking time!
Development of the AI algorithm
We realize we haven't gone in depth about our progress on the AI front for the last couple of months, so it's time to tell you what we've been up to. Some of you have been worried about the lack of visible progress, so we hope to put your mind at ease with this update. Strap in, because this is a long ride.
First version: WFC
Initially, our intention was to develop a modified version of the Wave Function Collapse algorithm to deduce patterns from examples and build new rooms based on those patterns. However, after a few months of development we encountered some serious issues with this approach. Specifically, WFC does not work for multitile objects (such as big beds or tables), and doesn't really take into account the relationship with objects not directly adjacent to each other. In short, it was not a suitable algorithm for making realistic rooms.
Second version: deep learning
At that point, I also realized that I didn't have enough time to do all development of Dungeon Alchemist on my own, even after going fulltime. That's why we enlisted the help of ML²Grow, a firm specialized in AI and machine learning. We designed an ambitious plan to use data mining and deep learning to learn how each room (bedroom, dining room, hallway, ...) should look. They worked on this over the last couple of months while I was working on other aspects of Dungeon Alchemist. However, we came to the conclusion that this also wasn't the way to go: we simply can not make enough examples for this approach to work.
We considered crowdsourcing the example making, but designing a robust crowdsourcing system is another project on its own, and we don't have time for that.
Third version: custom interior design algorithm
Third time's the charm, right? Taking into account what we learned from the first two versions, we developed a custom algorithm, specifically made to generate rooms based on logical interior design rules. This algorithm considers all kinds of factors that we also take into account when we design the layout for a room in our homes:
How far should objects be from the door and windows? Can we still open the door?
Can we reach each part of the room by walking?
Which objects logically belong together? For example: bellows next to the fireplace, nightstand next to bed, ...
Which objects should align? If you have two tables in the middle of the room, people tend to align them because it looks better.
Where should doors be placed to make a logical floor plan for the entire building?
Which objects belong in corners, and which don't?
Which objects need a lot of space around them? Tables should have plenty of room around them, otherwise you can't move the chairs and it will feel claustrophobic.
Based on these criteria, we analyze the examples built by Wim, and collect data for each object on how they should "behave". We then use this info to build a floor plan that matches these criteria as closely as possible, while still allowing for enough randomness so that you get a different version of the room each time you place it.
We're super happy with the results of the algorithm already. Below, you see a video of us building a tavern with a great hall, latrine (toilet), bedroom and brewery generated by the AI:
For the record: nothing in this video is faked. This is a real-time recording of us placing some rooms. We can record this video 10 times and you'll get a different, equally nice tavern each time. Here's a screenshot of the example sets we used to train the algorithm for the different room types:
What's next for the AI?
Developing this kind of algorithm is always an ongoing process. There's always little improvements to make here and there, and the algorithm can also be tweaked to different room types to get better results. Here's some of the things we're going to look into next:
Expand the algorithm to also work for outside environments
Improve the performance of the algorithm so it runs faster
Make examples for other themes (mansion, castle, ...)
Integrate more objects into the examples as we make them
Make the algorithm tweakable by the user (for example: control the density of the objects placed)
Objects on objects
When we were developing Dungeon Alchemist, we realized over time that one feature could make a HUGE difference, both for users and for us, the developers. That feature is the ability to place objects on top of other objects. This might sound like a small detail, but it's an incredibly complex undertaking, and one that comes with HUGE rewards.
For example, allowing you to place objects on other objects lets you set your own table, or fill a cupboard the way you want it. This is very useful for storytelling purposes, but it's also super practical for us, because it allows us to easily make many variants of set tables, right inside the editor! This way, the AI algorithm doesn't have to place the same set table everywhere, but can pick one of the variants created by us.
Here's a video of us moving some stuff around:
Not all adventures take place at noon. That's why we added lighting settings, allowing you to set the atmosphere by picking the time of day for your scene. You have four presets (morning, noon, evening, night) to pick from, but of course you can also configure your own lighting settings. Want to place a certain scene during a blood moon? Now you can!
Here's a video of us cycling through the lighting settings:
One of the features we've been struggling with is how to combine windows and walls. There are all kinds of walls (stone, wood, plaster, ...), and each wall type comes with a set of windows.
But sometimes you just want to place a stone window in a wooden wall. And to make that possible, Wim had to make a different 3D model for each combination of window-wall we wanted to support. That's a LOT of work if you want to make 10+ windows work with 10+ walls!
That's why I developed the system of cut-out windows. Instead of building all the different window-wall combinations, we dynamically cut the window shape out of the wall when we need it. That way, each window can be combined with each wall, opening up a wealth of possibilities! Want a grand stone arch in your rickety tavern? No problemo, we got you covered.
Here's a video of Wim playing around with the windows so you can see what's possible:
We're in good shape for the beta. All main features are in place and the AI is coming along nicely. There are still quite a few things that need to be implemented (mainly, menu's and other UI work), but the biggest hurdles have been taken. Now, it's just a matter of chugging along until we're ready to launch the beta.
The beta is almost there. Time to start thinking about your next campaign, and the maps you want to make for it :).